![]() |
![]() |
| Paypal | FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
|||||||
| Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Buscar | Temas de Hoy | Marcar Foros Como Leídos |
![]() |
|
|
Herramientas | Buscar en Tema | Desplegado |
|
|
|
#1
|
|||
|
|||
|
¿en delphi 8 existe la unidad controls?
Si es asi, entra dentro de ella y busca por CM y luego mira que hay. En delphi 7 todos estos procedimientos estan en esta unidad y veras que empiezan por CM. LA verdad que no se más que dicerte.Aunque creo que con lo de platfrom .NET, deben haber hecho cambios en la VCL, y no se. Saludos
__________________
La victoria tiene cien padres. La derrota es huérfana (Napoleón). |
|
#2
|
|||
|
|||
|
Porque una cosa.
¿No te compila, o no te entra dentro del ,código?
__________________
La victoria tiene cien padres. La derrota es huérfana (Napoleón). |
|
#3
|
|||
|
|||
|
Me compila perfectamente, a la hora de ejecucion no entra en el manejador.
He seguido investigando y en la unidad donde se definen los mensajes el CM_FocusChanged esta comentado. No lo usa Delphi 8. He visto otra posible salida que es el siguiente: la variable screen tiene una propiedad: property OnActiveControlCahnge : TNotifyEvent; Creo que solo haria falta un manejador para ese evento, pero no he sido capaz de hacerlo... todavia. Gracias por tu colaboracion.
__________________
J. Adolfo Núñez |
|
#4
|
|||
|
|||
|
Eme funciona en mi delphi 7.Ponle algunos edits y pon esto en una unidad nueva.
Pon almenos 2 edits, porque pongo un numero en edit2.caption, sino pues cambialo. No acepta showmessage dentro del procedure ,me da error por todas partes.Supongo porque cambia el foco infinitas veces al aparecer un showmessage cambia el foco y llama otra vez al evento y asi y hace un bucle infinito. Código:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
TForm1 = class(TForm)
procedure FormCreate(Sender: TObject);
procedure FormDestroy(Sender: TObject);
private
{ Private declarations }
public
procedure ActiveControlChanged(Sender: TObject);
{ Public declarations }
end;
var
Form1: TForm1;
i:integer;
implementation
{$R *.dfm}
procedure TForm1.ActiveControlChanged(Sender: TObject);
begin
i := i+1;
edit2.Text := inttostr(i);
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
Screen.OnActiveControlChange := ActiveControlChanged;
end;
procedure TForm1.FormDestroy(Sender: TObject);
begin
Screen.OnActiveControlChange := nil;
end;
end.
__________________
La victoria tiene cien padres. La derrota es huérfana (Napoleón). |
|
#5
|
|||
|
|||
|
¡¡¡¡¡ EXACTO !!!!!
Anoche en casa hice lo mismo y.... tachan ¡¡¡ VICTORIA !!! El código de la unidad para que los TWinControl cambien de color y recuperen el original cuando deje el foco es el siguiente: Código:
procedure TFormPadre.ActiveControlChanged(sender : TObject);
var
I : Integer;
begin
for I:= 0 to ControlCount -1 do begin
if Controls[i] is TWinControl then begin
if (Controls[i] as TWinControl).Focused then
Controls[i].Color := FCActivo
else
Controls[i].Color := clWindow;
end;
end;
end;
Un saludo y muchisimas gracias por tu inestimable ayuda.
__________________
J. Adolfo Núñez |
|
#6
|
|||
|
|||
|
PD:
FCActivo es una propiedad (TColor) privada que declaro en el Form para el tema de configuracion posterior del usuario.
__________________
J. Adolfo Núñez |
![]() |
| Herramientas | Buscar en Tema |
| Desplegado | |
|
|
|