![]() |
ImageList im Constructor erzeugen
Moinsen!
Ich schreibe im Moment eine Kompo abgeleitet von der TToolbar. Jetzt möchte ich im Constructor eine ImageList erzeugen, und zwar mit folgendem Code:
Delphi-Quellcode:
Nur krieg ich jetzt als Fehler Element '' hat kein übergeordnetes Fenster. Ich weiß schon das es am Erzeugen der ImageList liegt, weil wohl noch nicht die Toolbar erstellt ist. Wenn ich jetzt allerdings das ganze in die Loaded Prozedur schreibe, wird der Code zur DesignTime nicht aufgerufen und zur Laufzeit kommt nur BS raus, sprich es läuft nicht so wie es sollte :? . Hat jemand ein Plan wie ich es zum Laufen krieg??
constructor TDriveToolBar.Create(AOwner: TComponent);
begin inherited Create(AOwner); Flat := True; Height := 26; Width := 185; Align := alNone; ShowCaptions := True; EdgeBorders := [ebTop, ebBottom, ebLeft, ebRight]; fImageList := TImageList.Create(Self); Images := fImageList; EnumDrives; end; mfg phlux :hi: |
Re: ImageList im Constructor erzeugen
probier mal:
Delphi-Quellcode:
constructor TDriveToolBar.Create(AOwner: TComponent);
begin inherited Create(AOwner); if (AOwner is TWincontrol) then Parent := TWincontrol(AOwner); Flat := True; Height := 26; Width := 185; Align := alNone; ShowCaptions := True; EdgeBorders := [ebTop, ebBottom, ebLeft, ebRight]; fImageList := TImageList.Create(Self); Images := fImageList; EnumDrives; end; |
Re: ImageList im Constructor erzeugen
Hi Leuselator!
Danke für den Tipp, jetzt klappt das erstellen, mein einziges Problem ist a) beim Start der Anwendung mit der Kompo gibts jetzt ne Exception TToolButton nicht gefunden. Wichtiger jedoch und auch das Problem hier betreffend, beim Beenden gibts folgende Exception: b) Element 'DriveToolBar1' hat kein übergeordnetes Fenster! Was kann ich dagegen tun? Mein Destructor sieht wie folgt aus:
Delphi-Quellcode:
mfg phlux :hi:
destructor TDriveToolBar.Destroy;
var i: Integer; begin fImageList.Free; //Gibt die erstellten TToolButtons frei for i := 0 to ButtonCount - 1 do begin Self.Buttons[0].Free; end; inherited Destroy; end; |
Re: ImageList im Constructor erzeugen
Moin Phlux,
guckst Du hier: ![]() mit besonderem Augenmerk auf CreateWnd. Damit dürfte sich dann auch Dein ursprüngliches Problem erledigen. |
Re: ImageList im Constructor erzeugen
Bin mir jetzt nicht 100%ig sicher aber versuchs mal mit
Code:
Falls du TImageList.Create(self); nimms, dann musst du die Komponente nicht freigeben. Das geschieht dann automatisch.
fImageList := TImageList.Create(nil);
Müsste es nicht so aussehen:
Code:
for i := 0 to ButtonCount - 1 do
begin Self.Buttons[i].Free; end; |
Re: ImageList im Constructor erzeugen
Hi Kamil!
Werde deinen Vorschlag gleich mal ausprobieren, die Buttons werden schon richtig so freigegeben. Ich kanns schlecht erklären, also wenn du dir die Buttons alle übereinander vorstellst und den untersten wegnimmst rutschen die oberen nach, nach deiner methode würde ich dann irgendwann eine Exception kriegen weil weiter oben keine Buttons mehr sind. Edit: Nein so funktioniert es auch nicht. |
Re: ImageList im Constructor erzeugen
@Christian: ich verstehe nicht ganz, wieso die in dem von Dir verlinkten Thread genannte CreateWnd das Problem beheben soll. Allerdings würde ich das gern verstehen, da ich mit einigen meiner Komponenten auch die Fehlermeldung des nicht vorhandenen übergeordneten Fensters bekomme:-) Also: was ist der Hintergrund?
|
Re: ImageList im Constructor erzeugen
Moin Leuselator,
der Hintergrund ist folgender: Während Create abgearbeitet wird, existiert das übergeordnete Fenster, die Instanz der Klasse, noch nicht vollständig, bei CreateWnd hingegen schon, so dass man hier den Parent zuweisen kann. Dies sollte man aber auch nur einmal tun, da CreateWnd öfter aufgerufen wird. Nimmt man natürlich den Owner so funktioniert das zwar auch, wenn der Typ stimmt, aber man darf dabei nicht vergessen, dass eine visuelle Komponente immer relativ zum Parent angezeigt wird. Der Owner könnte auch nil sein. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 07:48 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