Scrollbalken selbst machen

Für Probleme bezüglich Grafik, Audio, GL, ACS, ...
monta
Lazarusforum e. V.
Beiträge: 2809
Registriert: Sa 9. Sep 2006, 18:05
OS, Lazarus, FPC: Linux (L trunk FPC trunk)
CPU-Target: 64Bit
Wohnort: Dresden
Kontaktdaten:

Beitrag von monta »

du willst uns doch nicht erzählen, diese Standardfunktionen arbeiten falsch....wohl eher der Benutzer ;)
Johannes

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 sind solche zahlen z.b.
1,3542542525245 und daraus macht Round bei mir 13 und nicht 1 wie ich es erwartet hätte. ob das nun Falsch ist oder nicht weiß ich nicht. Aber aufjedenfall geht das so nicht. und bei div das gleiche:
Round(1.4444932939339). was kommt bei euch da raus ? bzw. was müsste da rauß kommen ? 1 oder nicht ? oder 2 ? aber nicht 14 oder ?
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 sehe gerade Round(1.4444932939339) macht er richtig da kommt 1 rauß.... dann muss es wohl an der Variable oder so liegen. mal weiter suchen.

edit01

Code: Alles auswählen

if ab > 0 then begin
          t:=(ScrollBuffer.Height*100) / ab;
        end;
        Writeln(round(t));
aber hier macht er wieder 123 oder so rauß und ohne round wird es 1,234 und soweiter !
MFG
Michael Springwald

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 »

da steht ja auch ein *100 drin du nase.
round funktioniert schon ab wird einfach 0.1 oder ähnliches sein
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 »

wenn ich t einfach so Ausgabe mit Writeln bekmme ich eine z.b. so eine zahl: 1,333535355412
wenn ich jetzt aber Round(t) sage bekomme ich 133 oder so.... Aber mir geht es auch erher um den Scroll Balken als um die Funktion Round. Es muss mit dem Datentyp zusamen hängen. Anders kann ich es mir nicht erklären !
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 »

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

1,5 -> 15 bei Round oder div.
Das glaube ich dir nicht. Mit round und div gehe ich regelmäßig um, das wäre mir aufgefallen.

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 »

Ist bei mir aber auf jedenfall der fall. Warum weiß ich nicht. Aber darum geht es mir auch nicht ! mir geht es erher darum, wie ich das mit den Scrollen lösen könnte. Das mit der Prozen Rechnung ist mir schon klar, aber wie genau ?

ich könnte auch eine Schlüsselzahl Berechnung einsetzen:
Gewünschtemenge durch vorhanden Menge
und das ergbniss dann mit irgendwas mal nehmen, die frage ist halt jetzt wie !
MFG
Michael Springwald

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 »

Nee pluto das sind bewährte Funktionen probier mal ein neues leeres projekt zu machen und da

writeln(FormatFloat('0.00',Round(1.5))));
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 »

das geht, das habe ich probiert. Sobald ich den wert direkt eingeben geht es. Aber sobald ich den Wert über eine Variable eingebe geht es nicht mehr.

versuch bitte mal folgendes:
t:Real
t:=4.5552546262
Writeln(round(t))

was kommt bei dir da rauß ?
MFG
Michael Springwald

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 »

var
t:Real;
begin
t:=4.5552546262;
Showmessage(IntToStr(round(t)));

writeln(t:10:10);

end;

Da kommt 5 raus und beim writeln 4,55...

warum beim round mit writeln 45 rauskommt kann ich dir nicht sagen ich hab mir jetzt die dokumentation zum writeln nicht angeschaut kann durchaus sein das das richtig ist. kann genauso gut sein das es ein fehler ist.

ABER ROUND ARBEITET KORREKT
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 »

nagut, dann glaube ich dir,aber das hilft mir im Moment recht wenige weiter bei meinem Problem :( :( :(
MFG
Michael Springwald

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 »

Ja dann solltest du dich vielleicht nochmal etwas mit Prozentrechnung beschäftigen. Und zum debuggen den Debugger und nicht writeln nehmen oder Writeln mit IntToStr damit du richtige Werte bekommst.
W.m.k.A.h.e.m.F.h. -> http://www.gidf.de/

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 »

Um ehrlich zu sein verstehe ich dein Problem noch nicht.

Wenn L die Länge des Textes ist. Und B die Länge der Scrollbar und S die Länge des Scrollbalkens (oder wie das Ding heißt).

Warum nicht

Code: Alles auswählen

if L>B then S := B div L else if L>Maximallänge then S:=Minimallänge.

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 »

Wenn ich dich richtig verstehe wird die Scrollbalken Länge berechnet.

Die Scrollbalken Länge soll aber egal sein.

L > Scrollbuffer.heig
B > fVertikal.height
S > fVertikalScroll.height..



Also zum Problem:
Der Text(ScrollBuffer.heigh) kann größer sein als der Scrollbalken selbst.
D.h. ich kann nicht einfach das ScrollFenster auf die Scrollbalken Position setzten...

Bei jeder Mausbewegung muss das Sichtfenster um eine bestimmte menge an Pixeln verschoben werden entweder rauf oder runter.

Im Moment geht es mir um rauf.

Danke für deine Hilfe !
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 »

Dann verschiebe das Sichtfenster um den Bruchteil seiner Länge rauf, um den du den Scrollbalken nach unten bewegst...

Antworten