2010-12-02 16 views

Respuesta

13

Esto es muy posible, de hecho. En su formulario, definir

private 
    { Private declarations } 
    FBitmap: TBitmap; 
    FBrush: HBRUSH; 
protected 
    procedure WndProc(var Message: TMessage); override;  

y hacer

procedure TForm1.FormCreate(Sender: TObject); 
begin 
    FBitmap := TBitmap.Create; 
    FBitmap.LoadFromFile('C:\Users\Andreas Rejbrand\Pictures\AS20Utv.bmp'); 
    FBrush := 0; 
    FBrush := CreatePatternBrush(FBitmap.Handle); 
end; 

y

procedure TForm1.WndProc(var Message: TMessage); 
begin 
    inherited; 
    case Message.Msg of 
    WM_CTLCOLOREDIT, WM_CTLCOLORSTATIC: 
     if (Message.LParam = Edit1.Handle) and (FBrush <> 0) then 
     begin 
     SetBkMode(Message.WParam, TRANSPARENT); 
     Message.Result := FBrush; 
     end; 
    end; 
end; 

Por supuesto que se puede envolver esto en un componente de su propia, por ejemplo TEditEx. Si tengo tiempo, podría hacer esto. (Y, observe que no hay necesidad de comprar un costoso (y tal vez no tan alta calidad) paquete de componentes de una empresa de terceros.)

Custom edit background http://privat.rejbrand.se/editbkg.png

+0

¿Por qué este downvoted? –

+2

¿Por qué WM_CTLCOLOREDIT? No se llamará cuando el control esté desactivado. ¿Por qué no WM_ERASEBACKGROUND y WM_PRINTCLIENT? –

+0

+1 porque alguien ha votado por un código de trabajo! funciona – VibeeshanRC

Cuestiones relacionadas