Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 28-11-2011
Nicolas_2011 Nicolas_2011 is offline
Miembro
NULL
 
Registrado: sep 2011
Posts: 59
Poder: 13
Nicolas_2011 Va por buen camino
Editor de texto se tilda

buenas gente tengo un problemita con un editor de texto, el tema es que cuando abro un archivo si es que el mismo es muy extenso por ejemplo el que tengo abierto en este momento tiene mas de 220 lineas y mas de 15500 letras se tilda..osea se queda muerto durante varios segundos y reacciona intento hacer cualquier cosa con el texto(ej cambiale color de letras subrayar en fin.. cualquier cosa) y se tilda de nuevo, esto no ocurre con textos pequeños.. alguien sabe porque y sabe la solucion? si necesitan ver el codigo me dicen y lo posteo
Responder Con Cita
  #2  
Antiguo 28-11-2011
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Hola Nicolas.

Cita:
si necesitan ver el codigo me dicen y lo posteo
Sería un buen comienzo, de otro modo no veo la posibilidad de averiguar que está sucediendo...


Saludos.
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #3  
Antiguo 28-11-2011
Nicolas_2011 Nicolas_2011 is offline
Miembro
NULL
 
Registrado: sep 2011
Posts: 59
Poder: 13
Nicolas_2011 Va por buen camino
Código Delphi [-]
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, ImgList, ComCtrls, StdCtrls, ToolWin, Menus, jpeg, ExtCtrls, Printers,
  Buttons;

type
  TForm1 = class(TForm)
    Feditor: TMainMenu;
    editor: TRichEdit;
    Dabrir: TOpenDialog;
    Dguardar: TSaveDialog;
    Dfuentes: TFontDialog;
    barradeestado: TStatusBar;
    barraarchivo: TToolBar;
    listaimagenes: TImageList;
    Nuevo1: TMenuItem;
    Abrir1: TMenuItem;
    Guardar1: TMenuItem;
    Nuevo2: TMenuItem;
    Cerrar1: TMenuItem;
    Edicion1: TMenuItem;
    Copiar1: TMenuItem;
    Cortar1: TMenuItem;
    Pegar1: TMenuItem;
    N2: TMenuItem;
    Fuente1: TMenuItem;
    ToolButton1: TToolButton;
    ToolButton2: TToolButton;
    ToolButton3: TToolButton;
    Izquierda: TToolButton;
    centro: TToolButton;
    Derecha: TToolButton;
    PopupMenu1: TPopupMenu;
    Pegar2: TMenuItem;
    Cortar2: TMenuItem;
    N3: TMenuItem;
    Fuente2: TMenuItem;
    Copiar2: TMenuItem;
    Propiedades1: TMenuItem;
    Alineacion1: TMenuItem;
    Izquierda1: TMenuItem;
    Centro1: TMenuItem;
    Derecha1: TMenuItem;
    N4: TMenuItem;
    ToolButton4: TToolButton;
    ToolButton5: TToolButton;
    ToolButton6: TToolButton;
    ToolButton7: TToolButton;
    ToolButton8: TToolButton;
    ToolButton9: TToolButton;
    ToolButton10: TToolButton;
    ToolButton11: TToolButton;
    Fuente3: TMenuItem;
    Ayuda1: TMenuItem;
    Imprimir1: TMenuItem;
    N1: TMenuItem;
    Image1: TImage;
    ToolButton12: TToolButton;
    ToolButton13: TToolButton;
    PrintDialog1: TPrintDialog;
    FindDialog1: TFindDialog;
    ReplaceDialog1: TReplaceDialog;
    Buscar1: TMenuItem;
    Reemplazar1: TMenuItem;
    procedure Abrir1Click(Sender: TObject);
    procedure Guardar1Click(Sender: TObject);
    procedure Nuevo2Click(Sender: TObject);
    procedure Copiar1Click(Sender: TObject);
    procedure Cortar1Click(Sender: TObject);
    procedure Pegar1Click(Sender: TObject);
    procedure Fuente1Click(Sender: TObject);
    procedure IzquierdaClick(Sender: TObject);
    procedure centroClick(Sender: TObject);
    procedure DerechaClick(Sender: TObject);
    procedure FormActivate(Sender: TObject);
    procedure ToolButton5Click(Sender: TObject);
    procedure ToolButton6Click(Sender: TObject);
    procedure ToolButton7Click(Sender: TObject);
    procedure ToolButton8Click(Sender: TObject);
    procedure editorSelectionChange(Sender: TObject);
    procedure ToolButton11Click(Sender: TObject);
    function nrocaracteres(editor: TRichEdit): integer;
    procedure ToolButton12Click(Sender: TObject);
    procedure ToolButton13Click(Sender: TObject);
    procedure FindDialog1Find(Sender: TObject);
    procedure ReplaceDialog1Find(Sender: TObject);
    procedure ReplaceDialog1Replace(Sender: TObject);
    procedure editorKeyDown(Sender: TObject; var Key: Word;
      Shift: TShiftState);
    procedure RichEdit1KeyUp(Sender: TObject; var Key: Word; Shift: TShiftState);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;
