Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Crear un TEdit personalizado (https://www.clubdelphi.com/foros/showthread.php?t=65946)

mcsebas 23-01-2010 01:04:29

Crear un TEdit personalizado
 
Holas a todos estoy con el siguiente problema:

Resulta que estoy queriendo hacer un componente del tipo TEdit que cuando reciba el foco cambie el color fondo y cuando lo pierda vuelva ser de color blanco; además que cuando se presione la tecla ENTER salte al siguiente control o sea simulando la tecla TAB.

¿Como hago para crear un componente VCL personalizado que me haga esto?

Gracias :)

delphi.com.ar 23-01-2010 01:18:12

Para el cambio de color, crearía las propiedades para cada color, sobreescribiría los métodos WMSetFocus y WMKillFocus donde asignaría el color que deseo según la circunstancia. Para lo del foco si no quieres utilizar algo como la propiedad KeyPreview del formulario que lo contiene, puedes sobreescribir el método KeyPress llamando al método SelectNext del contenedor del mismo.

Saludos!

roman 23-01-2010 01:50:45

¿No te refieres más bien a los mensajes WM_SETFOCUS y WM_KILLFOCUS?

En todo caso, creo que son más adecuados los métodos DoEnter y DoExit. Casualmente me encontré este ejemplito que creo le viene como anillo al dedo a mcsebas.

// Saludos

delphi.com.ar 23-01-2010 01:54:31

Cita:

Empezado por roman (Mensaje 351640)
En todo caso, creo que son más adecuados los métodos DoEnter y DoExit. Casualmente me encontré este ejemplito que creo le viene como anillo al dedo a mcsebas.

Sabes que estuve buscando ESE ejemplo!.. recordaba que estaba en el foro, solo que creí haberlo escrito yo, y busqué solo en mis hilos :p...

Saludos!

mcsebas 23-01-2010 07:44:08

Chicos me viene sirviendo todo de pelos pero estoy teniendo problemas con el tema de simular la tecla TAB. Me da como que la variable Key no existe si bien en el evento KeyPress si existe. Aquí les dejo el codigo y me corrigen porfis.

Gracias.

mcsebas 23-01-2010 07:50:31

Ahhhhhh que pasoooooooooo !!! con el fragmento de codigo

Código Delphi [-]
unit CajaTexto;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, ExtCtrls;
type
  TCajaTexto = class(TEdit)
  private
    { Private declarations }
  protected
    procedure DoEnter; override;
    procedure DoExit; override;
    procedure DoKeyPress; override;
  public
    { Public declarations }
  published
    { Published declarations }
  end;

procedure Register;

implementation

procedure Register;
begin
  RegisterComponents('Mis Componentes', [TCajaTexto]);
end;


////////////////////////
// Recibiendo el Foco //
////////////////////////
procedure TCajaTexto.DoEnter;
begin
    inherited;
    Color:=clInfoBk;
end;


///////////////////////
// Perdiendo el Foco //
///////////////////////
procedure TCajaTexto.DoExit;
begin
    inherited;
    Color:=clWindow;
end;


////////////////////////
//Simulando Tecla TAB //
////////////////////////
procedure TCajaTexto.DoKeyPress;
begin
      inherited;
      if Key = #13 then
      begin
        Key := #0;
        Perform(WM_NEXTDLGCTL,0,0);
      end
end;
end.

rgstuamigo 23-01-2010 15:51:34

Segun tu codigo lo que veo que el metodo que debes sobreescribir es:
Código Delphi [-]
protected
...
procedure KeyPress(var Key: Char);Override;//<--;)  tiene parametro
...
Ahora en la implemtacion podrias poner este codigo:
Código Delphi [-]
...
procedure TCajaTexto.KeyPress(var Key: Char);
begin
inherited;//<--Hago que se ejecute OnKeyPress normalmente si es que el usuario a puesto codigo
 if Key=#13 then
  begin
    Key:=#0;
    keybd_event(VK_TAB,0,0,0);//<--simulo la pulsacion de la tecla TAB
  end;
