Mauskoordinaten ScrollBox stimmen nicht bei bsSingle

Rund um die LCL und andere Komponenten
Antworten
siro
Beiträge: 731
Registriert: Di 23. Aug 2016, 14:25
OS, Lazarus, FPC: Windows 11
CPU-Target: 64Bit
Wohnort: Berlin

Mauskoordinaten ScrollBox stimmen nicht bei bsSingle

Beitrag von siro »

Hallo zusammen,
Okay, es ist Montag, aber vielleicht hat ja doch jemand eine Lösung :)

ich habe eine Scrollbox mit width 100, height 100
OnMouseMove habe ich

Code: Alles auswählen

procedure TForm1.ScrollBox1MouseMove(Sender: TObject; Shift: TShiftState; X,
  Y: Integer);
begin
  Form1.caption:=IntToStr(X);
end;     
 


Wenn ich die Maus bewege, erhalte ich die Koordinaten 0..99
solange ich den BorderStyle auf bsNone habe.

Stelle ich bsSingle ein, müste ich eigentlicht die Koordinaten 0..99-2 also 0..97 bekommen
weil rechts und links je ein Pixel für den Rand benoetigt wird.
Tatsächlich bekomme ich aber nur Koordinaten von 0..95
Rechts fehlen 2 Pixel, da reagiert MouseMove anscheinend nicht.
MouseY das gleiche Problem, geht auch nur von 0..95 bei bsSingle

Ich hab das nun eben in Delphi 6 probiert, da stimmt es. 0..97
Hat jemand eine Erklärung dafür ?

mit freundlichen Bits
Siro
Grüße von Siro
Bevor ich "C" ertragen muß, nehm ich lieber Lazarus...

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

Re: Mauskoordinaten ScrollBox stimmen nicht bei bsSingle

Beitrag von Michl »

siro hat geschrieben:Ich hab das nun eben in Delphi 6 probiert, da stimmt es. 0..97
Hat jemand eine Erklärung dafür ?
Habe es eben mit Delphi 10.1 Berlin probiert, da ist das Ergebnis gleich dem von Lazarus: 0..95. Das stimmt auch, wenn ich mir den Rahmen bsSingle auf dem Monitor anschaue, dann ist eine Rahmenseite hier 2 Pixel breit (Windows 7, classic Theme).
Welches OS nutzt du?
Wie breit ist eine Rahmenseite bei dir?

Code: Alles auswählen

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

Benutzeravatar
m.fuchs
Lazarusforum e. V.
Beiträge: 2639
Registriert: Fr 22. Sep 2006, 19:32
OS, Lazarus, FPC: Winux (Lazarus 2.0.10, FPC 3.2.0)
CPU-Target: x86, x64, arm
Wohnort: Berlin
Kontaktdaten:

Re: Mauskoordinaten ScrollBox stimmen nicht bei bsSingle

Beitrag von m.fuchs »

Probieren wir das doch einmal aus.

Unter Linux Mint, also GTK:
Bild
99 - links und rechts jeweils 1px Rand = 97. Alles funktioniert.

Unter Windows:
Bild
99 - links und rechts jeweils 2px Rand = 95. Alles funktioniert. Warum zwei Pixel für den Rand? Weil die 3D-Darstellung zwei benötigt.
Software, Bibliotheken, Vorträge und mehr: https://www.ypa-software.de

siro
Beiträge: 731
Registriert: Di 23. Aug 2016, 14:25
OS, Lazarus, FPC: Windows 11
CPU-Target: 64Bit
Wohnort: Berlin

Re: Mauskoordinaten ScrollBox stimmen nicht bei bsSingle

Beitrag von siro »

Danke ersteinmal für Eure Tests.

Ich arbeite mit
Windows 7 Prof SP1

Jetzt habe ich grad mal die Farbe der Scrollbox geaendert und siehe da :shock:
es gibt anscheinend noch einen zusätzlichen inneren Pixelrahmen in grau oder weiss :P
den ich vorher garnicht gesehen habe. Wo kommt der denn her ?

ScrollBox_bild1.jpg
ScrollBox_bild1.jpg (11.69 KiB) 1765 mal betrachtet


Bei Delphi 3 und 6 mit Ctl3D bekomme ich auch 95 und das ist auch korrekt durch die schattierte Darstellung.
Die Ctl3D Option wie in Delphi hab ich aber bei Lazarus noch nicht gesichtet. Gibts die überhaupt....
Welche Option könnte das sein ? Ich wollte wirklich nur 1 Pixel schwarzen Rahmen haben ?

