Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi Positionierung dynamisch erzeugte Komponenten bei Scrolling (https://www.delphipraxis.net/83796-positionierung-dynamisch-erzeugte-komponenten-bei-scrolling.html)

Schakko 6. Jan 2007 16:21


Positionierung dynamisch erzeugte Komponenten bei Scrolling
 
Servus Forum,
Ich muss für einen Kunden ein kleines Tool in Delphi programmieren, komme aber eher aus der J2EE / PHP5-Ecke. Dabei ist mir dann auch wohl ein kleiner Denk-Fehler unterlaufen :(

Kurze Einführung:
Meine Anwendung bezieht sich von einem SOAP-Gateway die benötigten Daten und soll diese als Liste darstellen. Funktioniert auch alles wunderbar, die Erzeugung der Einträge geschieht über eine von mir geschriebene Klasse TCompositeLabel.
Das Tool lädt alle x Sekunden die Daten vom Server, formatiert die Daten um und gibt diese dann aus.
Dazu übergebe ich das SOAP-Result-Set an eine von mir geschriebene Klasse TCompositeLabel.
Bis dahin funktioniert alles wunderbar.

Problem ist nun:
Sobald der Benutzer in der Anwendung nach unten scrollt und die die Einträge neu dargstellt werden, ist die Positionierung in der y-Achse total zerschrotet.

Fehlerursache:
Die dynamisch erzeugten Elemente werden mit der Eigenschaft Top positioniert. Die Koorindaten beziehen sich dabei aber auf das Fenster an sich und nicht auf den Fensterausschnitt.

Wie werden die erzeugten Elemente nun an die richtige Position "gezeichnet"?
Das Problem lässt sich wahrscheinlich einfach lösen, aber ich bin gerade etwas überfragt.
Bei JavaScript wäre es die Funktion window.pageYOffset, die ich benutzen müsste. Gibt es da was gleiches unter Delphi?

Grüße & schon einmal danke im Voraus!

Mr_G 6. Jan 2007 16:28

Re: Positionierung dynamisch erzeugte Komponenten bei Scroll
 
Ich weiß ja nicht wie komplex deine Liste aussieht aber vielleicht kannst du dir einfach mal die Komponente TListView ansehen.
Man muss das Rad ja nicht immer neu erfinden ;)

raiguen 7. Jan 2007 10:13

Re: Positionierung dynamisch erzeugte Komponenten bei Scroll
 
Andere Möglichkeit: die Komponenten in einer Scrollbox erstellen...
Wobei natürlich die o.a. TListView schon eine elegante Möglichkeit darstellt...

TStringlist 7. Jan 2007 20:18

Re: Positionierung dynamisch erzeugte Komponenten bei Scroll
 
Wenn ich ein Control mit Top=0 in einer ScrollBox positioniere, dann taucht es immer in der linken oberen Ecke dieser ScrollBox auf, egal wie weit diese auch jeweils gerade mittels ihrer VertScrollBar heruntergescrollt ist!? Imo müsstest Du dann einfach nur die jeweilige 'Strecke', um die die ScrollBox eben gerade heruntergescrollt ist, noch von deinem Wunsch-Top-Wert abziehen:

Delphi-Quellcode:
DeinDynLabel.Top := DeinWunschTop - ScrollBox1.VertScrollBar.Position;

Schakko 11. Jan 2007 11:43

Re: Positionierung dynamisch erzeugte Komponenten bei Scroll
 
Erstmal danke für die fixen Replies, war erst heute wieder beim Kunden vor Ort.
Die vorgeschlagenen Lösungen klingen gut und funktionieren auch, ich habs jetzt aber folgendermaßen gelöst:
Die Komponente wird einfach auf ein TPanel gezeichnet (Owner vom TCompositeLabel ist dementsprechend das Panel).
Sobald eine neue Komponente drauf gepackt wird, wird die Höhe des TPanels geändert.

Trotzdem danke für eure Lösungsvorschläge - ist ein echt gutes Forum!


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