 |
Das deutsche QBasic- und FreeBASIC-Forum Für euch erreichbar unter qb-forum.de, fb-forum.de und freebasic-forum.de!
|
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
Leader4
Anmeldungsdatum: 20.01.2005 Beiträge: 99 Wohnort: Leipzig
|
Verfasst am: 01.07.2006, 20:14 Titel: Maus und Screen 0 |
|
|
Hallo.
Ich habe ein Problem bei der Verwendung des Befehls GetMouse im Screen 0 und zwar bei allen Compilern, die die Mausroutine im Screen 0 unterstützen (also ab FB V. 0.15). Auch habe ich das Problem auf mehreren verschiedenen Rechnern beobachten können, da ich zunächst an einen allgemeinen Systemfehler auf meinem Computer dachte.
Wenn ich im Screen 0 den Befehl GetMouse verwende und eine Shell-Anweisung irgendwo in dem Programm ist, dann funktioniert die Mausroutine nur ein einziges Mal und hakt sich dann scheinbar fest. Ich möchte das Problem einmal an einem Beispiel (vereinfacht) zeigen:
Code: |
Screen 0
Dim A As Integer
Dim B As Integer
Dim C As Integer
Dim D As Integer
Shell "Prog2.exe"
10
Do
GetMouse A, B, C, D
Locate 1,1: Print A, B, C, D
If D=1 Then Goto 10
Loop
|
Wird die Mausroutine das erste Mal verwendet, ist alles wie es sein müsste. Beim Bewegen der Maus ändern sich die Werte A und B entsprechend der Mausbewegung, wie man es erwarten würde.
Drücke ich aber in diesem Beispiel die linke Maustaste (D=1), so dass die Schleife kurz verlassen wird, dann scheint sich die Maus festzufahren, sobald das Programm wieder in der Schleife ist. Denn obgleich ich immer noch in der Do-Loop-Schleife bin, kann ich mit der Maus machen was ich will - es passiert rein gar nichts. Die Werte A, B, C, D ändern sich nicht. Kein Klicken wird vom Programm mehr registriert. Allerdings ist das Programm nicht komplett festgefahren - würde ich einen Getkeybefehl in die Schleife einbauen, würde das Programm auf Tasten registrieren. Es ist halt nur die Maus, die im zweiten Durchlauf nicht mehr erkannt wird.
Nehme ich die Shell-Anweisung hinaus, tritt der Fehler nicht mehr auf. Dabei ist auch völlig egal, was es für eine Shell-Anweisung ist. Die Anweisung Shell "Title Neues Programm" löst das Problem genauso aus wie die Anweisung Shell "Programm.exe".
Ist das normal so, das heißt, dürfen grundsätzlich die Anweisungen Shell und GetMouse in einem Programm mit Screen 0 nicht gleichzeitig verwendet werden oder kann man das irgendwie umgehen? Mehrmalige De- und Neuinstallation verschiedener FB-Compiler konnten das Problem bisher nicht lösen.
Freundliche Grüße,
Leader. _________________ Ein richtiger Programmierer muss so richtig faul sein und sich den ganzen Tag mit der Frage beschäftigen, wie man mal wieder etwas einfacher machen kann. |
|
Nach oben |
|
 |
Michael Frey

Anmeldungsdatum: 18.12.2004 Beiträge: 2577 Wohnort: Schweiz
|
Verfasst am: 01.07.2006, 20:42 Titel: |
|
|
Ich sag mal lieber nichts zum Thema Goto ...
Ich kann den Fehler mit FB 0.16 nicht nachvollziehen, mir fehlt aber auch "Prog2.exe".
Probier das mal:
Code: | Dim A As Integer
Dim B As Integer
Dim C As Integer
Dim D As Integer
Shell "Prog2.exe"
Screen 0
10
Do
GetMouse A, B, C, D
Locate 1,1: Print A, B, C, D
If D=1 Then Goto 10
Loop |
So ist der Screen sauber definiert wenn du aus Prog2.exe kommst. _________________ http://de.wikibooks.org/wiki/FreeBasic Jede Hilfe für dieses Buch ist Willkommen!
http://de.wikibooks.org/wiki/FreeBasic:_FAQ FAQ zu Freebasic (im Aufbau, hilfe Willkommen)
Neu mit Syntax Highlight |
|
Nach oben |
|
 |
