Seite 1 von 2

Reihenfolge der Befehle und deren Ausführung

Verfasst: 04.08.2009 19:19
von Klaus_1963
Habe ein "seltsames" Problemchen. Vielleicht könnt Ihr mir das unterschiedliche Verhalten der beiden unten aufgeführten Programmvarianten erklären. Der Unterschied besteht lediglich darin, dass bei der einen Variante zuerst die Linie und dann der Button gezeichnet werden soll, in der 2. Variante zuerst der Button, dann die Linie. Warum wird die Variante 2 so wie erwartet ausgeführt? Warum fehlt bei Variante 1 die horizontale Linie? Vermutlich ist es ja ganz klar, vorausgesetzt man weis es... Vielen Dank im Voraus für Eure Hilfe.

Programmvariante 1:

Code: Alles auswählen

x=200
y=200
IB=400
IH=400

OpenWindow(1, x, y, IB, IH, "Wieso???")

StartDrawing(WindowOutput(1))
  Line(0,20,399,0,RGB(230,5,2))
StopDrawing()

ButtonGadget(1,50,200,100,30,"Ahaso")

Repeat
    Repeat
      Event = WindowEvent()
      If Event = #PB_Event_CloseWindow : Quit = 1 : EndIf
    Until Event = 0
Until Quit = 1
Programmvariante 2:

Code: Alles auswählen

x=200
y=200
IB=400
IH=400

OpenWindow(1, x, y, IB, IH, "Wieso???")

ButtonGadget(1,50,200,100,30,"Ahaso")

StartDrawing(WindowOutput(1))
  Line(0,20,399,0,RGB(230,5,2))
StopDrawing()

Repeat
    Repeat
      Event = WindowEvent()
      If Event = #PB_Event_CloseWindow : Quit = 1 : EndIf
    Until Event = 0
Until Quit = 1
:wink: :wink: :wink:

Verfasst: 04.08.2009 19:31
von Andesdaf
hat was mit der GadetList des Windows zu tun. Wenn du beispielsweise im
ersten Beispiel als Flag vom Window noch #PB_Window_NoGadgets angibst,
also keine GadgetList erstellst, wird die Linie gezeichnet,
aber natürlich der Button nicht, denn es ist ja keine Gadgetliste da.

Da die zweite Variante aber ebenfalls funktionstüchtig ist und du so kein größeres
Problem hast, ist die zweite Variante die Lösung :wink:

Verfasst: 04.08.2009 19:33
von X360 Andy
:lol: :lol:
Das PB Forum ist schneller als die Polizei erlaubt
Bild

Verfasst: 04.08.2009 20:10
von NicknameFJ
Ich habe da eine andere Theorie.

Beim Aufruf von ButtonGadget wird der aktuelle Fensterinhalt als ungültig markiert. Da Du nicht ein einem Callback auf WM_Paint (oder wie die Nachricht heist) reagierst wird das Fenster beim nächsten Refresh neu mit dem Grauen Muster gezeichnet und Deine Linie ist nicht mehr zu sehen.


Grüße

NicknameFJ

Verfasst: 04.08.2009 20:25
von Kaeru Gaman
FJ hat recht.

direkt aufs Fenster zeichnen bringt wenig, wenn man das nicht bei jedem Refresh neuzeichnet.

... und das ist oft zu viel Aufwand, besser auf ein Image zeichnen.
das kann man in ein ImageGadget packen und das deaktivieren, dann hat man nen funktionierenden Hintergrund.

Verfasst: 04.08.2009 20:47
von Klaus_1963
Die Antwort von FJ klingt plausibel. Dann hat mich der Refresh gewissermassen ausgetrickst :-). Vielen Dank an alle.

Klaus

Verfasst: 04.08.2009 23:10
von hjbremer
aber solltest du aus irgendwelchen unbekannten Gründen kein Bock auf in Imagegadget haben und unbedingt deine rote Linie ins Window malen wollen, so ist auch das möglich.

du mußt halt wie bereits erwähnt, auf das Event WM_Paint reagieren. z.B. so

Code: Alles auswählen

x=200 
y=200 
IB=400 
IH=400 

hwnd = OpenWindow(1, x, y, IB, IH, "Wieso???") 

ButtonGadget(1,50,200,100,30,"Ahaso") 

Repeat 
    
      Event = WaitWindowEvent(1) 
      
      If event = #WM_PAINT
         
         StartDrawing(WindowOutput(1)) 
         Line(0,20,399,0,RGB(230,5,2)) 
         StopDrawing() 
      
      ElseIf event = #PB_Event_Gadget
         wb = EventGadget()
         Select wb
           Case 1 : Debug "Button gedrückt"
         EndSelect  
      EndIf
    
Until Event = #PB_Event_CloseWindow  

Verfasst: 05.08.2009 07:32
von Rokur
Anstatt #WM_PAINT kannst du auch die PB eigene Konstante #PB_Event_Repaint verwenden. :wink:

Verfasst: 05.08.2009 10:02
von Klaus_1963
Dank Euch lichtet sich so langsam der Nebel der meinen Geist umgibt :-). PureBasic gefällt mir immer besser, noch besser die community. Noch eine kleine schüchterne Frage am Rande: wie zukunftssicher ist denn PureBasic? Wenn ich das jetzt lerne möchte ich natürlich ein paar Jahre davon profitieren. Weis da jemand was?

Verfasst: 05.08.2009 11:01
von edel
Fuer Anfaenger ein guter Einstieg, ein Job findest du damit aber sicherlich
nicht, da nimmste besser einer der "grossen" Sprachen.