Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > OOP
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 11-11-2010
r1d2m3 r1d2m3 is offline
Miembro
 
Registrado: nov 2009
Posts: 88
Poder: 15
r1d2m3 Va por buen camino
Programando componentes visuales

Hola colegas, estoy realizando unas pruebas acerca del desarrollo de componentes visuales y estoy teniendo inconvenientes para avanzar, les cuento que pretendo hacer: por ahora es algo muy sencillo (al menos en apariencia), quiero crear un componente que tenga tres tedit para recibir una fecha (dia, mes y año), y cuando quiero implementarle propiedades para que reciba los valores del día, mes y año, me tira el siguiente error: raised exception class EInvalidOperation with message 'Cannot focus a disabled or invisible windows', entiendo que este mensaje es porque pretendo asignar el contenido a un campo que no puede recibir el foco porque la ventana es aún invisible, a continuación les pego el código que estoy usando para ver si me pueden ayudar.

Código Delphi [-]
unit MisFechas;

interface

uses
 Controls, StdCtrls, Classes;


type
  TFechas = class(TCustomControl)

  private
    { Private declarations }
        FCampoD: TEdit;
        FCampoM: TEdit;
        FCampoA: TEdit;
    vDia:Byte;
    vMes:Byte;
    vAni:Integer;

    procedure OnChangeClicD(Sender: TObject);
    procedure OnChangeClicM(Sender: TObject);
    function GetDia:Byte;
    procedure SetDia(Value:Byte);

  protected
    { Protected declarations }
  public
    { Public declarations }

    constructor Create(AOwner: TComponent); override;

  published
    { Published declarations }
    property Dia:Byte read GetDia write SetDia;

  end;

procedure Register;

implementation
  uses Dialogs, SysUtils;


  procedure Register;
  begin
    RegisterComponents('MisComponentes', [TFechas]);
  end;

  function TFechas.GetDia:Byte;
  begin
    Result:=vDia;
  end;

//aquí es donde pretendo asignar el valor del día y es donde se queda 
//colgada la aplicación generando el error que mencioné arriba.
  procedure TFechas.SetDia(Value: Byte);
  begin
    vDia:=Value;
    if (FCampoD.Visible) and (FCampoD.Enabled)  then    
      FCampoD.Text:=IntToStr(vDia);
  end;


  constructor TFechas.Create(AOwner: TComponent);
  begin
    inherited;

    Width := 85;
    Height := 21;

    FCampoD := TEdit.Create(Self);
    with FCampoD do
    begin
      SetBounds(0, 0, 22, 21);
      Visible := true;
      MaxLength:=2;
      OnChange := OnChangeClicD;
      Parent := Self;
    end;
    FCampoM := TEdit.Create(Self);
    with FCampoM do
    begin
      SetBounds(22, 0, 22, 21);
      Visible := true;
      MaxLength:=2;
      OnChange := OnChangeClicM;
      Parent := Self;
    end;
    FCampoA := TEdit.Create(Self);
    with FCampoA do
    begin
      SetBounds(44, 0, 40, 21);
      Visible := true;
      MaxLength:=4;
      Parent := Self;
    end;
  end;

  procedure TFechas.OnChangeClicD(Sender: TObject);
  begin
    if Length(FCampoD.Text)=FCampoD.MaxLength then
      try
        FCampoM.SetFocus;
      except
      end;
  end;
  procedure TFechas.OnChangeClicM(Sender: TObject);
  begin
    if Length(FCampoM.Text)=FCampoM.MaxLength then
      try
        FCampoA.SetFocus;
      except
      end;
  end;

end.

Espero me puedan ayudar, les mando saludos.
Responder Con Cita
  #2  
Antiguo 11-11-2010
Avatar de droguerman
droguerman droguerman is offline
Miembro
 
Registrado: abr 2005
Ubicación: tierra
Posts: 999
Poder: 20
droguerman Va por buen camino
Yo quitaría la condición de si es visible o enabled, porque no tiene nada que ver.

Además asignaría el texto con SendMessage(handle, WM_SETTEXT, .....)

Saludos.
__________________
self.free;
Responder Con Cita
  #3  
Antiguo 11-11-2010
r1d2m3 r1d2m3 is offline
Miembro
 
Registrado: nov 2009
Posts: 88
Poder: 15
r1d2m3 Va por buen camino
ya probé quitando esas condiciones y el problema persiste. Respecto de tu sugerencia de hacerlo con SendMessage, ¿esto significa utilizar la API?, si tienes algún ejemplo, te lo agradecería.
Responder Con Cita
  #4  
Antiguo 11-11-2010
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is offline
[becario]
 
Registrado: jul 2004
Ubicación: Barcelona - España
Posts: 18.265
Poder: 10
Neftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en bruto
Prueba a colocar esta línea al inicio de los eventos OnChangeClickD y OnChangeClicM.

Código Delphi [-]
    if (csLoading in Self.ComponentState) then begin
      Exit;
    end;
   ...
__________________
Germán Estévez => Web/Blog
Guía de estilo, Guía alternativa
Utiliza TAG's en tus mensajes.
Contactar con el Clubdelphi

P.D: Más tiempo dedicado a la pregunta=Mejores respuestas.
Responder Con Cita
  #5  
Antiguo 11-11-2010
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is offline
[becario]
 
Registrado: jul 2004
Ubicación: Barcelona - España
Posts: 18.265
Poder: 10
Neftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en bruto
Por cierto, no he comentado, que para este caso, también puede ser adecuado sea un Frame, con lo componentes y el comportamiento que necesites.
__________________
Germán Estévez => Web/Blog
Guía de estilo, Guía alternativa
Utiliza TAG's en tus mensajes.
Contactar con el Clubdelphi

P.D: Más tiempo dedicado a la pregunta=Mejores respuestas.
Responder Con Cita
  #6  
Antiguo 11-11-2010
r1d2m3 r1d2m3 is offline
Miembro
 
Registrado: nov 2009
Posts: 88
Poder: 15
r1d2m3 Va por buen camino
Gracias Neftali, funcionó perfecto.

Saludos.
Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

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
Navegar sin componentes visuales kdemia Internet 2 04-09-2010 04:38:29
Java y componentes visuales kakarotv5 JAVA 7 12-03-2008 16:21:58
¿ skin , skn , componentes visuales , interfaz ? Ni guarra de esto... Peterman Gráficos 1 30-05-2007 17:04:56
componentes visuales y speedbutton JaMFrY Varios 5 28-02-2004 15:39:41
Componentes Visuales, como propiedad de otro Componente ingacg OOP 5 01-07-2003 23:10:39


La franja horaria es GMT +2. Ahora son las 18:27:09.


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