Scrollbalken selbst machen

Für Probleme bezüglich Grafik, Audio, GL, ACS, ...
Euklid
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:

Beitrag von Euklid »

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 !
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?

Christian
Beiträge: 6079
Registriert: Do 21. Sep 2006, 07:51
OS, Lazarus, FPC: iWinux (L 1.x.xy FPC 2.y.z)
CPU-Target: AVR,ARM,x86(-64)
Wohnort: Dessau
Kontaktdaten:

Beitrag von Christian »

Das erledigt natürlich das Widgetset ja.
W.m.k.A.h.e.m.F.h. -> http://www.gidf.de/

pluto
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)

Beitrag von pluto »

ja das weiß ich ! darum hilft mir der Soruce code von den Scrollbalken ja auch nicht weiter.
MFG
Michael Springwald

Euklid
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:

Beitrag von Euklid »

hehe, klingt logisch...

pluto
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)

Beitrag von pluto »

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*
MFG
Michael Springwald

pluto
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)

Beitrag von pluto »

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:

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;
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 ?).
MFG
Michael Springwald

Benutzeravatar
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:

Beitrag von af0815 »

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.
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 ?
Prozentuell.
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).

pluto
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)

Beitrag von pluto »

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.
Dateianhänge
Bildschirmfoto-GUI - Test Anwendung.png
MFG
Michael Springwald

pluto
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)

Beitrag von pluto »

in der MouseMove methote habe ich es versucht mit %

Code: Alles auswählen

// 100% = ScrollBuffer.Height
        // ab   = x
        writeln( Round((ab*ScrollBuffer.Height) / 100));
aber die zahl ist leider viel zu groß die dabei rauß kommt:
9990
MFG
Michael Springwald

Benutzeravatar
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:

Beitrag von af0815 »

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
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).

pluto
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)

Beitrag von pluto »

da gibt es keine Werte über 100
ich habe % Zahlen gesehen die über 100 liegen z.b. 300 oder 200 oder oder oder

VIELEN DANK FÜR DEIN BEISPIEL.
Du kommst mir vor wie mancher Manager.
Wie kommst du dadrauf ?
MFG
Michael Springwald

pluto
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)

Beitrag von pluto »

ich habe es gerade ausprobiert:
Anteil = ScrollBuffer.Height
Gesamtheit = maximale Buffergröße
Ich bin davon ausgegangen das du mit Scrollbufer.Height das Sichtfenster meinst oder ?
Weil die Maximale Buffergröße ist bei mir ScrollBuffer.Height

Das Sichtfenster wird in ScrollRect(TRect) gespeichert.
MFG
Michael Springwald

pluto
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)

Beitrag von pluto »

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

Euklid
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:

Beitrag von Euklid »

Ich nehme an, der Wert muss ganzzahlig sein. Dann wäre für die Division wohl "div" besser geeignet...

pluto
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)

Beitrag von pluto »

ja da hast du recht, aber sobald ich mit div oder round arbeite bekomme ich sowas hier :

1,5 -> 15 bei Round oder div.
Ich dachte immer Round müsste doch aufrunden bis zum nächsten Ganzaligen Zahl oder nicht ?
MFG
Michael Springwald

Antworten