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.