Seite 1 von 2

Problem mit DrawText() und rechter Maustaste (Fenster/LINUX)

Verfasst: 03.03.2007 00:17
von bec
Hallo,

Ich habe, bevor ich auf PureBasic gestossen bin, ein Programm in GFA-Basic für Windows geschrieben welches Koordinaten aus einer Liste auf dem Bildschirm als Punkte mit Punktnummern anzeigt. Das will ich mit PureBasic Linuxfähig machen. Das meiste lässt sich einfach portieren. Nur zwei Sachen hab ich noch nicht hingekriegt.

1. Was ist falsch an dem Codeschnipsel ? Der Text erscheint bei mir nicht im Window ! (Suse 10.1, KDE)

Code: Alles auswählen

If OpenWindow(0, 0, 0, 500, 400, "", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
   If StartDrawing(WindowOutput(0))
      FrontColor($00FF00)
      DrawText(200, 200, "Test")  ; Warum kommt hier nichts ins Fenster ???
      StopDrawing()
   EndIf
   Repeat : Event = WaitWindowEvent() : Until  Event = #PB_Event_CloseWindow
EndIf

2. Die Function WaitWindowEvent() liefert bei mir keine Events wenn Maustasten gedrückt werden. (Bei Windows ja, bei Linux nein !!!)
Ist das ein Fehler in Pb oder mach ich was falsch ?


Bin für jeden Tip dankbar.

Titel angepasst - Kaeru fecit

Verfasst: 03.03.2007 01:14
von Scarabol
Hallo,

zu 1.
Ich hab zwar nur Windows aber bei mir wird der Text angezeigt. Allerdings hätte ich ihn beinahe übersehen, da der Hintergrund vom Fenster hellgrau, der Texthintergrund weiß und der Text zu alledem auch noch Grün ist. Also keine geschickte Farbwahl. Möchte dich nicht als doof abstufen, aber es ist schon spät und vielleicht hast du es einfach übersehen.

zu 2.
(no comment) <- da kein Linux

Gruß
Scarabol

Verfasst: 03.03.2007 01:19
von #NULL
zu 1.)..
es wird gezeichnet, aber nur bis es wieder zerstört wird.
du mußt es immer neu zeichnen, wenn du ein #PB_EVENT_REPAINT -ereignis erhälst.
aber die wesentlich bessere methode wäre, auf ein bild zu malen, und das
bild in einem ImageGadget aufzubewahren, dann übernimmt windows den
refresh.

Verfasst: 03.03.2007 13:18
von Kaeru Gaman
also, wenn man schon mauskrempel in nem fenster anzeigen will,
dann würde ich gleich ein stringgadget nehmen, und kein draw-krempel.

zu den mausbuttons, was für mausfunktionen verwendest du denn?

welches event fragst du denn ab, um den mausbutton zu checken?

Verfasst: 03.03.2007 13:54
von bec
Hallo Scarabol,

wie du schon selber sagst :du hast kein Linux.
Aber nur deswegen tue ich mir das an.
Das Progrämmchen war nur ein Beispiel.
Andere Farben hab ich schon getestet.
Bei mir kommt kein Text.
Das mit #PB_EVENT_REPAINT (danke #NULL)
enthält mein Programm ja schon. (Die Punkte zeichnet
es mit Plot() auch nach Fensterzerstörung. Nur die
Texte nicht)


Wenn das folgende Programm unter Windows läuft bekommt man
eindeutige events für alle 3 Tasten(maus down, maus up)
Unter Linux gibt es nur Nullen.

Code: Alles auswählen

If OpenWindow(0, 0, 0, 500, 400, "", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
   Repeat
      Event = WaitWindowEvent()
      Debug event
   Until  Event = #PB_Event_CloseWindow
EndIf 
Hat jemand von euch Pb unter Linux laufen ?

.

Verfasst: 03.03.2007 18:25
von edel
bec hat geschrieben: Wenn das folgende Programm unter Windows läuft bekommt man
eindeutige events für alle 3 Tasten(maus down, maus up)
Unter Linux gibt es nur Nullen.

Code: Alles auswählen

If OpenWindow(0, 0, 0, 500, 400, "", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
   Repeat
      Event = WaitWindowEvent()
      Debug event
   Until  Event = #PB_Event_CloseWindow
EndIf 
Hat jemand von euch Pb unter Linux laufen ?

.
Es gibt unter PB dafuer keine Events. Wenn du mehr Events moechtes,
kommst du um einen Callback nicht herum.

Verfasst: 03.03.2007 18:57
von bec
#NULL hat geschrieben:zu 1.)..
es wird gezeichnet, aber nur bis es wieder zerstört wird.
du mußt es immer neu zeichnen, wenn du ein #PB_EVENT_REPAINT -ereignis erhälst.
aber die wesentlich bessere methode wäre, auf ein bild zu malen, und das
bild in einem ImageGadget aufzubewahren, dann übernimmt windows den
refresh.

Hallo #Null,

das is es !!! Ein Imagegadget löst beide Probleme auf einmal.
Da kriegt man die Mausevents und DrawText() macht auch was er soll.
Es ist zwar nicht auf den ersten Blick einsichtig warum man es so machen
soll aber es geht.

Vielen Dank für eure schnelle Hilfe

.

Verfasst: 05.03.2007 17:44
von tmjuk
Hallo,
@ bec :
also bei diesem Code

Code: Alles auswählen

If OpenWindow(0, 0, 0, 500, 400, "", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
   Repeat
      Event = WaitWindowEvent()
      Debug event
   Until  Event = #PB_Event_CloseWindow
EndIf 
der von dir stammt, bekomme ich Events geliefert. Wenn du eben da klickst, wo Events zu erwarten sind. Einfach im Fenster klicken, in dem sich kein Gadget befindet, kann auch schlecht was zurück melden.
Klick doch zum Beispiel mal auf die Titelleiste. Das ergab bei mir Meldungen.

Torsten

Verfasst: 05.03.2007 21:49
von Kaeru Gaman
> Einfach im Fenster klicken, in dem sich kein Gadget befindet, kann auch schlecht was zurück melden.

tut es aber unter windows...

Verfasst: 05.03.2007 23:00
von tmjuk
Richtig. Wäre auch ganz interessant zu wissen, warum.
Also Portierbarkeit von Code zwischen Windows und Linux ist ja gegeben, aber vor Überraschungen ist man auf jeden Fall nicht sicher. Gegebenenfalls ist man gezwungen doch eine Menge zu ändern.

Torsten