Line Windows<>Linux

Für Fehler in Lazarus, um diese von anderen verifizieren zu lassen.

Line Windows<>Linux

Beitragvon Mathias » 2. Okt 2016, 19:03 Line Windows<>Linux

Bei folgendem Code, wird wie erwartet unter Windows nur eine Linie gezeichnet.
Aber unter Linux kommen zwei.
Code: Alles auswählen
procedure TForm1.FormPaint(Sender: TObject);
begin
  Canvas.Line(10, 10, 200, 10);
  Canvas.Line(10 + $FFFF, 20, 200 + $FFFF, 20);
end

Ist dies ein Bug ?
Mit Lazarus sehe ich gün
Mit Java und C/C++ sehe ich rot
Mathias
 
Beiträge: 4350
Registriert: 2. Jan 2014, 17:21
Wohnort: Schweiz
OS, Lazarus, FPC: Linux (die neusten Trunc) | 
CPU-Target: 64Bit
Nach oben

Beitragvon Socke » 2. Okt 2016, 19:31 Re: Line Windows<>Linux

Mathias hat geschrieben:Bei folgendem Code, wird wie erwartet unter Windows nur eine Linie gezeichnet.
Aber unter Linux kommen zwei.
Code: Alles auswählen
procedure TForm1.FormPaint(Sender: TObject);
begin
  Canvas.Line(10, 10, 200, 10);
  Canvas.Line(10 + $FFFF, 20, 200 + $FFFF, 20);
end

Ist dies ein Bug ?

Unter Windows ist zwar die Breite eines Formulars als Integer definiert, Windows hat hier aber anscheinend ein internes Limit von $7FFF.
Dadurch wir die zweite Linie nicht gezeichnet, da sie in einem ungültigen Bereich liegt.
GTK2 oder QT können dies selbstverständlich anders handhaben.
MfG Socke
Ein Gedicht braucht keinen Reim//Ich pack’ hier trotzdem einen rein
Socke
Lazarusforum e. V.
 
Beiträge: 2636
Registriert: 22. Jul 2008, 18:27
Wohnort: Köln
OS, Lazarus, FPC: Lazarus: SVN; FPC: svn; Win 10/Linux/Raspbian/openSUSE | 
CPU-Target: 32bit x86 armhf
Nach oben

Beitragvon wp_xyz » 2. Okt 2016, 19:45 Re: Line Windows<>Linux

Socke hat geschrieben:Unter Windows ist zwar die Breite eines Formulars als Integer definiert, Windows hat hier aber anscheinend ein internes Limit von $7FFF.
Dadurch wir die zweite Linie nicht gezeichnet, da sie in einem ungültigen Bereich liegt.

Das sehe ich nicht so, wie kommst du darauf? Die zweite Linien liegt einfach kilometerweit außerhalb des sichtbaren Fensters.

Dass unter Linux zwei Linien gezeichnet werden, sehe ich auch nicht. Mein Mint zeichnet sowohl mit gtk2 als auch mit qt nur 1 Linie, genauso wie Windows.
wp_xyz
 
Beiträge: 3005
Registriert: 8. Apr 2011, 08:01

Beitragvon Socke » 2. Okt 2016, 19:57 Re: Line Windows<>Linux

wp_xyz hat geschrieben:
Socke hat geschrieben:Unter Windows ist zwar die Breite eines Formulars als Integer definiert, Windows hat hier aber anscheinend ein internes Limit von $7FFF.
Dadurch wir die zweite Linie nicht gezeichnet, da sie in einem ungültigen Bereich liegt.

Das sehe ich nicht so, wie kommst du darauf? Die zweite Linien liegt einfach kilometerweit außerhalb des sichtbaren Fensters.

Dass unter Linux zwei Linien gezeichnet werden, sehe ich auch nicht. Mein Mint zeichnet sowohl mit gtk2 als auch mit qt nur 1 Linie, genauso wie Windows.

[Window Title]
Fehler

[Content]
TWinControl.SetBounds (Form1:TForm1): Width 12287 not allowed.

[Ok]

Wenn ich die Formularbreite auf $1FFF stelle, gibt es diese Fehlermeldung nicht, die Breite wird aber auf 3348 (horizontale Bildschirmauflösung - 12 Pixel) eingestellt.

Bei dir müssten doch zwei Linien gezeichnet werden? Hast du versucht, z.B. einen Button an der Position der zweiten Linie zu positionieren und dorthin zu scrollen?
MfG Socke
Ein Gedicht braucht keinen Reim//Ich pack’ hier trotzdem einen rein
Socke
Lazarusforum e. V.
 
Beiträge: 2636
Registriert: 22. Jul 2008, 18:27
Wohnort: Köln
OS, Lazarus, FPC: Lazarus: SVN; FPC: svn; Win 10/Linux/Raspbian/openSUSE | 
CPU-Target: 32bit x86 armhf
Nach oben

