![]() |
Re: Code strukturieren! Wie macht man es richtig ..
Zitat:
Zitat:
|
Re: Code strukturieren! Wie macht man es richtig ..
So wie von turboPASCAL vorgeschlagen habe ich es versucht.
Kann aber sein das ich zu blöd bin aber auf jedenfall kann ich mir über den constructor das handle nicht zurückgeben. gruss Emil |
Re: Code strukturieren! Wie macht man es richtig ..
Zitat:
1. Wozu brauchst du das Handle? Dies liegt in der Klasse als Member vor und dort können alle Methoden der Klasse drauf zugreifen. 2. Selbst wenn du das Handle brauchen solltest, kannst du es immernoch über eine z.b. Nur-Lesen Property veröffentlichen. Also: wozu brauchst du das Handle? |
Re: Code strukturieren! Wie macht man es richtig ..
Zitat:
Hmm dürfte aber nicht so schwer sein das handle innerhalb der Klasse zu speicher ähnlich wie bei TImage.canvas.handle da wirds nicht anders gemacht. Über CheckBox1 kann ich dann darauf zugreifen. Dann werd ich das so machen denke ist am sinnvollsten. gruss Emil |
Re: Code strukturieren! Wie macht man es richtig ..
Zitat:
|
Re: Code strukturieren! Wie macht man es richtig ..
Zitat:
Entweder über ne property oder einfach nach public verschieben gruss EMil |
Re: Code strukturieren! Wie macht man es richtig ..
Zitat:
|
Re: Code strukturieren! Wie macht man es richtig ..
Nochmal zur vervollständigung
Meine Klasse
Delphi-Quellcode:
Die wird als uses in uSkin eingebunden
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. uses uImageButton; Die Controls sollen nur aus dieser Klasse heraus verwaltet werden. Was ich damit meine ist ich will sie nicht nochmal zusätztlich in der MainUnit mit einbinden wie muss ich die Klasse dann in uSkin einbinden damit ich nur über die Engine auf das Control zugreifen kann. Zur zeit läuft es so
Delphi-Quellcode:
geht aber nur wenn ich, wie schon gesagt die uImageButton in uMainApp mit einbinde.
BugButton: TSkinImageButton;
PlayButton: TSkinImageButton; LeftButton: TSkinImageButton; RightButton: TSkinImageButton; HelpButton : TSkinImageButton; gruss Emil |
Re: Code strukturieren! Wie macht man es richtig ..
Das GetHandle() kannst du dir sparen, da diese Funktion nichts macht als den Member zurück zu geben. Einfach bei der Property nach dem Read direkt FHImageButton angeben.
Zitat:
Aber wenn du in uMainApp auf Eigenschaften der uImageButton zugreifen willst oder anderes mit denen machen willst (z.B. auch einen TypeCast), dann brauchst du auch die uSkinButton in der uMainApp. Die Uses Anweisungen werden nicht über die Units "vererbt". D.h. wenn uMainApp die uSkin einbindet und diese wiederrum uImageButon, dann kenn uMainApp nicht automatisch uImageButton - ganz im Gegenteil, diese muss dort nochmals explizit eingebunden werden. |
Re: Code strukturieren! Wie macht man es richtig ..
habs geändert... Danke
Delphi-Quellcode:
und GetHandle rausgeworfen.
property ButtonHandle: HWND read FHImageButton;
gruss Emil |
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:04 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz