AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

ImageList im Constructor erzeugen

Ein Thema von phlux · begonnen am 19. Okt 2003 · letzter Beitrag vom 21. Okt 2003
Antwort Antwort
Benutzerbild von phlux
phlux

Registriert seit: 4. Nov 2002
Ort: Witten
1.335 Beiträge
 
Delphi 6 Personal
 
#1

ImageList im Constructor erzeugen

  Alt 19. Okt 2003, 20:38
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:
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;
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??

mfg phlux
Christian "phlux" Arndt
  Mit Zitat antworten Zitat
Benutzerbild von Leuselator
Leuselator

Registriert seit: 18. Mär 2003
Ort: Berlin
589 Beiträge
 
Delphi 8 Architect
 
#2

Re: ImageList im Constructor erzeugen

  Alt 20. Okt 2003, 01:20
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;
Tim Leuschner
  Mit Zitat antworten Zitat
Benutzerbild von phlux
phlux

Registriert seit: 4. Nov 2002
Ort: Witten
1.335 Beiträge
 
Delphi 6 Personal
 
#3

Re: ImageList im Constructor erzeugen

  Alt 20. Okt 2003, 11:22
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:
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;
mfg phlux
Christian "phlux" Arndt
  Mit Zitat antworten Zitat
Christian Seehase
(Co-Admin)

Registriert seit: 29. Mai 2002
Ort: Hamburg
11.116 Beiträge
 
Delphi 11 Alexandria
 
#4

Re: ImageList im Constructor erzeugen

  Alt 20. Okt 2003, 18:43
Moin Phlux,

guckst Du hier:

Nummerierung von Komponenten

mit besonderem Augenmerk auf CreateWnd.
Damit dürfte sich dann auch Dein ursprüngliches Problem erledigen.
Tschüss Chris
Die drei Feinde des Programmierers: Sonne, Frischluft und dieses unerträgliche Gebrüll der Vögel.
Der Klügere gibt solange nach bis er der Dumme ist
  Mit Zitat antworten Zitat
Kamil

Registriert seit: 17. Aug 2002
178 Beiträge
 
#5

Re: ImageList im Constructor erzeugen

  Alt 20. Okt 2003, 19:29
Bin mir jetzt nicht 100%ig sicher aber versuchs mal mit
Code:
fImageList := TImageList.Create(nil);
Falls du TImageList.Create(self); nimms, dann musst du die Komponente nicht freigeben. Das geschieht dann automatisch.

Müsste es nicht so aussehen:
Code:
  for i := 0 to ButtonCount - 1 do
  begin
    Self.Buttons[i].Free;
  end;
  Mit Zitat antworten Zitat
Benutzerbild von phlux
phlux

Registriert seit: 4. Nov 2002
Ort: Witten
1.335 Beiträge
 
Delphi 6 Personal
 
#6

Re: ImageList im Constructor erzeugen

  Alt 20. Okt 2003, 19:39
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.
Christian "phlux" Arndt
  Mit Zitat antworten Zitat
Benutzerbild von Leuselator
Leuselator

Registriert seit: 18. Mär 2003
Ort: Berlin
589 Beiträge
 
Delphi 8 Architect
 
#7

Re: ImageList im Constructor erzeugen

  Alt 20. Okt 2003, 23:46
@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?
Tim Leuschner
  Mit Zitat antworten Zitat
Christian Seehase
(Co-Admin)

Registriert seit: 29. Mai 2002
Ort: Hamburg
11.116 Beiträge
 
Delphi 11 Alexandria
 
#8

Re: ImageList im Constructor erzeugen

  Alt 21. Okt 2003, 01:51
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.
Tschüss Chris
Die drei Feinde des Programmierers: Sonne, Frischluft und dieses unerträgliche Gebrüll der Vögel.
Der Klügere gibt solange nach bis er der Dumme ist
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 14:41 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz