Hallo Freunde des Profanen!
Mit X3, der vollen Unterstützung von Unicode, Set("CallConv","CDECL") und all den anderen Verbesserungen bleiben nun noch kaum Wünsche offen. Das Lesen der Dokumentation "Profan.chm" ist ein Vergnügen, auch wegen der vielen nützlichen Beispiele, die man sofort in den XProfEd kopieren und erweitern kann. Toll gemacht, so stellt man sich eine einfach zu benutzende Programmiersprache vor!
Doch glaube ich noch eine kleine Lücke gefunden zu haben. Es betrifft die Abfrage des Mausrades und der mittleren Maustaste. Dass es mit Messages geht sieht man hier:
'Mausgetmessage.xprf - Maustestprogramm
Cls
While 1 'Endlosschleife
GetMessage
If %lastmessage = 513
Print "linke Maustaste gedrückt"
ElseIf %lastmessage = 514
Print "linke Maustaste losgelassen"
ElseIf %lastmessage = 519
Print "mittlere Maustaste gedrückt"
ElseIf %lastmessage = 520
Print "mittlere Maustaste losgelassen"
ElseIf %lastmessage = 516
Print "rechte Maustaste gedrückt"
ElseIf %lastmessage = 517
Print "rechte Maustaste losgelassen"
ElseIf %lastmessage = 522
Print "Mausrad bewegt"
ElseIf %lastmessage = 160
Print "MausCursor außerhalb des Fensters"
' Hier kann man auch die Bewegungsrichtung nicht abfragen
' und der Komfort wie bei WaitInput geht verloren
EndIf
EndWhile
End
Alles anzeigen
Auch die Richtung der Bewegung des Rades dürfte herauszubekommen zu sein. Mit WaitInput ist nur ein Bruchteil möglich:
' Mauswaitinput.xprf - Maustestprogramm
Cls
While 1 'Endlosschleife
WaitInput
If %MousePressed = 0
Print "keine Maustaste gedrückt" ' geht nicht
Elseif %MousePressed = 1
Print "linke Maustaste gedrückt" ' geht
ElseIf %MousePressed = 2
Print "rechte Maustaste gedrückt" ' geht
ElseIf %MousePressed = 3
Print "andere Maustaste gedrückt" ' geht nicht
ElseIf %MousePressed = 4
Print "mittlere Maustaste gedrückt" ' geht nicht
ElseIf %MousePressed > 4
Print "andere Maustaste gedrückt" ' geht hier nicht
ElseIf %MousePressed < 0
Print "andere Maustaste gedrückt" ' geht hier nicht
'Mausrad und seine Bewegungsrichtung kann gar nicht abgefragt werden?
EndIf
EndWhile
End
Alles anzeigen
Überhaupt stellt sich die Frage ob es fünf Wait... Varianten als Kopf der Eingabewarteschleife braucht, WaitInput, WaitKey, WaitScan, WaitMouse und GetMessage. Das ist verwirrend und fehlerträchtig. Vielleicht könnte man alles zusammen mit weiteren Events von Timer, Schnittstellen etc. zu einem einzigen Befehl, etwa WaitEvent zusammenfassen, wie ich bereits bei anderen Programmiersystemen gesehen habe.
Das wäre die Anregung: Mausrad, mittlere Maustaste und das Übrige bei WaitInput integrieren oder bei der Gelegenheit eventuell das gesamte Ereignissystem neu zu konzipieren und in das einzige WaitEvent zusammenzufassen.