unit uImageButton;
interface
uses Windows, Classes, Messages;
type
TSkinImageButton =
class
private
FHImageButton : HWND;
Img : Cardinal;
Style : DWORD;
btW : Integer;
btH : Integer;
function GetHandle: Integer;
public
property ButtonHandle: Integer
read GetHandle;
constructor Create(hOwner : HWND; FullPathImageName: PAnsiChar;
x ,y, ButID, StateMax: Integer);
destructor Destroy;
override;
end;
implementation
uses uSkin;
// Erstelle einen image button
constructor TSkinImageButton.Create;
begin
with SkinEngine
do
begin
if RegisterButton(SKBUTIMAGE)
then
begin
// Erstelle das GDIPLUS image vom Dateinamen
Img := AddResource((FullPathImageName));
if Img <> 0
then
begin
GetImageSize(Img, imgW, imgH);
// Wird kein StateMax angegeben sind die Bilder im Bild 5 Frames
// ansonsten werden sie durch die übergebene anzahl geteilt
if StateMax < 1
then
StateMax := 5;
btW := integer(imgW)
div StateMax;
btH := imgH;
Style := WS_CHILD
or WS_VISIBLE
or WS_TABSTOP
or BS_PUSHBUTTON;
if ButID = ID_LED
then
Style := Style
or WS_DISABLED;
// das Window für die Button's erstellen
FHImageButton := CreateWindowEx(WS_EX_TRANSPARENT, SKBUTIMAGE, '
',
Style, x, y, btW, btH, hOwner, ButID, sInstance,
nil);
if FHImageButton <> 0
then
begin
// Speichere das Img handle als property
SetImageProperty(FHImageButton, PROP_IMAGE, integer(Img));
SetImageProperty(FHImageButton, PROP_STYLE, BS_BITMAP);
SetImageProperty(FHImageButton, PROP_STATEMAX, StateMax);
end else
begin
// Lösche das Image
DeleteResource(Img);
end;
end;
end;
end;
end;
destructor TSkinImageButton.Destroy;
begin
// tue nix
// das löschen aller resourcen wird an anderer stelle ausgeführt
// Sample:
{SkinEngine.RemoveAllImageResource;
SkinEngine.DestroyWindowResource(WinHandle);}
inherited Destroy;
end;
function TSkinImageButton.GetHandle: Integer;
begin
Result := FHImageButton;
end;
end.