i,c,a,ban:integer ;
implementation

{$R *.dfm}

procedure TForm1.Abrir1Click(Sender: TObject);  //boton abrir
begin
If Dabrir.Execute then
  editor.Lines.LoadFromFile(Dabrir.FileName);
end;

procedure TForm1.Guardar1Click(Sender: TObject); //boton guardar
begin
If Dguardar.Execute then
  editor.Lines.SaveToFile(Dguardar.FileName);
end;

procedure TForm1.Nuevo2Click(Sender: TObject); //boton nuevo
begin
If editor.Text <> '' then
  if application.MessageBox('¿Desea Guardar El Texto Actual?', 'ATENCION', MB_ICONQUESTION OR MB_YESNO)= ID_YES THEN
  Guardar1Click(Self);
editor.clear;
end;

procedure TForm1.Copiar1Click(Sender: TObject);  //copiar
begin
editor.CopyToClipboard;
end;

procedure TForm1.Cortar1Click(Sender: TObject);  //cortar
begin
editor.CutToClipboard;
end;

procedure TForm1.Pegar1Click(Sender: TObject);  //pegar
begin
editor.PasteFromClipboard;
end;

procedure TForm1.Fuente1Click(Sender: TObject); //fuente
begin
If Dfuentes.Execute then
editor.SelAttributes.Name :=  Dfuentes.Font.Name;
editor.SelAttributes.Color := Dfuentes.Font.Color;
editor.SelAttributes.Style := Dfuentes.Font.Style;
editor.SelAttributes.Size :=  Dfuentes.Font.Size;
end;

  procedure TForm1.IzquierdaClick(Sender: TObject); //justificado izquierda
begin
 editor.Paragraph.Alignment := taLeftJustify;
end;

procedure TForm1.centroClick(Sender: TObject);  //justificado centro
begin
 editor.Paragraph.Alignment := taCenter;
end;

procedure TForm1.DerechaClick(Sender: TObject); //justificado derecha
begin
 editor.Paragraph.Alignment := taRightJustify;
end;


procedure TForm1.FormActivate(Sender: TObject);
begin
c:=0;
//Fila y columna
barradeestado.Panels[0].Text := Format('Fila: %d Columna: %d', [editor.CaretPos.y+1, editor.CaretPos.X+1]);

//lineas
barradeestado.Panels[1].Text :=  IntToStr(editor.Lines.Count);

// contar palabras
for I := 1 to Length(editor.Text) do
if pos(editor.Text[i],'')> 0 then
Inc(c);
barradeestado.Panels[2].Text:= IntToStr(c);
// contar caracteres
barradeestado.Panels[3].Text := 'Letras: '+ IntToStr(NroCaracteres(editor));
end;

procedure TForm1.editorSelectionChange(Sender: TObject);
begin
c:=0;
barradeestado.Panels[0].Text := Format('Fila: %d Columna: %d', [editor.CaretPos.y+1, editor.CaretPos.X+1]);
barradeestado. Panels[1].Text := 'Lineas:'+' ' + IntToStr(editor.Lines.Count); // Contar lineas
for I := 1 to Length(editor.Text) do  // contar palabras
if pos(editor.Text[i],'')> 0 then
Inc(c);
barradeestado.Panels[2].Text:=IntToStr(c);
//caracteres
barradeestado.Panels[3].Text := 'Letras: '+ IntToStr(NroCaracteres(editor));
end;

