El truco al que te refieres utiliza el evento OnDrawColumnCell de un StringGrid. Tu te estas refiriendo a un TEdit que no tiene ese evento. En ese caso debes hacer un subclasing y capturar el mensaje WM_PAINT o escribir un componente derivado que pinte el texto a tu gusto. Ten en cuenta que lo que hay que hacer es pintar y eso hay que hacerlo cuando toca, es decir, cuando Windows va a pintar.
En cierta ocasión contesté una pregunta sobre cómo cambiar el texto cuando un EDIT está deshabilitado y puse un ejemplo de un nuevo componente derivado de TEdit aquí:
cambiar fuente de TEdit en modo ReadOnly
Transcribo el código por si te sirve para tomar ideas de lo que tú luego realmente pretendas hacer:
Código Delphi
[-]
unit NewEdit;
interface
uses
Windows, Messages, SysUtils, Classes, Controls, StdCtrls;
type
TNewEdit = class(TEdit)
private
DColor: COLORREF;
protected
procedure WndProc(var Message: TMessage); override;
public
procedure SetDisableColor(Color: COLORREF);
published
end;
procedure Register;
implementation
procedure TNewEdit.WndProc(var Message: TMessage);
var
ps: PAINTSTRUCT;
DC: HDC;
begin
if (Message.Msg = WM_PAINT) and (not IsWindowEnabled(Handle)) then
begin
DC:= BeginPaint(Handle, ps);
SetTextColor(DC, DColor);
SelectObject(DC, SendMessage(Handle, WM_GETFONT, 0, 0));
TextOutA(DC, 1,1, PChar(Text), Length(Text)+1);
EndPaint(Handle, ps);
end;
inherited WndProc(Message);
end;
procedure TNewEdit.SetDisableColor(Color: COLORREF);
begin
DColor:= Color;
Invalidate;
end;
procedure Register;
begin
RegisterComponents('Samples', [TNewEdit]);
end;
end.
La parte donde pinta el texto es esta:
Código Delphi
[-]
if (Message.Msg = WM_PAINT) and (not IsWindowEnabled(Handle)) then
begin
DC:= BeginPaint(Handle, ps);
SetTextColor(DC, DColor);
SelectObject(DC, SendMessage(Handle, WM_GETFONT, 0, 0));
TextOutA(DC, 1,1, PChar(Text), Length(Text)+1);
EndPaint(Handle, ps);
end;
Como verás, este código no usa la VCL sino que está escrito con API de Windows. La condición para activar el pintado es indiferente, pones la que te haga falta y puedes complicar esa parte hasta donde llegue tu imaginación.
La técnica del
Subclasing es buena idea si se va a hacer para casos aislados. En caso contrario es mejor escribir un componente.
Saludos.