AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

Top / Left falsch, wenn gescrollt

Ein Thema von berens · begonnen am 25. Aug 2020 · letzter Beitrag vom 14. Sep 2020
Antwort Antwort
berens

Registriert seit: 3. Sep 2004
421 Beiträge
 
Delphi 2010 Professional
 
#1

Top / Left falsch, wenn gescrollt

  Alt 25. Aug 2020, 10:49
Hallo zusammen,
ich kämpfe hier seit Jahren mit einem uralten Problem, dass ich nun doch endlich mal abschließend klären möchte:

Situation:
Zur Laufzeit wird mein GUI öfters neu aufgebaut, wenn sich etwas geändert hat. Hat der Benutzer gerade nach Rechts oder Unten gescrollt, werden die neu erzeugten / positionierten Komponenten relativ zur linken oberen Ecke des Formulars positioniert, nicht zum "Ursprung" des Clientbereichs des Formulars, der ja aktuell bei den Koordinaten (0 - HorzScrollbar.ScrollPos, 0 - VertScrollbar.ScrollPos) liegt. Das Problem besteht identisch, wenn ich die Komponenten in einer ScrollBox positioniere.

Ich kann mir nicht vorstellen, dass das "richtig" ist.

Lösungsansätze:
1) Vor jedem Neu-Aufbau scrolle ich X und Y auf "0". Funktioniert, aber das Programm zappelt dauernd wie wild herum, wenn neu aufgebaut wird. Nicht hübsch.
2) ALLE Änderungen von Positionen von Komponenten suchen und abfangen, Left/Top entsprechend den Scrollbars manipulieren und weitergeben. Wahrscheinlich die nachhaltigste Lösung, aber ein *riesen* Aufwand, für ein eigentlich so triviales Problem. Das MUSS doch anders gehen?
Edit: Problem ist dann auch, wenn ich die "tatsächlichen" Positions-Werte mit den "Soll"-Werten meines Layouts vergleiche, z.B. um zu prüfen, ob Überschneidungen stattfinden. Im Prinzip muss ich jede einzelne Quelltextzeile ALLES Units meiner Software anpassen, die irgendwas mit Left, Top, Right oder Bottom zu tun haben... Das kann nicht sein...
3) Alles in ein Panel reinklatschen, dessen Größe auf den scrollbaren Bereich festlegen und AutoScroll des Forms/Scrollbox auf True. Hatte meine ich auch irgendwelche Probleme (ist schon Lange her), das wäre wahrscheinlich die einfachste/schnellste Lösung.

Gibt es eine richtige Lösung?



Zum Testen: Formular mit Scrollbar.Range 4000 Breit, 2000 Hoch erstellen. Label und Timer darauf platzieren.
Delphi-Quellcode:
interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, ExtCtrls, StdCtrls;

type
  TForm6 = class(TForm)
    Timer1: TTimer;
    Panel1: TPanel;
    Label1: TLabel;
    procedure Timer1Timer(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form6: TForm6;

implementation

{$R *.dfm}

procedure TForm6.Timer1Timer(Sender: TObject);
begin
  Label1.SetBounds(100, 200, 100, 100);
end;
Delphi 10.4 32-Bit auf Windows 10 Pro 64-Bit, ehem. Delphi 2010 32-Bit auf Windows 10 Pro 64-Bit

Geändert von berens (25. Aug 2020 um 11:42 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
38.276 Beiträge
 
Delphi 10.4 Sydney
 
#2

AW: Top / Left falsch, wenn gescrollt

  Alt 25. Aug 2020, 16:54
Zitat:
3) Alles in ein Panel reinklatschen, dessen Größe auf den scrollbaren Bereich festlegen und AutoScroll des Forms/Scrollbox auf True. Hatte meine ich auch irgendwelche Probleme (ist schon Lange her), das wäre wahrscheinlich die einfachste/schnellste Lösung.
Ich glaub das hatte irgendeine Grenze und wenn der Scrollbereich größer ist, wird quasi abgeschnitten.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
Delphi-Tage 2005-2014
  Mit Zitat antworten Zitat
jovitaweeks

Registriert seit: 14. Sep 2020
1 Beiträge
 
#3

AW: Top / Left falsch, wenn gescrollt

  Alt 14. Sep 2020, 09:36
Danke schön
.
  Mit Zitat antworten Zitat
Benutzerbild von KodeZwerg
KodeZwerg

Registriert seit: 1. Feb 2018
3.049 Beiträge
 
Delphi 10.3 Rio
 
#4

AW: Top / Left falsch, wenn gescrollt

  Alt 14. Sep 2020, 09:44
Es gibt auch ein FlowPanel was mit dem Inhalt wachsen kann.
Ich weiß ja nicht wie deine Vcl anordnung aussieht (ein bild wäre nice gewesen), man kann Align = alTop einstellen und bei resize lediglich den Top wert neu zuordnen.
Also man fängt bei Top 0 an, wirft ein ding mit alTop rein und sagt dessen Top ist gleich die top + height des vorigen und macht nach diesem muster immer weiter.
Gruß vom KodeZwerg
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 +2. Es ist jetzt 04:38 Uhr.
Powered by vBulletin® Copyright ©2000 - 2021, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2021 by Daniel R. Wolf