end;
TIP (Propina ;)): Segun veo tu componente, en realidad no se han hecho muchos cambios grandes por asi decirlo; en lo personal, yo no haria un nuevo componente por esas pequeñas cositas; lo que haria seria utilizar algunos truquitos (por asi decirlo)haciendole creer a delphi que tengo un nuevo componente (Que compile mi Componente y no el que tiene en la paleta) pero que en realidad he usado una Clase Interpuesta.;)(Muy buenos articulos tiene el Dr. Marteens :eek: se los recomiendo ;)).
De esa manera tranquilamente me puedo crear miles de componentes, personalizados, evitandome estar instalandolo.;).
Saludos...:)

roman 23-01-2010 19:03:25

Cita:

Empezado por rgstuamigo (Mensaje 351667)
Segun veo tu componente, en realidad no se han hecho muchos cambios grandes por asi decirlo; en lo personal, yo no haria un nuevo componente por esas pequeñas cositas; lo que haria seria utilizar algunos truquitos (por asi decirlo)haciendole creer a delphi que tengo un nuevo componente (Que compile mi Componente y no el que tiene en la paleta) pero que en realidad he usado una Clase Interpuesta.;)(Muy buenos articulos tiene el Dr. Marteens :eek: se los recomiendo ;)).
De esa manera tranquilamente me puedo crear miles de componentes, personalizados, evitandome estar instalandolo.;).
Saludos...:)

Yo creo que la decisión de instalar o no nuevos componentes no depende tanto de la cantidad o complejidad de los cambios, sino más de la frecuencia de uso de dichos componentes. Sí la nueva funcionalidad se va a utilizar sólo una ocasión, en un sólo formulario, pues ciertamente conviene usar una técnica como la que mencionas. Pero si requieres usarla en múltiples partes de tu aplicación, entonces es mejor instalar un nuevo componente.

// Saludos

mcsebas 23-01-2010 19:19:11

Hermano muchisimas gracias me sirvio de pelos el ejemplo ahora sabes en donde puedo encontrar información respecto a programacion en tres capas con delphi; es que vengo de .Net y estoy mal acostumbrado.

Gracias :)

rgstuamigo 25-01-2010 14:10:59

Cita:

Empezado por mcsebas (Mensaje 351675)
... ahora sabes en donde puedo encontrar información respecto a programacion en tres capas con delphi; es que vengo de .Net y estoy mal acostumbrado.

Gracias :)

Bueno :rolleyes:..puedes ver estas 7 partes que hablan exactamente de crear aplicaciones multicapa en Delphi.;)
1,2,3,4,5,6 y 7.
Hechale una buena leida sin flojear.;):D
Saludos...:)

mcsebas 27-01-2010 00:12:18

Gracias MAN me viene al pelo, necesito entender este metodología porque si bien en .Net es mucho más facil aplicarla pero a la hora de que la aplicación se ejecute va más lenta que una tortuga.

Sólo me sigue quedando la duda sobre como crear una DLL con formularios en delphi.

Puedo agregar clases a una DLL y despues instanciarlas desde otra parte.

Gracias :D

rgstuamigo 27-01-2010 19:54:52

Cita:

Empezado por mcsebas (Mensaje 351940)
Gracias MAN me viene al pelo, necesito entender este metodología porque si bien en .Net es mucho más facil aplicarla pero a la hora de que la aplicación se ejecute va más lenta que una tortuga.

Ok..como no tienes mucha experiencia con Delphi te recomiendo en lo posible leer un buen libro al respecto para conocerlo mas; puede ser por ejemplo La cara Oculta de Delphi 4 ;).
Y como estabas necesitando como hacer aplicaciones en 3 capas, quisas mas bien seria mejor que empesaras a trabajar de la forma como se indica en estas otras paginas 1,2,3,4 y 5 ;).
Saludos...:)

mcsebas 28-01-2010 08:46:55

Camarada muchisimas gracias por tus ayudas me vienen super bien estoy descubriendo cosas de Delphi que antes no las podia realizar porque estaba tan mal acostumbrado a la metodología Moco$oft.

Realmente gracias.

La aplicacion que estoy realizando cada vez esta siendo más eficiente con el manejo de los datos.


GRACIAS :D


La franja horaria es GMT +2. Ahora son las 17:46:45.

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