Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   OOP (https://www.clubdelphi.com/foros/forumdisplay.php?f=5)
-   -   Detectar evento cambio de foco (https://www.clubdelphi.com/foros/showthread.php?t=37227)

pborges36 29-09-2010 18:20:49

Cita:

Empezado por jafera (Mensaje 377760)
...Project xxx.exe raised exception class EInvalidCast with message 'Invalid class Typecast' Process stoped Press Step or Run to continue...

Me suena a configuracion de Delphi.
Revisa debugger options, la opcion: stop on delphi exception (o notify on languaje exceptions, depende de la version) debe estar destiltada.

Saludos.

jafera 29-09-2010 19:02:14

Ok, solucionado el error.

El componente no me funciona del todo bien, explico:

Tengo una aplicacion MDI, coloco el componente en el form principal, lo coloco en un hijo y no cambia nada, pero dentro del hijo tengo un form normal, para busquedas, y allí si funciona.

Puede tener algo que ver el que el form stile sea un MDI Child?

Gracias por adelantado

Saludos

Josep

pborges36 29-09-2010 21:46:09

Cita:

Empezado por jafera (Mensaje 377895)
...Tengo una aplicacion MDI, coloco el componente en el form principal, lo coloco en un hijo y no cambia nada, pero dentro del hijo tengo un form normal, para busquedas, y allí si funciona.

Puede tener algo que ver el que el form stile sea un MDI Child?...

La verdad no tuve problemas con MDI. Solo una observacion, el componente lo pegue una unica vez en el form principal y funciona para toda la aplicacion.

Saludos.

jafera 30-09-2010 10:48:28

Buenas de nuevo, creo que el problema viene porque los componentes son DBEdit, si son Edit normales si funciona.

Como declaro esto, pero para un DBEdit?

Código Delphi [-]
if (Componente is TCustomEdit)     then (Componente as TEdit).Color := Color;

Saludos

Josep

pborges36 30-09-2010 21:43:27

el procedimiento AplicarColor lo tengo implementeado de la siguiente manera:

Código Delphi [-]
Procedure TBRGFocusAdmin.AplicarColor(colorf:TColor;Componente:TComponent);
begin
    try
      if (Componente is TEdit) then
        begin
            (Componente as TEdit).Color:=colorf;
        end;
      if (Componente is TComboBox) then
        begin
            (Componente as TComboBox).Color:=colorf;
        end;
      if (Componente is TDateTimePicker) then
        begin
            (Componente as TDateTimePicker).Color:=colorf;
        end;
      if (Componente is TMemo) then
        begin
            (Componente as TMemo).Color:=colorf;
        end;
      (Componente as TWinControl).Repaint;
    except
    end;
end;

Creo que solo faltaria agregar la clase del componente que estas usando.
algo como:

Código Delphi [-]
if (Componente is TDBEdit) then
        begin
            (Componente as TDBEdit).Color:=colorf;
        end;

Saludos.

Neftali [Germán.Estévez] 01-10-2010 10:26:22

Cita:

Empezado por pborges36 (Mensaje 378038)
el procedimiento AplicarColor lo tengo implementeado de la siguiente manera

Si quieres simplificar este procedimiento y además evitar que falle para tipos que no tengas añadidos en el IF (es decir, que funcione para todos) puedes utilizar RTTI. Revisa este truquillo, ahí se explica cómo hacerlo.

De esta foprma con algo así te vadría para cuelquier control que derive de TComponent:

Código Delphi [-]
  SetPropAsString(Componente, 'Color', 'colorf');

oscarac 25-05-2014 22:41:50

me esta saliendo el mismo error
alguien soluciono o probo este componente?

oscarac 25-05-2014 23:07:14

Cita:

Empezado por pborges36 (Mensaje 378038)
el procedimiento AplicarColor lo tengo implementeado de la siguiente manera:

Código Delphi [-]
Procedure TBRGFocusAdmin.AplicarColor(colorf:TColor;Componente:TComponent);
begin
    try
      if (Componente is TEdit) then
        begin
            (Componente as TEdit).Color:=colorf;
        end;
      if (Componente is TComboBox) then
        begin
            (Componente as TComboBox).Color:=colorf;
        end;
      if (Componente is TDateTimePicker) then
        begin
            (Componente as TDateTimePicker).Color:=colorf;
        end;
      if (Componente is TMemo) then
        begin
            (Componente as TMemo).Color:=colorf;
        end;
      (Componente as TWinControl).Repaint;
    except
    end;
end;

Creo que solo faltaria agregar la clase del componente que estas usando.
algo como:

Código Delphi [-]
if (Componente is TDBEdit) then
        begin
            (Componente as TDBEdit).Color:=colorf;
        end;

Saludos.

erro mio me falto agregar la unidad DbCtrls...
espero q a alguien le sirva

pborges36 26-05-2014 03:34:48

Buena oscarac.
Saludos.


La franja horaria es GMT +2. Ahora son las 09:14:55.

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