Aktuelle Zeit: 08.08.2020 02:34

Alle Zeiten sind UTC + 1 Stunde [ Sommerzeit ]




Ein neues Thema erstellen Auf das Thema antworten  [ 11 Beiträge ]  Gehe zu Seite 1, 2  Nächste
Autor Nachricht
 Betreff des Beitrags: Bedingtes Startdrawing() wird nicht ausgelöst
BeitragVerfasst: 11.04.2020 16:19 
Offline

Registriert: 10.04.2020 12:19
Hallo, ich möchte, daß testweise ein roter Punkt gemalt wird, wenn WinndowsMouseX() > 375 ist. Das geht aber nicht, obwohl es laut Debugger gehen müßte. Ich habe jetzt redlich den Code so geschrieben, wie ich das in dem heute morgigen Beispiel gezeigt bekommen hatte, obwohl es mir total gegen den Strich geht, nur mit WindowEvent() zu arbeiten, anstatt mit WaitWindowEvent(). Wieso wird jetzt der rote Punkt nicht gezeichnet, obwohl die Bedingung dafür vorliegt? Bitte helft mir jetzt, dann habt ihr mich auch so schnell wie möglich wieder vom Hals hier im Forum. Früher hatte ich immer geschafft, das programmieren zu können, was ich wollte und für mich selber ist das jetzt am allerschlimmsten, jetzt erstmal so elend kämpfen zu müssen. Hier ist der Code:

Code:
#Flags = #PB_Window_SystemMenu | #PB_Window_MinimizeGadget | #PB_Window_MaximizeGadget

If InitMouse() = 0
  MessageRequester("InitMouse fehlgeschlagen", "Programm endet")
EndIf

If InitKeyboard() = 0
  MessageRequester("InitKeyboard fehlgeschlagen", "Programm endet")
EndIf


If InitSprite() = 0
  MessageRequester("InitSprite fehlgeschlagen", "Programm endet")
EndIf 

