Delphi - Kép megjelenítése a TPanel hátterén

forráskód letöltése
Készítünk egy komponenst, amely segítségével egy TPanel hátterén tetszőleges képet helyezhetünk el. A komponens segít abban, hogy alkalmazásainkat látványosabbá tegyük.
A mellékelt példaprogram megnyitása előtt a PanelImage.pas-ban lévő komponenst telepítenie kell a Delphi alá. Ehhez válassza a Component - Install Component menüpontot.
A PanelImage komponenst csak el kell helyeznünk a Form-on, Picture property-jében megadhatunk egy képet.
A komponenst Panel property-jén keresztül rendelhetjük hozzá egy TPanel típusú objektumhoz.
A komponens a háttérben létrehoz egy TImage objektumot a panelen, melynek mérete teljesen lefedi a panel méretét. A megjelenő kép nyújtott formában kerül megjelenítésre, a panel széleihez igazodva
A panelt célszerű azután hozzárendelni a komponenshez, miután a panel már a helyén van.
Komponensünket a TComponent osztályból származtatjuk.
A megadott képet a Picture property-ben tároljuk el, amely TPicture típusú. A property értékét tároló TPicture objektum létrehozásáról és megszüntetéséről nekünk kell gondoskodnunk a komponens Create és Destroy metódusaiban.
Ha a komponenshez hozzárendelünk egy panelt, akkor a Setpanel metódusban létrehozunk egy TImage objektumot, amelyet elhelyezünk a panelen úgy, hogy a SendToBack metódus meghívásával a panelen található, eddigi objektumok mögé küldjük.
procedure TPanelImage.Setpanel(const Value: TPanel);
...
  if FPanel<>Nil then begin
    FImage:=TImage.Create(Nil);
    with FImage do begin
      Parent:=Value;
Ahhoz hogy a TImage-ben megjelenő kép nyújtott legyen, a Stretch property értékét igazra kell állítanunk.
Ha a komponensünkhöz rendelt panel eltávolításra kerül, akkor a Delphi hibaüzenetet ad. Ennek elkerülése érdekében le kell kezelnünk ezt a problémát. A megoldás kulcsa, hogy felülírjuk a Notification metódust.
procedure TPanelImage.Notification(AComponent: TComponent;
  Operation: TOperation);
begin
  inherited;
  if (AComponent=FPanel) and (Operation=opRemove) then
    FPanel:=Nil;
end;