Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

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

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 13-07-2003
HombreSigma HombreSigma is offline
Miembro
 
Registrado: jun 2003
Ubicación: World
Posts: 114
Poder: 21
HombreSigma Va por buen camino
Componente derivado de DBEdit que active un hint con un dato específico

Tengo un componente TDBEditX diseñado por mi heredado de un TDBEdit

En el evento OnCreate del mismo TDBEditx trato de asignar un hint que depende del nombre del campo, es decir desde una tabla busco el campo y hallo una explicación del mismo que luego deseo asignar a la propiedad hint del componente.

El problema es que el nombre del campo está en la propiedad DataField de TDBEditx que dentro del 'construct' del mismo es desconocida.

Hay alguna forma de asignar este hint que se active después de ejecutar el evento Create del TDBEdit , de tal manera que ya sea conocida la propiedad DataField?


Gracias de antemano.
__________________
SigmaMan
Responder Con Cita
  #2  
Antiguo 13-07-2003
Avatar de marcoszorrilla
marcoszorrilla marcoszorrilla is offline
Capo
 
Registrado: may 2003
Ubicación: Cantabria - España
Posts: 11.221
Poder: 10
marcoszorrilla Va por buen camino
Yo creo que hasta que se produzca la asignación será imposible atribuirle un "Hint", puesto que desconocemos a que campo va a asociarse dicho Dbedit.

Como tu lo estás programando supongo que ya tendrás controlado en que momento se produce la asignación, en este momento por elemplo podrías llamar a una función CargaHints que hicera dicho trabajo.

Dbedit1.Hint:='Bla.....';
Dbedit1.ShowHint:=True;

Espero te sirva la idea.

Un Saludo.
Responder Con Cita
  #3  
Antiguo 13-07-2003
HombreSigma HombreSigma is offline
Miembro
 
Registrado: jun 2003
Ubicación: World
Posts: 114
Poder: 21
HombreSigma Va por buen camino


Precisamente eso es lo que quiero averiguar.

Existe algún evento que me permita capturar el datafield, antes de mostrar el hint?

Intenté con el onshowhint pero este es un evento de TApplication y no de TDBEdit.

Y es que debiera existir tal evento !

Sino como hago para inicializar ciertas variables u operaciones del componente que dependan de los valores de las propiedades del mismo?
__________________
SigmaMan
Responder Con Cita
  #4  
Antiguo 14-07-2003
andres1569 andres1569 is offline
Miembro
 
Registrado: may 2003
Posts: 908
Poder: 22
andres1569 Va por buen camino
Hola:

Prueba a interceptar el mensaje CM_HINTSHOW en tu componente, que se dispara cuando se necesita capturar el Hint, algo así como:
Código:
TDBEditHint = class(TDBEdit)
  private
    procedure CMHintShow(var Message: TMessage); message CM_HINTSHOW;
  ...
  end;

procedure TDBEditHint.CMHintShow(var Message: TMessage);
begin
  if Field <> nil then  
    with TCMHintShow(Message) do
      if TablaBusqueda.Locate(DataField, Field.Value, [loCaseInsensitive]) then
        HintInfo^.HintStr := TablaBusqueda.FieldByName('Descripcion').AsString
      else HintInfo^.HintStr := 'Descripción no disponible';
  inherited;
end;
Este ejemplo te sirve para inicializar el Hint, dependiendo del valor del campo en ese registro, no sé si es eso lo que pretendes, ten en cuenta que si se cambia de registro, el valor del Hint deberá cambiar también.
Cita:
Sino como hago para inicializar ciertas variables u operaciones del componente que dependan de los valores de las propiedades del mismo?
Si el Hint va a ser permanente, es decir que no depende del valor del registro sino de la propiedad DataField, por ejemplo, el lugar idóneo para asignarlo es en el método Loaded que se llama una vez cargadas las propiedades desde el stream .DFM, ahí aprovechas para asignar la propiedad Hint:
Código:
TDBEditHint = class(TDBEdit)
protected
  procedure Loaded;   override;
  ...
end;

procedure TDBEditHint.Loaded;
begin
  inherited Loaded;
  Hint := 'Mi nombre es ' + DataField; 
end;
__________________
Guía de Estilo
Responder Con Cita
  #5  
Antiguo 15-07-2003
Avatar de jachguate
jachguate jachguate is offline
Miembro
 
Registrado: may 2003
Ubicación: Guatemala
Posts: 6.254
Poder: 28
jachguate Va por buen camino
Durante la construcción, no todos los objetos del mismo nivel están disponibles, debido a que se crean a medida que se "extraen" del ejecutable. Sin embargo hay un método protegido llamado Loaded, que se invoca cuando todos los objetos ya han sido creados y las relaciones entre objetos ya están disponibles.

Lo normal sería utilizar este método, algo así como:

Código:
Interface
  TMyDBEdit : Class(TDBEdit)
   ..
  Protected
    Procedure Loaded; override;
  ...
  End;

Implementation
...
Procedure TDBMyEdit.Loaded;

Begin
  inherited;
  if not csDesigning in ComponentState Then
    Hint := BuscarHintParaElCampo(Self.FieldName);
End;
...
Espero te sirva.

Hasta luego,

__________________
Juan Antonio Castillo Hernández (jachguate)
Guía de Estilo | Etiqueta CODE | Búsca antes de preguntar | blog de jachguate
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


La franja horaria es GMT +2. Ahora son las 13:29:12.


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