If OpenWindow(1,0,0,1366,700,"",#Flags) = 0
  MessageRequester("OpenWindow fehlgeschlagen", "Programm endet")
EndIf 

If OpenWindowedScreen(WindowID(1),0,0,1366,700) = 0
  MessageRequester("OpenWindowedScreen fehlgeschlagen", "Programm endet")
EndIf

StartDrawing(ScreenOutput())
Box(0,0,1366,700,RGB(0,200,0))
StopDrawing()


Repeat     
   Repeat
     ExamineKeyboard()
     ExamineMouse() : ReleaseMouse(#True)
     Event = WindowEvent()
     
     Select event
       Case #WM_LBUTTONDOWN
         wmx = WindowMouseX(1) : Debug wmx   
         
       Case #PB_Event_CloseWindow
         schliessen = 1
     EndSelect   
         
       If wmx > 375
         StartDrawing(ScreenOutput())
         Circle(300,290,7,RGB(200,0,0))
         StopDrawing()
       EndIf
       
   Until Event = 0
Until schliessen = 1 Or #PB_Event_CloseWindow Or KeyboardPushed(#PB_Key_Escape)     
End


Danke.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Bedingtes Startdrawing() wird nicht ausgelöst
BeitragVerfasst: 11.04.2020 17:20 
Offline
Benutzeravatar

Registriert: 25.04.2006 17:29
Wohnort: Nähe Hamburg
Hallo, ich bin zwar gerade nur am Smartphone, sehe aber so schon, dass du Event mal groß und mal klein schreibst. Diese Art von Fehler kann dir bei Verwendung der Compileranweisung EnableExplicit nicht passieren.

Schreib das als erste Zeile in deinen Code und dann debugge ihn erstmal.

Gruß Kurzer

Gesendet von einem Smartphone

_________________
"Never run a changing system!"
PB 5.72 x64, OS: Windows 7 Pro x64, Desktopscaling: 125%, CPU: I7 6500, RAM: 16 GB, GPU: Intel Graphics HD 520
Ich bin Baujahr 1968, also aktuell 52.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Bedingtes Startdrawing() wird nicht ausgelöst
BeitragVerfasst: 11.04.2020 17:30 
Offline
Benutzeravatar

Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9
@Kurzer: Falsch abgebogen. :wink: Variablennamen sind in PB zum Glück case insentive.

Der EnableExplicit - Tipp gilt allerdings immer.

Grüße ... Peter

_________________
Schrödingers Smiley :):


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Bedingtes Startdrawing() wird nicht ausgelöst
BeitragVerfasst: 11.04.2020 17:56 
Offline
Benutzeravatar

Registriert: 25.04.2006 17:29
Wohnort: Nähe Hamburg
Oh danke Kiffi, da war ich in der Tat zu übereifrig. :shock:

_________________
"Never run a changing system!"
PB 5.72 x64, OS: Windows 7 Pro x64, Desktopscaling: 125%, CPU: I7 6500, RAM: 16 GB, GPU: Intel Graphics HD 520
Ich bin Baujahr 1968, also aktuell 52.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Bedingtes Startdrawing() wird nicht ausgelöst
BeitragVerfasst: 11.04.2020 18:17 
Offline

Registriert: 29.08.2004 13:18
Mein Tip ist: Nicht auf den Bildschirm zeichnen! Bei meinen aktuellen Spiel hat das nur zu unkontrollierbaren Problemen geführt. Erstell dir ein Sprite, mal in den Sprite und benutzt den dann. Das geht auch um ein vielfaches schneller.

_________________
CodeArchiv Rebirth: Deutsches Forum Github Hilfe ist immer gern gesehen!


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Bedingtes Startdrawing() wird nicht ausgelöst
BeitragVerfasst: 11.04.2020 18:21 
Offline
Benutzeravatar

Registriert: 25.04.2006 17:29
Wohnort: Nähe Hamburg
@Re57,

hier mal eine bereinigte Version des codes mit ein paar Anpassungen.
Ich weiß nicht warum du die Auswertung mit einem Mausklick brauchst, aber dieser Code hier wertet die Position fortlaufend aus. Sobald du die Maus nach rechts über die Grenzlinie (375 Pixel) ziehst, wird dein Kreis gezeichnet.

Code:
EnableExplicit

#Flags = #PB_Window_SystemMenu | #PB_Window_MinimizeGadget | #PB_Window_MaximizeGadget

Define.i event, wmx, wmy, border, width, height
border = 375
width = 1366
height = 700

If InitKeyboard() = 0
   MessageRequester("InitKeyboard fehlgeschlagen", "Programm endet")
   End
EndIf


If InitSprite() = 0
   MessageRequester("InitSprite fehlgeschlagen", "Programm endet")
   End
EndIf

If OpenWindow(1, 0, 0, width, height, "", #Flags) = 0
   MessageRequester("OpenWindow fehlgeschlagen", "Programm endet")
   End
EndIf

If OpenWindowedScreen(WindowID(1), 0, 0, width, height) = 0
   MessageRequester("OpenWindowedScreen fehlgeschlagen", "Programm endet")
   End
EndIf

Repeat     
   ExamineKeyboard()
   
   ;event = WindowEvent()
   event = WaitWindowEvent()
   
   wmx = WindowMouseX(1)
   wmy = WindowMouseY(1)
   
   If wmx > border
      StartDrawing(ScreenOutput())
      Box(0, 0, width, height, RGB(0, 200, 0))
      Line(border, 0, 1, height, RGB(200, 0, 0))
      Circle(wmx, wmy, 7, RGB(200, 0, 0))
      StopDrawing()
      FlipBuffers()
   Else
      StartDrawing(ScreenOutput())
      Box(0, 0, width, height, RGB(0, 200, 0))
      Line(border, 0, 1, height, RGB(200, 0, 0))
      StopDrawing()
      FlipBuffers()
   EndIf
   
Until event = #PB_Event_CloseWindow Or KeyboardPushed(#PB_Key_Escape)     
End


PS: Warum sollte es mit WaitWindowEvent() nicht gehen?

_________________
"Never run a changing system!"
PB 5.72 x64, OS: Windows 7 Pro x64, Desktopscaling: 125%, CPU: I7 6500, RAM: 16 GB, GPU: Intel Graphics HD 520
Ich bin Baujahr 1968, also aktuell 52.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Bedingtes Startdrawing() wird nicht ausgelöst
BeitragVerfasst: 11.04.2020 18:59 
Offline

Registriert: 10.04.2020 12:19
Vielen Dank, vor allem an Kurzer für den Code. Ich habe das verstanden. Vor allem fehlte in meinem eigenen Code Flipbuffers(). Und ich habe jetzt auch in meinem Code diese innere Schleife entfernt. Jetzt läuft es super, auch mit WaitWindowsEvent()!

EnableExplicit hatte ich auch mal ausprobiert und demnach sollte etwas mit der Variablen wmx nicht stimmen oder mit Event = WindowsEventI() außer der Groß- und Kleinschreibung. Tempo spielt bei dem, was ich vor habe, überhaupt keine Rolle, daher ist es auch voll OK, direkt auf den Screen zu zeichnen. Danke nochmals!

Edit: Ursprünglich hatte ich hier etwas Frust gepostet, der allerdings nur temporär war. Jetzt bin ich aber wieder motiviert :allright:


Zuletzt geändert von Re57 am 11.04.2020 19:50, insgesamt 2-mal geändert.

Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Bedingtes Startdrawing() wird nicht ausgelöst
BeitragVerfasst: 11.04.2020 19:13 
Offline
Benutzeravatar

Registriert: 24.11.2004 13:12
Wohnort: Germany
Vergiss mal alles was du damals mit PB gemacht hast und lerne wieder von vorne...

Wenn man nicht mal in die Hilfe von PB schaut, die sehr gut geschrieben ist, kommt man auch nicht weiter.
Purebasic hat sich natürlich weiterentwickelt, aber vieles gilt heute genau so wie in der alten Version.

Etwas Grundlagen lernen, wie Event Management und Variablen deklarieren, gehören einfach dazu.
Wenn du das nicht möchtest, gibt es immer noch im Museum die alten Versionen und Purebasic.

Sorry, wenn das etwas hart klingt. Aber wenn man wieder einsteigen möchte, gehört auch neu lernen dazu.

_________________
Alles ist möglich, fragt sich nur wie...
Projekte ThreadToGUI / EventDesigner V3 / OOP-BaseClass-Modul / OPC-Helper DLL
PB v3.30 / v5.4x - OS Mac Mini OSX 10.xx / Window 10 Pro. (X64) /Window 7 Pro. (X64) / Window XP Pro. (X86) / Ubuntu 14.04
Downloads auf My Webspace


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Bedingtes Startdrawing() wird nicht ausgelöst
BeitragVerfasst: 11.04.2020 19:18 
Offline
Benutzeravatar

Registriert: 25.04.2006 17:29
Wohnort: Nähe Hamburg
Ich glaube auch nicht, dass PureBasic eine Wissenschaft geworden ist.

Vermutlich bist du mit einer bestimmten Vorstellung an die Sache heran gegangen, von der du denkst, dass es der Weg ist, wie man das zu programmieren hat. Das führt nicht immer zum Erfolg, vor allem, wenn man bei den grundlegenden Funktionsweisen eine falsche Annahme hat (jetzt nur rein hypothetisch gesprochen) und versucht nun den code auf Basis dieser Annahme zum laufen zu bringen.

Du siehst z.B., dass dein code auch mit einer Repeat Schleife funktioniert. Deine Herangehensweise war vermutlich zu kompliziert, wenn du eine innere Repeat-Schleife programmierst, die nur verlassen wird, wenn kein Event kommt. Das konnte ich alles weg-rationalisieren, weil die Eventschleife im Prinzip eigentlich sehr einfach ist und nicht sehr viel komplizierten code benötigt.

Schau dir evtl. noch ein paar einfache Beispiele aus der PB Hilfe an oder die Grundlagenkapitel in der Hilfe und konzentriere dich dabei nicht so sehr auf das Verstehen der einzelnen codezeilen, sondern mache dir ein Bild von den Prinzipien, die da angewendet werden. Ich komme selbst vom Amiga (Assembler, lange ist es her) und habe mir am Anfang meiner PB Zeit (und auch lange Zeit danach noch) sehr oft an den Kopf fassen müssen, was ich mir da für einen Quark zusammengetippt habe. Auf dem Amiga waren einige Dinge ganz anders zu lösen, weil man dort unter Umständen an das Videotiming (50 Hz) gebunden war. :-) )

