Delphi - Grafikai nyomógomb

forráskód letöltése
Ha egy olyan multimédiás alkalmazást szeretnénk készíteni, aminek felülete nagyban hasonlít egy WEB oldalhoz, akkor a Delphi-ben alapesetben található komponensekkel ezt nem nagyon tudjuk megoldani. Most egy olyan komponenst mutatunk be, amivel könnyedén készíthetünk olyan gombokat vagy kapcsolókat, melyek beleolvadhatnak a háttérbe, vagyis a felhasználói felület tetszés szerint kialakítható. A mellékelt példaprogram megnyitása előtt a GfxButton.pas-ban lévő komponenst telepítenie kell a Delphi alá.

A komponenshez különböző képeket rendelhetünk, melyek bizonyos esemény bekövetkezésekor jelennek meg. Külön kép tartozik a gomb normál állapotához, a lenyomott állapothoz, a kikapcsolt állapothoz, valamint külön kép jelenhet meg akkor, amikor az egér a komponens felett található.

A komponens megjelenítését most is a Paint metódus végzi, amely automatikusan végrehajtódik amikor szükséges.

Ha az Enabled property igaz, akkor megvizsgáljuk, hogy az FDown változó értéke igaz-e. Ez akkor igaz, ha a gomb lenyomott állapotban van. Ilyenkor a BitmapDown property-ben megadott képet jelenítjük meg. Ha ez nincs megadva, akkor a Bitmap property-ben megadott képet jelenítjük meg.
  if Enabled then begin
    if FDown or FMouseDown then begin
      if FBitmapDown.Empty then begin
        DrawBitmap(FBitmap);
      end else begin
        DrawBitmap(FBitmapDown);
      end;
Ha az FDown változó értéke hamis, akkor megvizsgáljuk, hogy az FMouseOver változó értéke igaz-e. Ez akkor igaz, ha az egér a komponens felett van. Ebben az esetben a BitmapOver property-ben beállított képet jelenítjük meg, illetve ha az nincs megadva, akkor a Bitmap property-ben beállított képet.
    end else begin
      if FMouseOver then begin
        if FBitmapOver.Empty then begin
          DrawBitmap(FBitmap)
        end else begin
          DrawBitmap(FBitmapOver);
        end;
Ha az FMouseOver változó értéke hamis, akkor a Bitmap property-ben megadott képet jelenítjük meg.
      end else begin
        DrawBitmap(FBitmap);
      end;
    end;
Ha az Enabled property értéke hamis, akkor a BitmapDisabled property-ben beállított képet fogjuk megjeleníteni, de ha ez nincs megadva, akkor itt is a Bitmap property-ben beállított kép jelenik meg.
  end else begin
    if FBitmapDisabled.Empty then begin
      DrawBitmap(FBitmap);
    end else begin
      DrawBitmap(FBitmapDisabled);
    end;
  end;
end;
A fenti forrást megnézve látható, hogy a képek megjelenítését a DrawBitmap eljárás végzi. Ez a komponens egy belső eljárása, ami a következőképpen néz ki:

Ha a paraméterként megkapott Bitmap üres, vagyis nincs kép megadva, akkor csak egy szaggatott vonallal megrajzolt keretet rajzolunk a komponens köré. Ezt is csak akkor, amikor szerkesztési időben vagyunk, tehát futtatás közben ez nem látszik. Ha a fenti kódot jól megnézzük, akkor látható, hogy szerkesztési időben is csak akkor fordulhat ez elő, ha a Bitmap property-ben nem adtunk meg képet.