Delphi - ProgressBar képpel

forráskód letöltése
Készítünk egy ProgressBar komponenst, amely egy megadott színű csík helyett egy tetszőleges képet jelenít meg. Számos játékprogramban találkozhatunk ilyen ProgressBar-ral. Kétségtelen, hogy sokkal látványosabbá tehetjük programjainkat, ha a szabályos ProgressBar helyett képeket használunk.
A mellékelt példaprogram megnyitása előtt a ProgressImage.pas-ban lévő komponenst telepítenie kell a Delphi alá. Ehhez válassza a Component - Install Component menüpontot.
A komponens a hagyományos ProgressBar-hoz hasonló módon működik. A Min és a Max property-k segítségével állíthatjuk be a megjelenítendő minimum és maximum értékeket. Az aktuális pozíciót a Position értéke jelzi.
A megjelenítendő képet a Picture tulajdonságban adhatjuk meg.
A Step property-ben megadhatunk egy lépés értéket. Amikor a StepIt metódust meghívjuk, akkor a Position értéke a Step-ben megadott értékkel növekszik.
A komponenst a TCustomControl osztályból származtatjuk. A ProgressBar mindenkori, aktuális állapotának megrajzolásához felül kell írnunk a Paint metódust.
A Picture property-ben megadott képet nyújtva rajzoljuk ki, a komponens területére. A kép nyújtásához egy TBitmap típusú segédváltozót használunk. A megadott képet a Canvas osztály StretchDraw metódusával rajzolhatjuk rá a Bitmap-re, nyújtott formában.
with Bitmap do begin
...
Canvas.StretchDraw(Rect(0,0,Width,Height),FPicture.Graphic);
A Bitmap-ben megrajzolt, nyújtott képnek csak egy részletét kell megjelenítenünk. Ezt a részletet a Position értéke határozza meg.
Az IStep és az IPos változók segítségével kiszámoljuk, hogy a Position aktuális értéke hány képpontot takar.
IStep:=(Width-2)/(FMax-FMin);
IPos:=Round(IStep*(FPosition-FMin));
A képrészlet megjelenítéséhez a StretchBlt függvényt használjuk.
StretchBlt(Canvas.Handle,1,1,IPos,Height-1,Bitmap.Canvas.Handle,0,0,IPos,Height-1,SRCCOPY);