Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   OOP (https://www.clubdelphi.com/foros/forumdisplay.php?f=5)
-   -   Cambiar el color de la fuente en campos deshabilitados (https://www.clubdelphi.com/foros/showthread.php?t=35806)

sur-se 21-09-2006 11:31:05

Cambiar el color de la fuente en campos deshabilitados
 
Hola.
Cuando deshabilito un campo edit, este adopta un color de fuente gris y me gustaría poder controlarlo para que dejarlo en negro u otro color.
Tengo un componente hecho heredado de él, y me gustaría poder configurar el campo cuando queda deshabilitado.

Un saludo.

Neftali [Germán.Estévez] 21-09-2006 11:46:25

TEdit deriva de TControl y TControl tiene el procedimiento SetEnabled de acceso a la propiedad Enabled como virtual, por lo tanto deberías poder sobreescribirlo.

Prueba a sobreescribir este procedimiento (override) en tu componente y cambiar el color de la fuente después de llamar al inherited.

¿Me expliqué bien?

sur-se 21-09-2006 12:25:11

No funciona eso. Es lo primero que hice, pero no va. Parece que al pintar el componente tiene fijado ese color de fuente.
¿La alternativa parece que pasará por pintar yo el texto dentro del campo y con el color del font correcto?

Un saludo.

Neftali [Germán.Estévez] 21-09-2006 13:18:31

Cita:

Empezado por sur-se
¿La alternativa parece que pasará por pintar yo el texto dentro del campo y con el color del font correcto?

Parece el siguiente paso (a mi así de pronto no seme ocurre otro); Puedes probar con alguno de estos:

Código Delphi [-]
procedure WMPaint(var Message: TWMPaint); message WM_PAINT;
procedure WMNCPaint(var Message: TMessage); message WM_NCPAINT;

Ambos en TWinControl.

sur-se 21-09-2006 19:24:22

Bueno, pues al final lo he hecho de la forma siguiente:

Código:


type
  TMiEdit = class(TEdit)
...

procedure WMPAINT(var Msg : TMessage); message WM_PAINT;

....

procedure TMiEdit.WMPAINT(var Msg: TMessage);
begin
    inherited;
    if not enabled then Pintar_Texto;
end;

procedure TMiEdit.Pintar_Texto;
var
    DC : HDC;
    Canvas: TCanvas;
    ps: TPaintStruct;
    CallEndPaint: Boolean;
    R:TRect;
begin
    DC := GetWindowDC(Self.Handle);
    R:=ClientRect;
    CallEndPaint := False;
    Canvas:=TCanvas.Create;
    try
      if DC <> 0 then
      begin
        Canvas.Handle := DC;
        ps.fErase := true;
      end
      else
      begin
        BeginPaint(Handle, ps);
        CallEndPaint:= True;
        Canvas.handle := ps.hdc;
      end;
      if ps.fErase then Perform(WM_ERASEBKGND, Canvas.Handle, 0);
      SaveDC(canvas.handle);
      try
        Canvas.Brush.Style := bsClear;
        Canvas.Font := Font;
        Canvas.Font.Color := clBlack;
        Canvas.TextRect(R,3,3,text);
      finally
        RestoreDC(Canvas.Handle, - 1);
      end;
    finally
      if CallEndPaint then
        EndPaint(handle, ps);
      Canvas.Free;
      ReleaseDC(Self.handle,DC);
    end;
end;

Así va bien.
Salu2.


La franja horaria es GMT +2. Ahora son las 11:40:01.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi