ScrollBox zur Designzeit scrollen

Für Fragen rund um die Ide und zum Debugger
TBug
Beiträge: 177
Registriert: Mi 2. Sep 2015, 11:09
OS, Lazarus, FPC: Lazaurus 2.2.4 FPC 3.2.2
CPU-Target: Windows 32/64bit

Re: ScrollBox zur Designzeit scrollen

Beitrag von TBug »

wp_xyz hat geschrieben:Ich habe mal in deinem Scrollby-Code, die negativen Zahlen eingesetzt (also -100 statt 100, bzw 100 statt -100), und dann ist alles normal.
Das nützt aber nichts, wenn Du nun die Click-Reihenfolge auf die entsprechenden Buttons änderst, dann hast Du wieder das gleich Problem.

Also immer wenn diese Befehsreihenfolge eingehalten wird:

Code: Alles auswählen

ScrollBox1.ScrollBy(0,100)
ScrollBox1.VertScrollBar.Position := 400;
ScrollBox1.ScrollBy(0,-100)
entsteht der Fehler, dass der Großteil der GroupBox3 hinter der GroupBox5 verschwindet.

Und das kann ja wohl nicht normal sein.
wp_xyz hat geschrieben:Hab dein Projekt gerade nach Delphi 7 übertragen, und da verhält sich die Scrollbox genauso. Also ist schon mal Lazarus nicht schuld...
Delphi2007 macht dies richtig. Da überschneiden sich die GroupBoxen nachher nicht.

.

wp_xyz
Beiträge: 5130
Registriert: Fr 8. Apr 2011, 09:01

Re: ScrollBox zur Designzeit scrollen

Beitrag von wp_xyz »

TBug hat geschrieben:Also immer wenn diese Befehsreihenfolge eingehalten wird:

Code: Alles auswählen

ScrollBox1.ScrollBy(0,100)
ScrollBox1.VertScrollBar.Position := 400;
ScrollBox1.ScrollBy(0,-100)
entsteht der Fehler, dass der Großteil der GroupBox3 hinter der GroupBox5 verschwindet.
Das hättest du aber auch gleich so schreiben können, dann hätte ich gewusst, was das Problem ist...

Setze mal "AutoScroll" auf false.

TBug
Beiträge: 177
Registriert: Mi 2. Sep 2015, 11:09
OS, Lazarus, FPC: Lazaurus 2.2.4 FPC 3.2.2
CPU-Target: Windows 32/64bit

Re: ScrollBox zur Designzeit scrollen

Beitrag von TBug »

wp_xyz hat geschrieben:
TBug hat geschrieben:Setze mal "AutoScroll" auf false.
Juhu, wenn man AutoScroll auf false setzt, dann werden die Child-Controls nicht mehr übereinandergelegt bzw. falsch positioniert.

aber:
dann hat man gleich den nächsten Fehler.
Wenn man nun die ersten zwei Codzeilen ausführt

Code: Alles auswählen

ScrollBox1.ScrollBy(0,100)
ScrollBox1.VertScrollBar.Position := 400;
, dann kann man nicht mehr bis noch unten scrollen.
Das heißt, man kann den Inhalt der untersten Groupboxen nicht mehr erreichen.


Ich hab das BugDemoProjekt noch ein wenig erweitert, da es noch einen weiteren Fehler gibt.

Im Design-Modus steht der Scrollbalken nun am untersten Punkt, also die Property ScrollBox1.VertScrollBar.Position steht im OI auf 86.

In der Form befindet sich ein FormCreate() in dem sich folgender Code befindet:

Code: Alles auswählen

 
ScrollBox1.VertScrollBar.Position := 0;
Ergebnis:
In der Scrollbox ist oben ein freier Bereich, welchen man nicht designed hat und dafür kann man nicht mehr bis zum eigenlichen Seitenende herunterscrollen.



Ich beschäftige mich nun erst seit eineinhalb Wochen mit Lazarus und stoße jetzt schon auf Probleme ohne Ende. Vielleicht sollte ich die vergeudete Zeit in Geld umrechnen, dann fällt es mir vielleicht leichter, doch die paar Tausender für ein neues Delphi auszugeben.

wp_xyz
Beiträge: 5130
Registriert: Fr 8. Apr 2011, 09:01

Re: ScrollBox zur Designzeit scrollen

Beitrag von wp_xyz »

TBug hat geschrieben:Ich beschäftige mich nun erst seit eineinhalb Wochen mit Lazarus und stoße jetzt schon auf Probleme ohne Ende.
Gerade zu Beginn sind die Probleme am größten. Aber ich habe ohnehin das Gefühl, du sträubst dich dagegen, Lazarus zu verwenden. Dann hat es keinen Sinn, bleib bei Delphi.

Komoluna
Beiträge: 565
Registriert: So 26. Aug 2012, 09:03
OS, Lazarus, FPC: Windows(10), Linux(Arch)
CPU-Target: 64Bit

Re: ScrollBox zur Designzeit scrollen

Beitrag von Komoluna »

Meinte nicht irgendwer, in Delphi träte, zumindest das erste, Problem auch auf?

MFG

Komoluna
Programmer: A device to convert coffee into software.

Rekursion: siehe Rekursion.

TBug
Beiträge: 177
Registriert: Mi 2. Sep 2015, 11:09
OS, Lazarus, FPC: Lazaurus 2.2.4 FPC 3.2.2
CPU-Target: Windows 32/64bit

