[Lazarus-es] cambiar color de un edit

Jose Antonio Cuello jcuello en artextrading.com
Mar Ene 17 09:00:32 CET 2017


Hola, siento la tardanza pero me pilló algo liado. 

Te paso la manera en que realizo estas labores en un formulario base del cual luego heredo. Este formulario a demás de controlar el pintado de los controles realiza labores de validación y obligatoriedad pero creo que la clave la tendrás en como se crea y destruye el formulario. 

Espero pueda servirte. 
Un saludo 




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

wRequiredObjects := TRequiredObjects.Create; 

// change event OnActiveControlChange for control paint color of active control 
wOldOnActiveControlChange := Screen.OnActiveControlChange; 
Screen.OnActiveControlChange := @NewActiveControlChange; 

// change event OnHint for capture hint of active control 
wOldOnHint := Application.OnHint; 
Application.OnHint := @NewHint; 
end; 

destructor TBaseForm.Destroy; 
begin 
if assigned( wOldOnActiveControlChange ) then 
Screen.OnActiveControlChange := wOldOnActiveControlChange 
else 
Screen.OnActiveControlChange := nil; 

if assigned( wOldOnHint ) then 
Application.OnHint := wOldOnHint 
else 
Application.OnHint := nil; 

if assigned( wRequiredObjects ) then FreeAndNil( wRequiredObjects ); 

inherited Destroy; 
end; 


procedure TBaseForm.NewActiveControlChange(Sender: TObject); 
var vPropInfo: PPropInfo; 

function Sub_GetColor(Control: TControl): TColor; 
begin 
Result := 0; 
vPropInfo := GetPropInfo(Control.ClassInfo, 'Color'); 
if vPropInfo <> nil then 
Result := GetOrdProp(Control, vPropInfo); 
end; 

procedure Sub_SetColor(Control: TControl; Color: TColor); 
begin 
vPropInfo := GetPropInfo(Control.ClassInfo, 'Color'); 
if vPropInfo <> nil then 
SetOrdProp(Control, vPropInfo, Color); 
end; 

function Sub_ControlColor(Control: TControl): Boolean; 
begin 
Result := assigned(Control) and 
(Control.InheritsFrom(TCustomForm) = False) and 
(Control.InheritsFrom(TCustomGrid) = False) and 
(Control.InheritsFrom(TCustomPanel) = False) and 
(Control.InheritsFrom(TCustomTreeView) = False) and 
(Control.InheritsFrom(TCustomListBox) = False); 
end; 
begin 
// Restore old color to old control (focused control had changed) 
if Sub_ControlColor(wLastControlFocus) then 
Sub_SetColor(wLastControlFocus, wLastColorFocus); 

// assign new focused control 
wLastControlFocus := Screen.ActiveControl; 

// assign focused color to new focused control 
if Sub_ControlColor(wLastControlFocus) then 
begin 
wLastColorFocus := Sub_GetColor(wLastControlFocus); // save original color 
Sub_SetColor(wLastControlFocus, $00FEDCC7); // assign focused color to focused control 

if assigned( StatusBar ) and (StatusBar.Panels.Count > 0) then 
StatusBar.Panels[ stpanel_Hint ].Text := wLastControlFocus.Hint; // assign Hint to panel hint 
end; 
end; 



De: "hfiandor via Lazarus-es" <lazarus-es en lists.lazarus-ide.org> 
Para: lazarus-es en lists.lazarus-ide.org 
CC: "hfiandor" <hfiandor en ceniai.inf.cu> 
Enviados: Lunes, 16 de Enero 2017 0:37:46 
Asunto: [Lazarus-es] cambiar color de un edit 



Estimados listeros: 



Ante todo pido perdón por esta pregunta. 

Tengo en un form varios editbox, que les doy color cuando se activan. 

Necesito retornar la propiedad color a :=clWindow; cuando pincho con el ratón en otro editbox que no estaba con foco. 

No sé cómo poner todos los edit de la form a :=clWindow antes de darle color al recién pinchado. 

Anticipándole las gracias por su ayuda, 

Saludos 

Ing. Héctor F. Fiandor Rosario 



_______________________________________________ 
Lazarus-es mailing list 
Lazarus-es en lists.lazarus-ide.org 
http://lists.lazarus-ide.org/listinfo/lazarus-es 
------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://lists.lazarus-ide.org/pipermail/lazarus-es/attachments/20170117/e43235da/attachment.html>


Más información sobre la lista de distribución Lazarus-es