Neuer Versuch:
ClientWidth liefert mir in Lazarus 100
Obwohl ich nur 0..95 zur Verfügung habe.

in Delphi 6 liefert Clientwidth 98
hier wird also der innere Bereich gezaehlt.

Etwas merkwürdig.... :roll:

Siro
Zuletzt geändert von siro am Mo 14. Nov 2016, 14:40, insgesamt 1-mal geändert.
Grüße von Siro
Bevor ich "C" ertragen muß, nehm ich lieber Lazarus...

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

Re: Mauskoordinaten ScrollBox stimmen nicht bei bsSingle

Beitrag von Michl »

siro hat geschrieben:Neuer Versuch:
ClientWidth liefert mir in Lazarus 100
Obwohl ich nur 0..95 zur Verfügung habe.
Welches? Form1.ClientWidth oder Form1.ScrollBox1.Clientwidth?
ScrollBox1.Clientwidth liefert bei mir unter Delphi, wie auch unter Lazarus 96, was auch korrekt ist.

Code: Alles auswählen

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

siro
Beiträge: 731
Registriert: Di 23. Aug 2016, 14:25
OS, Lazarus, FPC: Windows 11
CPU-Target: 64Bit
Wohnort: Berlin

Re: Mauskoordinaten ScrollBox stimmen nicht bei bsSingle

Beitrag von siro »

In Lazarus 1.6:

Form1.caption:=IntToStr(Form1.ScrollBox1.ClientWidth);
Form1.caption:=IntToStr(Form1.ScrollBox1.Width);

Beide Ausgaben liefern 100
Grüße von Siro
Bevor ich "C" ertragen muß, nehm ich lieber Lazarus...

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

Re: Mauskoordinaten ScrollBox stimmen nicht bei bsSingle

Beitrag von Michl »

Kann es sein, daß du diese Abfrage im OnCreate des Formulars machst? OnShow ist das erste Ereignis, was man für so eine Abfrage nutzen kann.

Code: Alles auswählen

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

siro
Beiträge: 731
Registriert: Di 23. Aug 2016, 14:25
OS, Lazarus, FPC: Windows 11
CPU-Target: 64Bit
Wohnort: Berlin

Re: Mauskoordinaten ScrollBox stimmen nicht bei bsSingle

Beitrag von siro »

Ja, da hast Du völlig recht, bei OnCreate des Formulars.
Geht das nicht :shock:

Tatsächlich, das gibt unterschiedliche Ergebnisse.
OnCreate 100
OnShow 96

Das war jetzt aber nicht das eigentliche Problem....

Aber ein SUPER Hinweis, das ist mir bis heute völlig neu gewesen...
Ich benutze Delphi schon seit zig Jahren. Danke Dir für den wichtigen Hinweis
Grüße von Siro
Bevor ich "C" ertragen muß, nehm ich lieber Lazarus...

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

Re: Mauskoordinaten ScrollBox stimmen nicht bei bsSingle

Beitrag von Michl »

siro hat geschrieben:Geht das nicht
Nein, da zu diesem Zeitpunkt nur die ganzen Objekte erstellt wurden. Die Widgetset-abhängige Erstinitialisierung findet erst danach statt. Wie gesagt, OnShow wäre das richtige Event (oder man müsste die systemabhängigen Properties alle per Hand ausgraben). Delphi, keine Ahnung, ich arbeite nicht damit (hatte mir nur die kostenlose Testversion gezogen - für solches Tests :mrgreen: ).
Zuletzt geändert von Michl am Mo 14. Nov 2016, 15:13, insgesamt 1-mal geändert.

Code: Alles auswählen

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

siro
Beiträge: 731
Registriert: Di 23. Aug 2016, 14:25
OS, Lazarus, FPC: Windows 11
CPU-Target: 64Bit
Wohnort: Berlin

Re: Mauskoordinaten ScrollBox stimmen nicht bei bsSingle

Beitrag von siro »

Okay, bei Delphi scheint es egal zu sein, grade nochmal ausprobiert.
In Lazarus jedoch nicht, das erklärt evtl. auch warum ich einige, noch nicht gelöste, Probleme mit meiner Komponentenübernahme habe.
Hat sich mein Mauskoordinatenproblem schonmal gelohnt. :wink:
Grüße von Siro
Bevor ich "C" ertragen muß, nehm ich lieber Lazarus...

Antworten