Also nicht verzagen und nicht zu viel auf einmal "können wollen". Einfach mal zurücklehnen und ein paar Beispielcodes auf der Prinzipienebene analysieren.

Gruß Kurzer

_________________
"Never run a changing system!"
PB 5.72 x64, OS: Windows 7 Pro x64, Desktopscaling: 125%, CPU: I7 6500, RAM: 16 GB, GPU: Intel Graphics HD 520
Ich bin Baujahr 1968, also aktuell 52.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Bedingtes Startdrawing() wird nicht ausgelöst
BeitragVerfasst: 11.04.2020 19:34 
Offline

Registriert: 10.04.2020 12:19
@mk-soft
Ist völlig richtig, was Du geschrieben hattest (allerdings sehe ich natürlich schon immer zuerst ins Handbuch). Variablen deklarieren werde ich mir auf jeden Fall mal ansehen, denn davon wußte ich bisher noch gar nichts. Ich weiß, daß das Handbuch sehr gut ist, das ist auch voll meine eigene Meinung. Auch wie schnell man direkt aus dem Programm heraus Hilfe aufrufen kann über F1 und dafür nicht mal online sein zu braucht, ist äußerst lobenswert gemacht. Ich bin halt manchmal etwas ungeduldig, aber so schnell gebe ich andererseits auch wiederum nicht auf. Wenn man dann wiedermal eine Hürde hinter sich hat, und dabei ist ja auch das Forum super, hat man ja auch wieder Auftrieb. In meinem obigen Fall war es ja eigentlich nur eine Kleinigkeit, aber drauf kommen muß man eben. Danke.

@Kurzer
Daß ich das heute mit der inneren zusätzlichen Schleife versucht hatte, war die unmittelbare Beeinflussung des Codebeispiels, was ich mir heute morgen angesehen hatte. So wie der Code jetzt ist, ist mir das aber auch viel lieber. Danke für Deinen Nachtrag.


Zuletzt geändert von Re57 am 11.04.2020 21:44, insgesamt 1-mal geändert.

Nach oben
 Profil  
Mit Zitat antworten  
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 11 Beiträge ]  Gehe zu Seite 1, 2  Nächste

Alle Zeiten sind UTC + 1 Stunde [ Sommerzeit ]


Wer ist online?

Mitglieder in diesem Forum: Google Adsense [Bot] und 28 Gäste


Sie dürfen keine neuen Themen in diesem Forum erstellen.
Sie dürfen keine Antworten zu Themen in diesem Forum erstellen.
Sie dürfen Ihre Beiträge in diesem Forum nicht ändern.
Sie dürfen Ihre Beiträge in diesem Forum nicht löschen.

Suche nach:
Gehe zu:  

 


Powered by phpBB © 2008 phpBB Group | Deutsche Übersetzung durch phpBB.de
subSilver+ theme by Canver Software, sponsor Sanal Modifiye