Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht Das deutsche QBasic- und FreeBASIC-Forum
Für euch erreichbar unter qb-forum.de, fb-forum.de und freebasic-forum.de!
 
FAQFAQ   SuchenSuchen   MitgliederlisteMitgliederliste   BenutzergruppenBenutzergruppen  RegistrierenRegistrieren
ProfilProfil   Einloggen, um private Nachrichten zu lesenEinloggen, um private Nachrichten zu lesen   LoginLogin
Zur Begleitseite des Forums / Chat / Impressum
Aktueller Forenpartner:

Maus und Screen 0

 
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Allgemeine Fragen zu FreeBASIC.
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
Leader4



Anmeldungsdatum: 20.01.2005
Beiträge: 99
Wohnort: Leipzig

BeitragVerfasst am: 01.07.2006, 20:14    Titel: Maus und Screen 0 Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
Michael Frey



Anmeldungsdatum: 18.12.2004
Beiträge: 2577
Wohnort: Schweiz

BeitragVerfasst am: 01.07.2006, 20:42    Titel: Antworten mit Zitat

mit den Augen rollen 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
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Leader4



Anmeldungsdatum: 20.01.2005
Beiträge: 99
Wohnort: Leipzig

BeitragVerfasst am: 01.07.2006, 21:25    Titel: Antworten mit 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:

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
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
Jojo
alter Rang


Anmeldungsdatum: 12.02.2005
Beiträge: 9736
Wohnort: Neben der Festplatte

BeitragVerfasst am: 01.07.2006, 21:37    Titel: Antworten mit Zitat

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 zwinkern
_________________
» Die Mathematik wurde geschaffen, um Probleme zu lösen, die es nicht gäbe, wenn die Mathematik nicht erschaffen worden wäre.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Michael Frey



Anmeldungsdatum: 18.12.2004
Beiträge: 2577
Wohnort: Schweiz

BeitragVerfasst am: 01.07.2006, 21:44    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Michael Frey



Anmeldungsdatum: 18.12.2004
Beiträge: 2577
Wohnort: Schweiz

BeitragVerfasst am: 06.07.2006, 18:01    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Allgemeine Fragen zu FreeBASIC. Alle Zeiten sind GMT + 1 Stunde
Seite 1 von 1

 
Gehe zu:  
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.

 Impressum :: Datenschutz