Leader4
Anmeldungsdatum: 20.01.2005 Beiträge: 99 Wohnort: Leipzig
|
Verfasst am: 01.07.2006, 21:25 Titel: |
|
|
Sry, hab bei dem Programmcode nen kleinen Fehler drin. Die Marke 10 muss vor der Shell-Anweisung stehen, ansonsten funktioniert das Programm.
Also demnach kommt der Fehler nur bei:
Code: |
Dim A As Integer
Dim B As Integer
Dim C As Integer
Dim D As Integer
10
Shell "Prog2.exe"
Screen 0
Do
GetMouse A, B, C, D
Locate 1,1: Print A, B, C, D
If D=1 Then Goto 10
Loop
|
PS: "Prog2.exe" ist vollkommen unwichtig, der Fehler tritt bei grundsätzlich jeder Shell-Anweisung auf (auch z. B. Shell "Title Programmfenster"). _________________ Ein richtiger Programmierer muss so richtig faul sein und sich den ganzen Tag mit der Frage beschäftigen, wie man mal wieder etwas einfacher machen kann. |
|
Nach oben |
|
 |
Jojo alter Rang

Anmeldungsdatum: 12.02.2005 Beiträge: 9736 Wohnort: Neben der Festplatte
|
Verfasst am: 01.07.2006, 21:37 Titel: |
|
|
wenn du schon sagst, dass es bei jeder shell anweisung kommt, das ist es eben nicht unwichtig! lass die anweisung weg, dann wird's gehn! außerdem wird der bildschirm durch das screen 0 wohl ständig neu intialisiert, wodruch auch die mausdaten vlt verfläscht werden  _________________ » Die Mathematik wurde geschaffen, um Probleme zu lösen, die es nicht gäbe, wenn die Mathematik nicht erschaffen worden wäre.
 |
|
Nach oben |
|
 |
Michael Frey

Anmeldungsdatum: 18.12.2004 Beiträge: 2577 Wohnort: Schweiz
|
Verfasst am: 01.07.2006, 21:44 Titel: |
|
|
Zitat: | außerdem wird der bildschirm durch das screen 0 wohl ständig neu intialisiert, wodruch auch die mausdaten vlt verfläscht werden |
Eben wird der Bldschirm nicht neu initalisiert ...
Zitat: | Sry, hab bei dem Programmcode nen kleinen Fehler drin. Die Marke 10 muss vor der Shell-Anweisung stehen, ansonsten funktioniert das Programm.
Also demnach kommt der Fehler nur bei: |
Jetzt sehe ich es, das ist ein Bug von Freebasic.
Ich werde es mal den Entwicklern mitteillen.
Code: | Dim A As Integer
Dim B As Integer
Dim C As Integer
Dim D As Integer
screen 0
Do
GetMouse A, B, C, D
Locate 1,1: Print A, B, C, D
If D=1 Then
shell "echo Something"
end if
Loop |
Link folgt.
Edit:
Bug Report @ SF.net _________________ http://de.wikibooks.org/wiki/FreeBasic Jede Hilfe für dieses Buch ist Willkommen!
http://de.wikibooks.org/wiki/FreeBasic:_FAQ FAQ zu Freebasic (im Aufbau, hilfe Willkommen)
Neu mit Syntax Highlight |
|
Nach oben |
|
 |
Michael Frey

Anmeldungsdatum: 18.12.2004 Beiträge: 2577 Wohnort: Schweiz
|
Verfasst am: 06.07.2006, 18:01 Titel: |
|
|
5 Tage her, Bug gefixed in der CVS Version.
Zitat: | Date: 2006-07-06 16:09
Sender: jeffmarshall
Logged In: YES
user_id=1390082
On WinXP, the ENABLE_MOUSE_INPUT bit for the handle was
getting cleared. Fixed in CVS.
Win98 and WinXP now have same behaviour. GetMouse() only
knows the button position when input is received. In the
case of SHELL, the shell'ed program is getting the mouse up
event (or ignored). The calling program won't see the
mouse release until another button is presed, or the mouse
moved.
Best way to handle this is to shell only on mouse down
events. e.g. If ((LastButton and 1) = 0) and ((CurrButton
and 1) <> 0) then shell ... |
_________________ http://de.wikibooks.org/wiki/FreeBasic Jede Hilfe für dieses Buch ist Willkommen!
http://de.wikibooks.org/wiki/FreeBasic:_FAQ FAQ zu Freebasic (im Aufbau, hilfe Willkommen)
Neu mit Syntax Highlight |
|
Nach oben |
|
 |
|
|
Du kannst keine Beiträge in dieses Forum schreiben. Du kannst auf Beiträge in diesem Forum nicht antworten. Du kannst deine Beiträge in diesem Forum nicht bearbeiten. Du kannst deine Beiträge in diesem Forum nicht löschen. Du kannst an Umfragen in diesem Forum nicht mitmachen.
|
|