Re: Komponente erstellen: Left und Top festlegen?
Zitat:
Jetzt weiß ich aber nicht, was du mit dem Rest gemeint hast. Muss ich die Properties Top und Left überschreiben? |
Re: Komponente erstellen: Left und Top festlegen?
Das Problem ist in der Komponente zu unterscheiden ob die Position gerade gesetzt wurde nach dem die Komponente aufs form gezogen wurde oder die Position gesetzt wurde nachdem das Projekt geladen wurde. Denn wenn du über Datei->öffnen das Projekt lädst soll die Komponente dort erscheinen wo sie beim speichern lag und nicht bei 0, 0
Left und Top überschreibt man in dem man "SetBounds" überschreibt. Wenn du Left oder Top änderst wird nämlich SetBounds aufgerufen Anstelle von
Delphi-Quellcode:
sollte man also lieber
img.Left := 0; //intern: img.setbounds(0, img.top, img.width, img.height);
img.Top := 0; //intern: img.setbounds(img.left, 0, img.width, img.height);
Delphi-Quellcode:
aufrufen weil dabei SetBounds nur einmal aufgerufen wird
img.SetBounds(0, 0, img.width, img.height);
|
Re: Komponente erstellen: Left und Top festlegen?
So, hab jetzt mal mit meiner Komponente weiter gemacht.
Hab mal Rudy's Code genommen - und es funzt :thumb: Damit wäre das Problem dann gelöst :-D Danke nochmal, für eure Hilfe! |
Re: Komponente erstellen: Left und Top festlegen?
Hmm...
Hab jetzt mal ein bisschen mit dem Code rumprobiert, und irgendwie gibt es jetzt beim Beenden immer eine Exception:
Delphi-Quellcode:
Dieser Code funktioniert, hier gibt es keine Exception:
procedure TMyCompo.SetParent(AParent: TWinControl);
begin inherited; SetBounds(AParent.ClientWidth - Width, 0, Width, Height); // oben rechts end;
Delphi-Quellcode:
Wie kann ich es aber erreichen, dass meine Komponente oben rechts plaziert wird, ohne dass es beim Beenden zu einer Exception kommt???
procedure TMyCompo.SetParent(AParent: TWinControl);
begin inherited; SetBounds(0, 0, Width, Height); // oben links end; |
Re: Komponente erstellen: Left und Top festlegen?
Prüfe ab, ob AParent Nil ist.
Delphi-Quellcode:
procedure TMyCompo.SetParent(AParent: TWinControl);
begin inherited; If Assigned(AParent) Then SetBounds(AParent.ClientWidth - Width, 0, Width, Height); // oben rechts end; |
Re: Komponente erstellen: Left und Top festlegen?
Danke, jetzt funktioniert's :thumb:
Ich verstehe nur nicht, warum es zur Exception beim Beenden kam: Wann wird denn SetParent aufgerufen? Eigentlich doch nur beim Createn - aber beim Beenden (also Freigeben) :?: |
Re: Komponente erstellen: Left und Top festlegen?
beim beenden wird der eventuell auf ni gesetzt damit sich beim Parent aus der Liste ausgetragen wird.
Und der Parent wird natürlich auch gesetzt wenn man die Komponente auf ein andere Panel verschiebt. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 06:27 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