procedure TForm1.ToolButton5Click(Sender: TObject); // negrita
begin
With editor.SelAttributes do
  if ( fsBold in Style ) then
  Style := Style-[FSBOLD] else
  Style := Style+[FSBOLD];
end;

procedure TForm1.ToolButton6Click(Sender: TObject); //cursiva
begin
With editor.SelAttributes do
  if ( fsItalic in Style ) then
  Style := Style-[fsItalic] else
  Style := Style+[fsItalic];
end;


procedure TForm1.ToolButton7Click(Sender: TObject); //Subrayado
begin
With editor.SelAttributes do
if ( fsunderline in Style ) then
Style := Style-[fsunderline] else
Style := Style+[fsunderline];
end;


procedure TForm1.ToolButton8Click(Sender: TObject); //tachada
begin
With editor.SelAttributes do
    if ( fsstrikeout in Style ) then
    Style := Style-[fsstrikeout] else
    Style := Style+[fsstrikeout];
end;




procedure TForm1.ToolButton11Click(Sender: TObject);  //Imprimir
var
 i, x, y, h :integer;
begin
if not PrintDialog1.Execute then ShowMessage('La impresion fue cancelada')
else
with Printer do
begin
BeginDoc;
x:= 10; y:=60;
h:= Canvas.TextHeight('T')+1;
For i:=0 to editor.Lines.Count-1 do
  begin
canvas.TextOut(x,y,editor.Lines[i]);
inc(y,h);
  end;
EndDoc;
  end;
end;

function Tform1.nrocaracteres(editor: TRichEdit): integer;  //funcion caracteres
var
i:integer;
begin
  Result:=0;
  for i:=1 to length (editor.Text) do
  if UpCase(editor.text[i]) <> ' ' then
  Inc(Result);
  end;

 /////////////
  procedure TForm1.ToolButton12Click(Sender: TObject);
begin
finddialog1.Execute;
end;

procedure TForm1.ToolButton13Click(Sender: TObject);
begin
replacedialog1.Execute;
ban:=0;
end;

procedure TForm1.FindDialog1Find(Sender: TObject); //proc buscar
begin
a:=0;
a:=editor.FindText(finddialog1.FindText, 0, length(editor.text), [stmatchcase]);
if (a>-1) then
  begin
  editor.SetFocus;
  editor.selstart:=a;
  editor.sellength:=length(finddialog1.findtext);
  end
else
  messagedlg('No se encontró  el texto buscado',mtinformation, [mbok], 0);
end;

procedure TForm1.ReplaceDialog1Find(Sender: TObject);
begin
a:=0;
a:=editor.FindText(replacedialog1.FindText, 0, length(editor.text), [stmatchcase]);
if (a>-1) then
  begin
  editor.SetFocus;
  editor.selstart:=a;
  editor.sellength:=length(replacedialog1.findtext);
  end
else
  messagedlg('No se encontró  el texto buscado',mtinformation, [mbok], 0);
end;


procedure TForm1.ReplaceDialog1Replace(Sender: TObject);//PROC REEMP/REEMP
begin
if (a>-1) and (ban=0)then
  begin
  ban:=1;
  a:=editor.FindText(replacedialog1.FindText, 0, length(editor.text), [stmatchcase]);
  editor.SetFocus;
  editor.selstart:=a;
  editor.sellength:=length(replacedialog1.findtext);
  editor.SelText:=replacedialog1.ReplaceText;
  end
else
  messagedlg('No se encontró texto para reemplazar',mtinformation, [mbok], 0);
end;

procedure TForm1.editorKeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
  if key = VK_CONTROL then
   mouse_event(MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0);
end;


procedure TForm1.RichEdit1KeyUp(Sender: TObject; var Key: Word; Shift: TShiftState);
begin
if key = VK_CONTROL then
     mouse_event(MOUSEEVENTF_LEFTUP, 0, 0, 0, 0);

end;
end.

Última edición por Nicolas_2011 fecha: 28-11-2011 a las 21:29:35.
Responder Con Cita
  #4  