Re: ScrollBox zur Designzeit scrollen

Beitrag von TBug »

wp_xyz hat geschrieben:
TBug hat geschrieben:Ich beschäftige mich nun erst seit eineinhalb Wochen mit Lazarus und stoße jetzt schon auf Probleme ohne Ende.
Gerade zu Beginn sind die Probleme am größten.
Ich glaub ich fang' mal mit einem "Hello World"-Programm an, damit ich ein Erfolgserlebnis habe.
wp_xyz hat geschrieben:Aber ich habe ohnehin das Gefühl, du sträubst dich dagegen, Lazarus zu verwenden. Dann hat es keinen Sinn, bleib bei Delphi.
Ich habe es lange geplant die Umstellung zu realisieren und bin auch davon überzeugt, dass es langfristig die richtige Entscheidung ist.

Fakt ist leider aber auch, dass gerade in der Anfangszeit der Umstellung, solche Probleme, welche nicht sein müssten, dazu führen, dass man Zweifel an seinem Vorhaben bekommt und seine Entscheidung selbst in Frage stellt, obwohl man dies eigentlich nicht will.

Ich hoffe, Ihr gebt mir neben der programmiertechnischen auch die notwendige moralische Unterstützung, auch wenn ich in nächster Zeit mal wieder eine negative Äusserung zu Lazarus von mir gebe.

Komoluna
Beiträge: 565
Registriert: So 26. Aug 2012, 09:03
OS, Lazarus, FPC: Windows(10), Linux(Arch)
CPU-Target: 64Bit

Re: ScrollBox zur Designzeit scrollen

Beitrag von Komoluna »

Solange du nicht anfängst über uns herzuziehen ist alles gut ;-)

MFG

Komoluna
Programmer: A device to convert coffee into software.

Rekursion: siehe Rekursion.

wp_xyz
Beiträge: 5130
Registriert: Fr 8. Apr 2011, 09:01

Re: ScrollBox zur Designzeit scrollen

Beitrag von wp_xyz »

TBug hat geschrieben:solche Probleme, welche nicht sein müssten
Naja, sind aber, auch bei den "Großen".

Nachdem ich jetzt das Fehlerbild verstanden habe, muss ich meine Aussage von oben, dass Delphi7 denselben Fehler zeige, widerrufen. Offenbar hat die Scrollbox unter Win32 tatsächlichen einen Bug, es scheint ein Widgetset-Thema zu sein, weil unter Linux das Problem nicht auftritt.

Lade eine Fehlerbeschreibung des Problems zusammen mit deinem Demonstrationsprogramm in den BugTracker hoch (http://bugs.freepascal.org/my_view_page.php). Am besten fügst du Screenshots mit bei, vielleicht auch im Vergleich zu Delphi. Ja, verweise auf das andere Verhalten als bei Delphi, solche Fehler werden meiner Ansicht nach höher priorisiert. Aber bitte keine gehässige Bemerkungen, sonst bist du ganz unten im Stapel.

TBug
Beiträge: 177
Registriert: Mi 2. Sep 2015, 11:09
OS, Lazarus, FPC: Lazaurus 2.2.4 FPC 3.2.2
CPU-Target: Windows 32/64bit

Re: ScrollBox zur Designzeit scrollen

Beitrag von TBug »

Komoluna hat geschrieben:Solange du nicht anfängst über uns herzuziehen ist alles gut ;-)
Da müßtest Du schon ewig warten, bis so etwas passiert.
Ausser im Spass vielleicht mal! :lol:
wp_xyz hat geschrieben:Lade eine Fehlerbeschreibung des Problems zusammen mit deinem Demonstrationsprogramm in den BugTracker hoch (http://bugs.freepascal.org/my_view_page.php).
Hab' ich schon gestern gemacht, so wie zwei weitere Bugs.

Zu den anderen gefundenen Fehlern bin ich noch nicht zum Melden dazugekomme, bzw. muss noch nachschauen, ob sie bereits im BugTracker vorhanden sind.

Michl
Beiträge: 2511
Registriert: Di 19. Jun 2012, 12:54

Re: ScrollBox zur Designzeit scrollen

Beitrag von Michl »

Ich persönlich halte das nicht für einen Bug sondern für ein Feature, worauf man selber als Entwickler achten sollte.

Dein Beispiel funktioniert wunderbar, wenn man einfach testet, ob man überhaupt soweit scrollen darf:

Code: Alles auswählen

procedure TForm1.Button3Click(Sender: TObject);
begin
  if ScrollBox1.VertScrollBar.Position > 100 then
    ScrollBox1.ScrollBy(0, 100)
  else
    ScrollBox1.VertScrollBar.Position := 0;
end;
 
procedure TForm1.Button4Click(Sender: TObject);
begin
  if ScrollBox1.VertScrollBar.Position < ScrollBox1.VertScrollBar.Range - ScrollBox1.VertScrollBar.Page - 100 then
    ScrollBox1.ScrollBy(0, -100)
  else
    ScrollBox1.VertScrollBar.Position := ScrollBox1.VertScrollBar.Range - ScrollBox1.VertScrollBar.Page;
end; 

Code: Alles auswählen

type
  TLiveSelection = (lsMoney, lsChilds, lsTime);
  TLive = Array[0..1] of TLiveSelection;  

Antworten