Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

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

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 12-10-2019
juniorSoft juniorSoft is offline
Miembro
 
Registrado: abr 2005
Posts: 178
Poder: 20
juniorSoft Va por buen camino
Recuperar el ActiveControl en Form Embebido en PageControl

Hola Amigos,

Tengo el siguiente código que con ayuda de nuestro amigo ecfisa realizamos para cambiar el color del control activo cuando tenga el foco

Código Delphi [-]
type
  TForm1 = class(TForm)
    ...
    procedure FormCreate(Sender: TObject);
    procedure FormDestroy(Sender: TObject);
  private
    procedure ActiveCtrlChange(Sender: TObject);
  ...
  end;

...
implementation

uses TypInfo;

const
  FOCUSEDCOLOR   = clMoneyGreen;
  UNFOCUSEDCOLOR = clWindow;

var
  PrevFocusedCtrl: TWinControl = nil;

procedure TForm1.FormCreate(Sender: TObject);
begin
  Screen.OnActiveControlChange:= ActiveCtrlChange;
end;

procedure TForm1.ActiveCtrlChange(Sender: TObject);
begin
  if not Assigned(PrevFocusedCtrl) then
    PrevFocusedCtrl:= ActiveControl;

  if Assigned(GetPropInfo(PrevFocusedCtrl.ClassInfo, 'Color')) then
  begin
    // SetOrdProp(PrevFocusedCtrl, 'Color', UNFOCUSEDCOLOR);
    if PrevFocusedCtrl.StyleElements = [seBorder] then
           PrevFocusedCtrl.StyleElements:=[seFont, seClient, seBorder];
 end;
  if Assigned(GetPropInfo(ActiveControl.ClassInfo, 'Color')) then
  begin
    SetOrdProp(ActiveControl,'Color', FOCUSEDCOLOR);
    Activecontrol.StyleElements:=[seBorder];
    PrevFocusedCtrl:= ActiveControl;
     
  end;
end;

procedure TForm1.FormDestroy(Sender: TObject);
begin
  Screen.OnActiveControlChange:= nil;
end;

El cual realizamos en este hilo Cambiar color de los controles de edicion al entrar en ellos utilizando VCL Styles

El inconveniente surge cuando el formulario esta embebido en un TabSheet del PageControl y el ActiveControl no tiene componente asignado o dicho de otra manera es nil aunque en el Formulario Embebido si se encuentre un control seleccionado. si sustituyo activeControl por Screen.activeControl entonces funciona pero luego de abrir cualquier formulario de búsqueda modal vuelve y se pierde.

Me gustaría encontrar la forma de que se pueda recuperar el activeControl y estoy casi seguro que hacerlo conlleva utilizar las funciones del api de windows pero no tengo mucha experiencia con este tema.

Agradecido enormemente de este Foro.

Saludos,
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
ShortCut de acciones en Form Heredado embebido en tab pageControl juniorSoft OOP 0 28-08-2019 23:07:52
Manipular PageControl en Form heredado scigliano Varios 3 03-12-2015 19:09:32
Recuperar datos de un form joseprad OOP 2 10-07-2013 20:29:28
Como puedo abrir un form en un PageControl marcoev OOP 7 05-09-2008 18:41:38
recuperar el select enviado en el form elcigarra HTML, Javascript y otros 4 27-08-2006 14:19:14


La franja horaria es GMT +2. Ahora son las 14:43:52.


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