Beitragvon wp_xyz » 2. Okt 2016, 20:13 Re: Line Windows<>Linux

Sorry, ich verstehe kein Wort... Was machst du, dass diese Fehlermeldung kommt?
wp_xyz
 
Beiträge: 3005
Registriert: 8. Apr 2011, 08:01

Beitragvon Socke » 2. Okt 2016, 21:13 Re: Line Windows<>Linux

wp_xyz hat geschrieben:Sorry, ich verstehe kein Wort... Was machst du, dass diese Fehlermeldung kommt?

Ich gebe im Objektinspektor für Form1.Width den Wert $2FFF ein.
MfG Socke
Ein Gedicht braucht keinen Reim//Ich pack’ hier trotzdem einen rein
Socke
Lazarusforum e. V.
 
Beiträge: 2636
Registriert: 22. Jul 2008, 18:27
Wohnort: Köln
OS, Lazarus, FPC: Lazarus: SVN; FPC: svn; Win 10/Linux/Raspbian/openSUSE | 
CPU-Target: 32bit x86 armhf
Nach oben

Beitragvon Mathias » 2. Okt 2016, 21:15 Re: Line Windows<>Linux

Dass unter Linux zwei Linien gezeichnet werden, sehe ich auch nicht. Mein Mint zeichnet sowohl mit gtk2 als auch mit qt nur 1 Linie, genauso wie Windows.

Könnte das evtl. am Grafik-Treiber liegen ?
Mit Lazarus sehe ich gün
Mit Java und C/C++ sehe ich rot
Mathias
 
Beiträge: 4350
Registriert: 2. Jan 2014, 17:21
Wohnort: Schweiz
OS, Lazarus, FPC: Linux (die neusten Trunc) | 
CPU-Target: 64Bit
Nach oben

Beitragvon wp_xyz » 2. Okt 2016, 21:46 Re: Line Windows<>Linux

Ich muss zurückrudern: Alle meine Linux VM mit gtk2 (Ubuntu 12.04, 16.04, Mint 18, Mint 17) zeigen zwei Linien, das Mint 17 mit qt nur eine (die Mitteilung oben ist falsch). Die beiden Linien beginnen und enden beim gleichen x-Wert, sind aber vertikal um die 10 Pixel verschoben, also wie wenn die Koordinate $FFFF+10 als 10 interpretiert wird, und $FFFF+200 als 200. Kann es sein, dass gtk2 mit einigen/allen (?) Fällen noch mit 16-bit Koordinaten arbeitet? Denn $FFFF + 10 --> 10 ist ja ein klassischer Überlauf an der Word-Grenze.
wp_xyz
 
Beiträge: 3005
Registriert: 8. Apr 2011, 08:01

Beitragvon Mathias » 2. Okt 2016, 21:53 Re: Line Windows<>Linux

Die beiden Linien beginnen und enden beim gleichen x-Wert, sind aber vertikal um die 10 Pixel verschoben

Sie sind 10 Pixel verschoben, ich habe bewusst bei der 2.Linie ein Y-Wert von 20 angegeben.
Mit Lazarus sehe ich gün
Mit Java und C/C++ sehe ich rot
Mathias
 
Beiträge: 4350
Registriert: 2. Jan 2014, 17:21
Wohnort: Schweiz
OS, Lazarus, FPC: Linux (die neusten Trunc) | 
CPU-Target: 64Bit
Nach oben

Beitragvon mse » 3. Okt 2016, 05:37 Re: Line Windows<>Linux

Der Koordinatenbereich von X11, was auf Linux vermutlich zum zeichnen verwendet wird, ist 16 Bit -> -2^15 .. 2^15 - 1.
https://www.x.org/releases/X11R7.6/doc/ ... mmon_types
(siehe POINT und RECTANGLE).
mse
 
Beiträge: 2013
Registriert: 16. Okt 2008, 09:22
OS, Lazarus, FPC: Linux,Windows,FreeBSD,(MSEide+MSEgui 4.6,git master FPC 3.0.4,fixes_3_0) | 
CPU-Target: x86,x64,ARM
Nach oben

Beitragvon Mathias » 3. Okt 2016, 16:57 Re: Line Windows<>Linux

Der Koordinatenbereich von X11, was auf Linux vermutlich zum zeichnen verwendet wird, ist 16 Bit -> -2^15 .. 2^15 - 1.

Dann kann Lazarus in dem Fall nichts dafür.
Dann muss man die Koordinaten zuerst prüfen, bevor man zeichnet.
Mit Lazarus sehe ich gün
Mit Java und C/C++ sehe ich rot
Mathias
 
Beiträge: 4350
Registriert: 2. Jan 2014, 17:21
Wohnort: Schweiz
OS, Lazarus, FPC: Linux (die neusten Trunc) | 
CPU-Target: 64Bit
Nach oben

• Themenende •

Zurück zu Lazarus - Bugs



Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 4 Gäste

cron
porpoises-institution
accuracy-worried