Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Neuen Beitrag zur Code-Library hinzufügen (https://www.delphipraxis.net/33-neuen-beitrag-zur-code-library-hinzufuegen/)
-   -   Erzeugte Objekte während der Laufzeit per Button verschieben (https://www.delphipraxis.net/209871-erzeugte-objekte-waehrend-der-laufzeit-per-button-verschieben.html)

Nine9 2. Feb 2022 16:40

Erzeugte Objekte während der Laufzeit per Button verschieben
 
Guten Tag liebe Community,

ich bedanke mich das Ihr mir schon so oft geholfen habt.
Nun habe ich ein neues Problem wie es der Titel schon verrät .

Ich erzeuge in der Prozedur Activate einige Labels und möchte diese während das Programm läuft über einen Button ansprechen und dessen top wert verändern.

Leider lassen sie sich aber nicht in einer anderen Prozedur ansprechen und deren Top wert verändern.

Grüße

stahli 2. Feb 2022 18:04

AW: Erzeugte Objekte während der Laufzeit per Button verschieben
 
Grundsätzlich sollte das gehen.

Delphi-Quellcode:
Button1.Top := Button1.Top + 10;
Sollte eigentlich den Button1 versetzen.
Du darfst den natürlich nicht mit Align oder Anchor irgendwie ausgerichtet haben und das Programm muss Zeit haben, die Aufgabe zu erledigen (also nicht gerade eine ellenlange Berechnung ausführen oder so).

Erstell Dir vielleicht mal ein kleines Testprojekt und versuche, die Funktion nochmal nachzustellen.
Evtl. klemmt es irgendwo anders...

Helfen kann auch ein Breakpoint in der Zeile der Positionszuweisung, ob diese überhaupt ausgeführt wird.

Gausi 2. Feb 2022 18:15

AW: Erzeugte Objekte während der Laufzeit per Button verschieben
 
Ich rate einfach mal ins Blaue hinein, dass zur Erzeugung der Labels im OnActivate lokale Variablen benutzt wurden. D.h. nach dem Verlassen dieser Methode hat man keine direkten Referenzen mehr auf diese Label.

Lösung wäre daher, die Label in einer Liste (oder, wenn es nur wenige sind, in einzelnen Variablen) zu speichern, als Eigenschaft der Formklasse. Diese Liste müsste dann im OnCreate der Form erstellt werden, und im OnDestroy wieder gelöscht werden, z.B.
Delphi-Quellcode:
type
  TLabelList = class(TObjectList<Label>);

MyLabelList := TLabelList.Create(False); // False: Die Objekte beim Freigeben nicht durch die Liste zerstören, das macht am Ende ja die Form.


Alle Zeitangaben in WEZ +1. Es ist jetzt 20:54 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