Antiguo 28-11-2011
Nicolas_2011 Nicolas_2011 is offline
Miembro
NULL
 
Registrado: sep 2011
Posts: 59
Poder: 13
Nicolas_2011 Va por buen camino
Listo, ahi esta perdon..
Responder Con Cita
  #5  
Antiguo 28-11-2011
Nicolas_2011 Nicolas_2011 is offline
Miembro
NULL
 
Registrado: sep 2011
Posts: 59
Poder: 13
Nicolas_2011 Va por buen camino
si lo se amigo, perdon como dije se me fue el dedo, disculpas
Responder Con Cita
  #6  
Antiguo 28-11-2011
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.038
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Has sido más rápido que yo en borrar mi mensaje
Responder Con Cita
  #7  
Antiguo 28-11-2011
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Hola Nicolás.

Estuve mirando el código e indudablemente el por qué de ese comportamiento se encuentra en el evento OnActivate, más exáctamente en este código:
Código Delphi [-]
 ...
   // contar palabras
    for I := 1 to Length(RichEdit1.Text) do
      if pos(RichEdit1.Text[i],'')> 0 then
        Inc(c);
    barradeestado.Panels[2].Text:= IntToStr(c);
    // contar caracteres
    barradeestado.Panels[3].Text := 'Letras: '+ IntToStr(NroCaracteres(RichEdit1));
  ...
Esas dos, no són taréas rápidas si se trata con archivos muy grandes.

Para probar lo que te comento, sólo encerra entre llaves las líneas como en el siguiente codigo y ejecutalo:
Código Delphi [-]
procedure TForm1.FormActivate(Sender: TObject);
var
  i: Integer;
begin
  barradeestado.Panels[0].Text := Format('Fila: %d Columna: %d',
    [RichEdit1.CaretPos.y+1, RichEdit1.CaretPos.X+1]);
 //lineas
  barradeestado.Panels[1].Text :=  IntToStr(RichEdit1.Lines.Count);
 {
  // contar palabras
  for I := 1 to Length(RichEdit1.Text) do
    if pos(RichEdit1.Text[i],'')> 0 then
      Inc(c);
  barradeestado.Panels[2].Text:= IntToStr(c);
  // contar caracteres
  barradeestado.Panels[3].Text := 'Letras: '+ IntToStr(NroCaracteres(RichEdit1));
  }
end;

Saludos.
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....

Última edición por ecfisa fecha: 28-11-2011 a las 23:03:34.
Responder Con Cita
  #8  
Antiguo 28-11-2011
Nicolas_2011 Nicolas_2011 is offline
Miembro
NULL
 
Registrado: sep 2011
Posts: 59
Poder: 13
Nicolas_2011 Va por buen camino
Muy bien ahora lo pruebo, una pregunta mas, pregunto esto porque no tengo idea ya que nuestro profesor no nos explico tdavia estos comportamientos, si reviste el codigo habras visto que en el items NUEVO se ejecuta un mensaje si desea guardar el archivo.. etc etc. ahora como hago ese evento pero si se preciona el boton cerrar.. el de windows no se como se llama jaja la X de la parte superior derecha..
Responder Con Cita
  #9  
Antiguo 28-11-2011
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Hola.

Para cerrar el form sólo es necesario llamar al procedimiento Close del mismo:
Código Delphi [-]
procedure TForm1.btnCerrarClick(Sender: TObject);
begin
  Close;
end;

Saludos.
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #10  
Antiguo 28-11-2011
Nicolas_2011 Nicolas_2011 is offline
Miembro
NULL
 
Registrado: sep 2011
Posts: 59
Poder: 13
Nicolas_2011 Va por buen camino
Gracias =D
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Editor de texto. rauros OOP 57 09-03-2008 13:57:27
componente editor de texto clanmilano Varios 1 23-01-2006 15:41:37
necesito editor de texto.... User_baja1 Varios 4 21-03-2005 11:53:30
Editor de Texto kael Varios 1 02-11-2004 18:18:42
Editor que resalte texto igest2000 Varios 0 10-12-2003 16:23:21


La franja horaria es GMT +2. Ahora son las 20:29:39.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi