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 23-01-2010
mcsebas mcsebas is offline
Miembro
 
Registrado: feb 2008
Posts: 78
Poder: 17
mcsebas Va por buen camino
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
Responder Con Cita
  #2  
Antiguo 23-01-2010
Avatar de delphi.com.ar
delphi.com.ar delphi.com.ar is offline
Federico Firenze
 
Registrado: may 2003
Ubicación: Buenos Aires, Argentina *
Posts: 5.932
Poder: 26
delphi.com.ar Va por buen camino
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!
__________________
delphi.com.ar

Dedique el tiempo suficiente para formular su pregunta si pretende que alguien dedique su tiempo en contestarla.
Responder Con Cita
  #3  
Antiguo 23-01-2010
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
¿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
Responder Con Cita
  #4  
Antiguo 23-01-2010
Avatar de delphi.com.ar
delphi.com.ar delphi.com.ar is offline
Federico Firenze
 
Registrado: may 2003
Ubicación: Buenos Aires, Argentina *
Posts: 5.932
Poder: 26
delphi.com.ar Va por buen camino
Cita:
Empezado por roman Ver Mensaje
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 ...

Saludos!
__________________
delphi.com.ar

Dedique el tiempo suficiente para formular su pregunta si pretende que alguien dedique su tiempo en contestarla.
Responder Con Cita
  #5  
Antiguo 23-01-2010
mcsebas mcsebas is offline
Miembro
 
Registrado: feb 2008
Posts: 78
Poder: 17
mcsebas Va por buen camino
Smile

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.

Última edición por mcsebas fecha: 23-01-2010 a las 08:20:15.
Responder Con Cita
  #6  
Antiguo 23-01-2010
mcsebas mcsebas is offline
Miembro
 
Registrado: feb 2008
Posts: 78
Poder: 17
mcsebas Va por buen camino
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.
Responder Con Cita
  #7  
Antiguo 23-01-2010
Avatar de rgstuamigo
rgstuamigo rgstuamigo is offline
Miembro
 
Registrado: jul 2008
Ubicación: Santa Cruz de la Sierra-Bolivia
Posts: 1.646
Poder: 17
rgstuamigo Va por buen camino
Arrow

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 se los recomiendo ).
De esa manera tranquilamente me puedo crear miles de componentes, personalizados, evitandome estar instalandolo..
Saludos...
__________________
"Pedid, y se os dará; buscad, y hallaréis; llamad, y se os abrirá." Mt.7:7

Última edición por rgstuamigo fecha: 23-01-2010 a las 15:55:21.
Responder Con Cita
  #8  
Antiguo 23-01-2010
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Cita:
Empezado por rgstuamigo Ver Mensaje
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 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
Responder Con Cita
  #9  
Antiguo 23-01-2010
mcsebas mcsebas is offline
Miembro
 
Registrado: feb 2008
Posts: 78
Poder: 17
mcsebas Va por buen camino
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
Responder Con Cita
  #10  
Antiguo 25-01-2010
Avatar de rgstuamigo
rgstuamigo rgstuamigo is offline
Miembro
 
Registrado: jul 2008
Ubicación: Santa Cruz de la Sierra-Bolivia
Posts: 1.646
Poder: 17
rgstuamigo Va por buen camino
Arrow

Cita:
Empezado por mcsebas Ver Mensaje
... 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 ..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.
Saludos...
__________________
"Pedid, y se os dará; buscad, y hallaréis; llamad, y se os abrirá." Mt.7:7
Responder Con Cita
  #11  
Antiguo 27-01-2010
mcsebas mcsebas is offline
Miembro
 
Registrado: feb 2008
Posts: 78
Poder: 17
mcsebas Va por buen camino
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
Responder Con Cita
  #12  
Antiguo 27-01-2010
Avatar de rgstuamigo
rgstuamigo rgstuamigo is offline
Miembro
 
Registrado: jul 2008
Ubicación: Santa Cruz de la Sierra-Bolivia
Posts: 1.646
Poder: 17
rgstuamigo Va por buen camino
Arrow

Cita:
Empezado por mcsebas Ver Mensaje
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...
__________________
"Pedid, y se os dará; buscad, y hallaréis; llamad, y se os abrirá." Mt.7:7
Responder Con Cita
  #13  
Antiguo 28-01-2010
mcsebas mcsebas is offline
Miembro
 
Registrado: feb 2008
Posts: 78
Poder: 17
mcsebas Va por buen camino
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
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
Crear Message Dialog personalizado Alexis De la Cr OOP 5 11-11-2008 23:41:09
Crear Componente Personalizado. ingmichel Internet 3 04-09-2008 20:35:10
Como hacer TEdit Personalizado (maximo 10 caracteres, con una mascara, etc) mancurnino Conexión con bases de datos 2 08-03-2008 03:00:47
crear enlace personalizado en delphi 7 arespremium Internet 1 02-08-2007 22:05:24
¿Como crear un reporte personalizado? AndGaG Impresión 1 04-06-2006 10:59:08


La franja horaria es GMT +2. Ahora son las 19:55:26.


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