Merkwürdiges Verhalten unter Linux (Point(x,y))

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
Bisonte
Beiträge: 2468
Registriert: 01.04.2007 20:18

Merkwürdiges Verhalten unter Linux (Point(x,y))

Beitrag von Bisonte »

Hallo.

Meine weiteren Gehversuche unter Linux mit PB haben mal wieder so ihre Fallen ausgelegt.

Ich habe LinuxMint 17 Cinnemon x86 und das PB5.22 in einer VM installiert, um zu checken ob der Code
den ich unter Windows so verzapfe auch unter Linux laufen würde.

Nun ist mir ein merkwürdiges Verhalten aufgefallen.

Folgender Code :

Code: Alles auswählen

OpenWindow(0, 0, 0, 20, 20, "", #PB_Window_BorderLess)
StartDrawing(WindowOutput(0))
GrabDrawingImage(0, 0, 0, 1, 1)
StopDrawing()
StartDrawing(ImageOutput(0))
Color.l = Point(0,0)
StopDrawing()
CloseWindow(0)

Debug Hex(Red(Color)) + Hex(Green(Color)) + Hex(Blue(Color))
gibt beim ersten starten DFDFDF zurück. Bei weiteren Starts kommt aber 000. Aber ab und an kommt doch ein DFDFDF durch....
Kann das jemand erklären, oder ist das ein bösartiger Bug ?

(Der Versuch crossplattform die Hintergrundfarbe eines Fensters zu bestimmen, wenn diese noch nicht mit SetWindowColor() definiert wurde...)
PureBasic 6.21 (Windows x86/x64) | Windows11 Pro x64 | AsRock B850 Steel Legend Wifi | R7 9800x3D | 64GB RAM | GeForce RTX 5080 | ThermaltakeView 270 TG ARGB | build by vannicom​​
Benutzeravatar
NicTheQuick
Ein Admin
Beiträge: 8809
Registriert: 29.08.2004 20:20
Computerausstattung: Ryzen 7 5800X, 64 GB DDR4-3200
Ubuntu 24.04.2 LTS
GeForce RTX 3080 Ti
Wohnort: Saarbrücken

Re: Merkwürdiges Verhalten unter Linux (Point(x,y))

Beitrag von NicTheQuick »

Am besten lässt du die Events noch abarbeiten, bevor du sowas machst. Und ein 'Delay(10)' scheint auch noch zu helfen.
Und übrigens geht das auch ohne 'GrabImage()'.

Code: Alles auswählen

OpenWindow(0, 0, 0, 20, 20, "", #PB_Window_BorderLess)
Delay(10)
While WindowEvent() : Wend
StartDrawing(WindowOutput(0))
Color.l = Point(0,0)
StopDrawing()
CloseWindow(0)

Debug Hex(Red(Color)) + Hex(Green(Color)) + Hex(Blue(Color))
Aber trotzdem kommt es in 8% der Fälle bei mir vor, dass ich auch 000 als Ergebnis kriege.
Vielleicht ist es doch besser die entsprechenden APIs dafür zu verwenden. ;)
Benutzeravatar
Bisonte
Beiträge: 2468
Registriert: 01.04.2007 20:18

Re: Merkwürdiges Verhalten unter Linux (Point(x,y))

Beitrag von Bisonte »

Das mit direkt vom Window abgreifen hab ich auch schonmal versucht, wurde allerdings immer
zu Color = 0... Daher mal mit dem Umweg...

Ok das mit den Events kann ich noch nachvollziehen, aber wieso gibt eine native PB Funktion
bei verschiedenen Starts unterschiedliche Werte zurück ? Das riecht doch nach Käferbefall, oder
liege ich da falsch ?

Und btw, Du sagst auch, das bei Dir ab und an falsche bzw andere Werte rauskommen.... Das
ist also kein Einzelfall. Sehr eigenartig...

Edit:

Nach ein wenig experimentieren scheint Delay(1) vollkommen ausreichend zu sein.

Code: Alles auswählen

OpenWindow(0, 0, 0, 20, 20, "", #PB_Window_BorderLess)
Delay(1)
While WindowEvent() : Wend
StartDrawing(WindowOutput(0))
Color.l = Point(0,0)
StopDrawing()
CloseWindow(0)

Debug Hex(Red(Color)) + Hex(Green(Color)) + Hex(Blue(Color))
PureBasic 6.21 (Windows x86/x64) | Windows11 Pro x64 | AsRock B850 Steel Legend Wifi | R7 9800x3D | 64GB RAM | GeForce RTX 5080 | ThermaltakeView 270 TG ARGB | build by vannicom​​
Antworten