Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   OOP (https://www.clubdelphi.com/foros/forumdisplay.php?f=5)
-   -   TEdit Modificado (https://www.clubdelphi.com/foros/showthread.php?t=37501)

Behemot 15-11-2006 06:44:07

TEdit Modificado
 
Hola a Todos, necesito crear un objeto que herede de TEdit que haga lo siguiente:
- No deje modificar lo que encuentre en el edit. pe. que traiga datos de una tabla.
- Que la parte que le queda libre se pueda complementar.
- Lo que no se pueda modificar este en otro color.
- Que le pueda indicar el número de filas que a de tener.

y otra pregunta si uso el TRichEdit en cambio del TEdit en un form con unas 70 capturas que pasa con la memoria. He pensado usar el TRichEdit por que ya tiene lo del color y las lineas.

Gracias por sus respuestas.

dec 15-11-2006 06:54:44

Hola,

Perdona, pero, no consigo averiguar dónde está el problema...

Neftali [Germán.Estévez] 15-11-2006 11:23:27

Cita:

Empezado por Behemot
(1) No deje modificar lo que encuentre en el edit. pe. que traiga datos de una tabla.
(2) Que la parte que le queda libre se pueda complementar.
(3) Lo que no se pueda modificar este en otro color.
(4) Que le pueda indicar el número de filas que a de tener.

(4) Si necesitas múltiples líneas debes pensar en TRichEdit/TMemo.
(2)(3) Eso se puede hacer sobreescribiendo el método/mensaje de Paint (o similar). Seguramente deberás almacenar en algun sitio (propiedad) el texto que debe ser fijo

Cita:

Empezado por Behemot
...si uso el TRichEdit en cambio del TEdit en un form con unas 70 capturas que pasa con la memoria.

¿70 capturas qué significa? ¿70 componentes? No lo entiendo.

Behemot 15-11-2006 16:47:26

Ya logre hacer funcionar parte de lo que quiero lo hice con el TEdit pero me faltan el número de lineas y el color de la letra. Tratare de hacerlo con el TRichEdit. Lo otro es que lo hice controlando el objeto pero lo que necesito es heredar del objeto o mejor crear un componente pero no se como hacerlo.

Behemot 15-11-2006 16:53:32

Aqui les mando el codigo:
///////////////////////////////////////////////////////////////
Código Delphi [-]
 
procedure TForm1.ControlMouseMoveEdit(Sender: TObject; Shift: TShiftState; X,
  Y: Integer);
var
iCaracteres, iLineaPos, iCaracterPos : Integer;
begin
  // ControlMouseMoveEdit() se activa en : OnMouseMove
  iCaracteres := (Sender as TEdit).Tag;
  iLineaPos := SendMessage((Sender as TEdit).Handle,EM_LINEFROMCHAR,(Sender as TEdit).SelStart,0);
  iCaracterPos := SendMessage((Sender as TEdit).Handle,EM_LINEINDEX,iLineaPos,0);
  iCaracterPos := (Sender as TEdit).SelStart-iCaracterPos;
  if iCaracterPos < iCaracteres then begin
    (Sender as TEdit).SelStart := iCaracteres;
  end;
end;
//////////////////////////////////////////////

//////////////////////////////////////////////
Código Delphi [-]
 
procedure TForm1.ControlEdit(Sender: TObject; var Key: Word;
  Shift: TShiftState);
var
iCaracteres, Lpos, Cpos : Integer;
begin
    // ControlEdit() se activa en : OnKeyDown y OnKeyUp del Edit
    iCaracteres := (Sender as TEdit).Tag;
    Lpos := SendMessage((Sender as TEdit).Handle,EM_LINEFROMCHAR,(Sender as TEdit).SelStart,0);
    Cpos := SendMessage((Sender as TEdit).Handle,EM_LINEINDEX,Lpos,0);
    CPos := (Sender as TEdit).SelStart-CPos;
    Label2.Caption:=IntToStr(Cpos);  //Columna
    if (key = VK_BACK) or (key = VK_DELETE) then begin
      if Cpos < iCaracteres then begin
        (Sender as TEdit).Undo;
        (Sender as TEdit).SelStart := iCaracteres;
      end;
    end;
    if (key = VK_HOME) then begin
      (Sender as TEdit).SelStart := (Sender as TEdit).Tag;
    end;
    if (key = VK_LEFT) or (key = VK_UP) then begin
      if Cpos < iCaracteres then
       (Sender as TEdit).SelStart := iCaracteres;
    end;
    if(Key >= 30) and (Key <= 122) and (Key <> 35) and (Key <> 36) and not ((Key >= 37) and (Key <= 40)) then begin
      if( Length((Sender as TEdit).Text) = (Sender as TEdit).MaxLength) then
            SelectNext(Sender as TWincontrol, true, true);
    end;
    if (key = VK_DOWN) then begin
      SelectNext(Sender as TWincontrol, true, true);
    end;
end;
/////////////////////////////////////////////

/////////////////////////////////////////////
Código Delphi [-]
 
procedure TForm1.ControlMouseMoveEdit(Sender: TObject; Shift: TShiftState; X,
  Y: Integer);
var
iCaracteres, iLineaPos, iCaracterPos : Integer;
begin
  // ControlMouseMoveEdit() se activa en : OnMouseMove
  iCaracteres := (Sender as TEdit).Tag;
  iLineaPos := SendMessage((Sender as TEdit).Handle,EM_LINEFROMCHAR,(Sender as TEdit).SelStart,0);
  iCaracterPos := SendMessage((Sender as TEdit).Handle,EM_LINEINDEX,iLineaPos,0);
  iCaracterPos := (Sender as TEdit).SelStart-iCaracterPos;
  if iCaracterPos < iCaracteres then begin
    (Sender as TEdit).SelStart := iCaracteres;
  end;
end;
////////////////////////////////////////////

Behemot 15-11-2006 17:47:02

Cita:

¿70 capturas qué significa? ¿70 componentes? No lo entiendo.
Si la idea es utilizar el TRichEdit en vez del TEdit en el proceso de captura de datos, pero la pregunta es si la memoria se carga mucho con este componente o se maneja igual al TEdit.


La franja horaria es GMT +2. Ahora son las 12:50:31.

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