2010-12-02 43 views

Répondre

13

C'est très possible, en effet. Dans votre formulaire, définissez

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

et faire

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; 

et

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; 

Bien sûr, vous pouvez envelopper ceci dans un composant de votre propre, dire TEditEx. Si je prends du temps, je pourrais le faire. (Et, notez qu'il n'y a pas besoin d'acheter un coûteux (et peut-être pas ce pack de composants de haute qualité) d'une société tierce.)

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

+0

Pourquoi ce downvoted? –

+2

Pourquoi WM_CTLCOLOREDIT? Il ne sera pas appelé lorsque le contrôle est désactivé. Pourquoi ne pas WM_ERASEBACKGROUND et WM_PRINTCLIENT? –

+0

+1 parce que quelqu'un a voté pour un code de travail! cela fonctionne – VibeeshanRC