Kann es sein, dass Lazarus für die Scrollbalken garnicht zuständig ist, sondern dass das der Fenstermanager des Betriebssystems erledigt und ein entsprechendes Ereignis an das Programm zurücksendet?pluto hat geschrieben: ich möchte nicht eine Besseren Scrollbalken machen ich möchte doch einfach nur verstehen wie so was geht ! mehr doch nicht !
Scrollbalken selbst machen
-
- Lazarusforum e. V.
- Beiträge: 2808
- Registriert: Fr 22. Sep 2006, 10:38
- OS, Lazarus, FPC: Lazarus v2.0.10, FPC 3.2.0
- Wohnort: Hessen
- Kontaktdaten:
-
- Lazarusforum e. V.
- Beiträge: 7192
- Registriert: So 19. Nov 2006, 12:06
- OS, Lazarus, FPC: Linux Mint 19.3
- CPU-Target: AMD
- Wohnort: Oldenburg(Oldenburg)
Ja nicht ?
ich hoffe ihr habt jetzt mein Problem richtig Verstanden, für alle anderen hier noch mal ein versuch das Problem zu beschreiben:
Ich möchte jetzt ein Vertikalen Scrollbalken selbst machen.
Dazu brauche ich ja erstmal ein Rechteck als Hintergrund.
Dann brauche ich ja ein zweites was ich mit der Maus anfassen kann.
Nun habe ich eine TBitMap im Hintergrund wo der gesammte Text/Grafik drauf gezeichnet wurde, also alles.
Davon wird jetzt nur das gezeichnet was zu sehen ist.
Soweit habe ich das schon oft hinbekommen.
Jetzt kommt das Problem:
Wenn ich den Scrollbalken bewegen möchte, muss sich der Text/Grafik in der Ausgabe ja anpassen.
(also richtig anpassen).
ich habe schon überlegt das irgendwie in Prozent Auszurechnen. Aber das bringt mich auch nicht direkt weiter *leider*
ich hoffe ihr habt jetzt mein Problem richtig Verstanden, für alle anderen hier noch mal ein versuch das Problem zu beschreiben:
Ich möchte jetzt ein Vertikalen Scrollbalken selbst machen.
Dazu brauche ich ja erstmal ein Rechteck als Hintergrund.
Dann brauche ich ja ein zweites was ich mit der Maus anfassen kann.
Nun habe ich eine TBitMap im Hintergrund wo der gesammte Text/Grafik drauf gezeichnet wurde, also alles.
Davon wird jetzt nur das gezeichnet was zu sehen ist.
Soweit habe ich das schon oft hinbekommen.
Jetzt kommt das Problem:
Wenn ich den Scrollbalken bewegen möchte, muss sich der Text/Grafik in der Ausgabe ja anpassen.
(also richtig anpassen).
ich habe schon überlegt das irgendwie in Prozent Auszurechnen. Aber das bringt mich auch nicht direkt weiter *leider*
MFG
Michael Springwald
Michael Springwald
-
- Lazarusforum e. V.
- Beiträge: 7192
- Registriert: So 19. Nov 2006, 12:06
- OS, Lazarus, FPC: Linux Mint 19.3
- CPU-Target: AMD
- Wohnort: Oldenburg(Oldenburg)
So ich habe gestern wieder angefangen bei eigene GUI zu erweitern.
Und habe mit einer TScrollbox weiter gemacht - einer eigenen.
Die ist so aufgebaut: Ich zeichne zuerst ein Viereck, dann zwei Scrollbalken.
Soweit sollte es klar sein oder ?
das Problem ist jetzt bei der Mausbewegung:
Wie ihr hier sehen könnt, habe ich die Entfernung berechnet ausgehen von der Höhe der ScrollBuffer. Allerdings ist der Wert nicht hoch genug:
ScrollRect.top:=ScrollRect.top+(ab div (ScrollRect.Bottom));
zur erst hatte ich hier +1 stehen:
ScrollRect.top:=ScrollRect.top+1;
allerdings wahr das zu klein. Da die Scrollbalken ja eine bestimmte höhe haben.
Ich bin jetzt zu den Schluss gekommen das ich "einfach" nur diesen wert ermitteln müsste. Aber ich weiß beim besten willen leider nicht wie das gehen könnte.
Ich dachte dabei könnte mir helfen wie weit ich am ende der ScrollBuffers schon bin. Mir liegt die Lösung auf der Zunge, nur ich komme nicht drauf. Es geht also jetzt darum irgendwie diesen wert zu ermitteln der darf nicht immer gleich sein also +1 oder +5 der muss variieren und irgendwan bei 0 angekommen..... Aber wie ?
Hat da einer von euch eine Idee ?
(Wenn ihr was allgemeines zu meinem GUI Projekt sagen wollt, mache ich einen neuen Thread auf, aber hier soll es nur um das Thema Scrollen gehen ok ?).
Und habe mit einer TScrollbox weiter gemacht - einer eigenen.
Die ist so aufgebaut: Ich zeichne zuerst ein Viereck, dann zwei Scrollbalken.
Soweit sollte es klar sein oder ?
das Problem ist jetzt bei der Mausbewegung:
Code: Alles auswählen
procedure TMyScrollBox.MouseMove(Sender: TMyCompo; const typ, x, y: Integer;
const shift: TShiftState);
var
ab:Integer;
begin
case ScrollTyp of
1: begin
if (y >= top+2) and (y <=((top+Height)-fVertikalScroll.Height-25)) then begin
fVertikalScroll.CanDraw:=False;
fVertikalScroll.top:=y;
fVertikalScroll.CanDraw:=True;
ab:=ScrollBuffer.Height-(ScrollRect.top+1);
writeln(ab div (ScrollRect.Bottom));
ScrollRect.top:=ScrollRect.top+(ab div (ScrollRect.Bottom));
Draw;
end;
end;
ScrollRect.top:=ScrollRect.top+(ab div (ScrollRect.Bottom));
zur erst hatte ich hier +1 stehen:
ScrollRect.top:=ScrollRect.top+1;
allerdings wahr das zu klein. Da die Scrollbalken ja eine bestimmte höhe haben.
Ich bin jetzt zu den Schluss gekommen das ich "einfach" nur diesen wert ermitteln müsste. Aber ich weiß beim besten willen leider nicht wie das gehen könnte.
Ich dachte dabei könnte mir helfen wie weit ich am ende der ScrollBuffers schon bin. Mir liegt die Lösung auf der Zunge, nur ich komme nicht drauf. Es geht also jetzt darum irgendwie diesen wert zu ermitteln der darf nicht immer gleich sein also +1 oder +5 der muss variieren und irgendwan bei 0 angekommen..... Aber wie ?
Hat da einer von euch eine Idee ?
(Wenn ihr was allgemeines zu meinem GUI Projekt sagen wollt, mache ich einen neuen Thread auf, aber hier soll es nur um das Thema Scrollen gehen ok ?).
MFG
Michael Springwald
Michael Springwald
- af0815
- Lazarusforum e. V.
- Beiträge: 6856
- Registriert: So 7. Jan 2007, 10:20
- OS, Lazarus, FPC: FPC fixes Lazarus fixes per fpcupdeluxe (win,linux,raspi)
- CPU-Target: 32Bit (64Bit)
- Wohnort: Burgenland
- Kontaktdaten:
OnTopic:
Wie wäre es mit einem Versuch bei der fpcGUI. Dann hast du ein Sinnvolles Ziel und auch noch ein Community für eine GUI ?!
OffTopic:
Gibts jetzt einen eigenen Thread für mich von Dir.
OnTopic:
Scollbalken werden doch vom Widgetset bedient, was soll das ganze.
Wie wäre es mit einem Versuch bei der fpcGUI. Dann hast du ein Sinnvolles Ziel und auch noch ein Community für eine GUI ?!
OffTopic:
Gibts jetzt einen eigenen Thread für mich von Dir.
OnTopic:
Scollbalken werden doch vom Widgetset bedient, was soll das ganze.
Prozentuell.ch dachte dabei könnte mir helfen wie weit ich am ende der ScrollBuffers schon bin. Mir liegt die Lösung auf der Zunge, nur ich komme nicht drauf. Es geht also jetzt darum irgendwie diesen wert zu ermitteln der darf nicht immer gleich sein also +1 oder +5 der muss variieren und irgendwan bei 0 angekommen..... Aber wie ?
Hat da einer von euch eine Idee ?
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).
-
- Lazarusforum e. V.
- Beiträge: 7192
- Registriert: So 19. Nov 2006, 12:06
- OS, Lazarus, FPC: Linux Mint 19.3
- CPU-Target: AMD
- Wohnort: Oldenburg(Oldenburg)
Prozentuell wie genau ? das währe doch dann ein wert zwischen 0 und 100 was eigentlich zu groß währe bzw. angepasst werden müsste weil es kann ja auch werte über 100 kommen.
Daran habe ich auch schon gedacht. ich werde es gleich mal so versuchen.
@af0815. Ich möchte nicht irgendwo mitarbeiten und mich anpassen müssen. Ich möchte meine eigene Freiheit haben.
Ich lade dir mal ein Bild von meiner GUI hoch. Das ganz links ist meine Scrollbox.
Daran wird ein BMP angezeigt und ein TRect wir genutzt um nur den sichtbaren Bildauschnit gezeichnet.
Mir geht es nicht darum Besser zu sein als das was es schon gibt. Ich möchte anders sein.
Und ich möchte wissen wie aufwendig es ist so eine GUI zu schreiben. Was für Gedanken muss ich mir machen ? Wie geht das mit den Events ? wie geht das mit Panels und so ?
Die meisten fragen habe ich schon in meinen vielen versuchen gelöst. Bis halt auf das Problem mit dem Scrollen. Auch zum Thema Draq und Drop habe ich einige Ideen wie ich das umsetzen könnte oder aber auch für ein eigenes From.
Zu Guter letzt möchte ich auch bb code in meinem Komponenten unterstützen. Oder aber auch BMP Fonts. Und dir Form der Komponenten soll frei wählbar werden. Es soll vorgaben geben wie z.b. Recheckig, oder aber auch mit abgerundeten ecken oder als Dreieck oder als Kreis und soweiter.
Daran habe ich auch schon gedacht. ich werde es gleich mal so versuchen.
@af0815. Ich möchte nicht irgendwo mitarbeiten und mich anpassen müssen. Ich möchte meine eigene Freiheit haben.
Ich lade dir mal ein Bild von meiner GUI hoch. Das ganz links ist meine Scrollbox.
Daran wird ein BMP angezeigt und ein TRect wir genutzt um nur den sichtbaren Bildauschnit gezeichnet.
Mir geht es nicht darum Besser zu sein als das was es schon gibt. Ich möchte anders sein.
Und ich möchte wissen wie aufwendig es ist so eine GUI zu schreiben. Was für Gedanken muss ich mir machen ? Wie geht das mit den Events ? wie geht das mit Panels und so ?
Die meisten fragen habe ich schon in meinen vielen versuchen gelöst. Bis halt auf das Problem mit dem Scrollen. Auch zum Thema Draq und Drop habe ich einige Ideen wie ich das umsetzen könnte oder aber auch für ein eigenes From.
Zu Guter letzt möchte ich auch bb code in meinem Komponenten unterstützen. Oder aber auch BMP Fonts. Und dir Form der Komponenten soll frei wählbar werden. Es soll vorgaben geben wie z.b. Recheckig, oder aber auch mit abgerundeten ecken oder als Dreieck oder als Kreis und soweiter.
MFG
Michael Springwald
Michael Springwald
-
- Lazarusforum e. V.
- Beiträge: 7192
- Registriert: So 19. Nov 2006, 12:06
- OS, Lazarus, FPC: Linux Mint 19.3
- CPU-Target: AMD
- Wohnort: Oldenburg(Oldenburg)
in der MouseMove methote habe ich es versucht mit %
aber die zahl ist leider viel zu groß die dabei rauß kommt:
9990
Code: Alles auswählen
// 100% = ScrollBuffer.Height
// ab = x
writeln( Round((ab*ScrollBuffer.Height) / 100));
9990
MFG
Michael Springwald
Michael Springwald
- af0815
- Lazarusforum e. V.
- Beiträge: 6856
- Registriert: So 7. Jan 2007, 10:20
- OS, Lazarus, FPC: FPC fixes Lazarus fixes per fpcupdeluxe (win,linux,raspi)
- CPU-Target: 32Bit (64Bit)
- Wohnort: Burgenland
- Kontaktdaten:
Du rechnest auch keine Prozent.
Prozent = Anteil / Gesammtheit * 100
da gibt es keine Werte über 100. Du kommst mir vor wie mancher Manager.
Anteil = ScrollBuffer.Height
Gesamtheit = maximale Buffergröße
Prozent = Anteil / Gesammtheit * 100
da gibt es keine Werte über 100. Du kommst mir vor wie mancher Manager.
Anteil = ScrollBuffer.Height
Gesamtheit = maximale Buffergröße
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).
-
- Lazarusforum e. V.
- Beiträge: 7192
- Registriert: So 19. Nov 2006, 12:06
- OS, Lazarus, FPC: Linux Mint 19.3
- CPU-Target: AMD
- Wohnort: Oldenburg(Oldenburg)
ich habe es gerade ausprobiert:
Weil die Maximale Buffergröße ist bei mir ScrollBuffer.Height
Das Sichtfenster wird in ScrollRect(TRect) gespeichert.
Ich bin davon ausgegangen das du mit Scrollbufer.Height das Sichtfenster meinst oder ?Anteil = ScrollBuffer.Height
Gesamtheit = maximale Buffergröße
Weil die Maximale Buffergröße ist bei mir ScrollBuffer.Height
Das Sichtfenster wird in ScrollRect(TRect) gespeichert.
MFG
Michael Springwald
Michael Springwald
-
- Lazarusforum e. V.
- Beiträge: 7192
- Registriert: So 19. Nov 2006, 12:06
- OS, Lazarus, FPC: Linux Mint 19.3
- CPU-Target: AMD
- Wohnort: Oldenburg(Oldenburg)
ich habe es eben noch mal probiert, aber irgendwie glappt das alles nicht:
Code: Alles auswählen
ab:=ScrollBuffer.Height-((ScrollRect.Top+ScrollRect.Bottom)+1);
// ab = 100%
// Buffer.heig
if ab > 0 then begin
t:=(ScrollBuffer.Height*100) / ab;
end;
MFG
Michael Springwald
Michael Springwald