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:

Touchscreen-Berührung registrieren

 
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
steini



Anmeldungsdatum: 17.09.2004
Beiträge: 58

BeitragVerfasst am: 14.01.2012, 01:51    Titel: Touchscreen-Berührung registrieren Antworten mit Zitat

Hallo allerseits! Ich suche nach einer Möglichkeit, den Zeitpunkt des Berührens eines Touchscreens, der mit der Windows7-eigenen Fingereingabe bedient wird, zu registrieren.

Zum Stand der Dinge:

Naheliegend wäre es, Getmouse oder ScreenEvent zu verwenden und das Drücken der linken Maustaste abzufragen. Lässt man jedoch das Demoprogramm zu Getmouse laufen, stellt man schnell fest, dass eine kurze Berührung in keinster Weise registriert wird:

Code:
'Grafikmodus setzen und Schleife beginnen
Dim As Integer x, y, buttons, Ergebnis

' Videomodus 320x200x8 setzen
Screen 13

Do
  ' Lade Mauskoordinaten ohne Mausrad.
    Ergebnis = GetMouse (x, y, , buttons)
    Locate 1, 1
    If Ergebnis <> 0 Then
      Print "Maus nicht vorhanden/nicht im Fenster"
    Else
      Print Using "Maus-Position: ###:###  Buttons: "; x; y;
      If buttons And 1 Then Print "L";
      If buttons And 2 Then Print "R";
      If buttons And 4 Then Print "M";
      If buttons And 8 Then Print "X1";
      If buttons And 16 Then Print "X2";
      Print Space(5)
    End If
Loop While Inkey = ""
End


Mit ScreenEvent wird zumindest das Loslassen unverzüglich ausgegeben.
In beiden Fällen wird das Drücken der linken Maustaste nur ausgegeben, wenn man

a) den touch solange (und noch ca. 1 Sek. länger) gedrückt hält, bis die in Windows für den Rechtsklick eingestellte Zeitspanne abgelaufen ist (der Kreis sich um den Cursor ganz gefüllt hat) oder
b) eine Wischbewegung durchführt.

Alles in allem ein für mich nicht nachvollziehbares Verhalten. Und eine Möglichkeit, den Druck des Touchscreens UNVERZÜGLICH (also nicht erst beim Loslassen!) zurückzumelden, sehe ich auch nicht. Kann jemand behilflich sein?
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
MisterD



Anmeldungsdatum: 10.09.2004
Beiträge: 3071
Wohnort: bei Darmstadt

BeitragVerfasst am: 14.01.2012, 12:41    Titel: Antworten mit Zitat

die getmouse API ist nicht auf touchscreens ausgelegt. Dementsprechend wird sie von windows so gefüttert, dass alles wie eine normale maus aussieht. du kannst vermutlich mit tappen und dann direkt nochmal finger drauf und ziehen auch eine "bewegung mit maus gedrückt" machen. Letztendlich ist das dafür da, dass anwendungen, die normalerweise ne normale maus benutzen (wovon windows ausgehen muss wenn getmouse nur für klassische mäuse ausgelegt ist), noch wie erwartet funktionieren und sich nicht plötzlich auf nem touchscreen völlig anders verhalten.

ergo: wenn du ordentlich mit touchscreen arbeiten willst wirst du dir ne passende lib irgendwo suchen müssen
_________________
"It is practically impossible to teach good programming to students that have had a prior exposure to BASIC: as potential programmers they are mentally mutilated beyond hope of regeneration."
Edsger W. Dijkstra
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
steini



Anmeldungsdatum: 17.09.2004
Beiträge: 58

BeitragVerfasst am: 14.01.2012, 23:09    Titel: Antworten mit Zitat

Schade. Ich hatte gehofft, Freebasic hält da von Hause aus eine Lösung parat. Die Touchscreen-Auswertung wird ja immer bedeutsamer heutzutage bei der Menge an Geräten, die mitlerweile einen haben...
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Flo
aka kleiner_hacker


Anmeldungsdatum: 23.06.2006
Beiträge: 1210

BeitragVerfasst am: 14.01.2012, 23:49    Titel: Antworten mit Zitat

du könntest ne lib schreiben bzw einen wrapper für eine existierende, ich denke mal dass die fb-devs das dankend annehmen werden zwinkern
_________________
MFG
Flo

Satoru Iwata: Wer Spaß am Spielen hat, fragt nicht nach Grafik.

zum korrekten Verstaendnis meiner Beitraege ist die regelmaessige Wartung des Ironiedetektors unerlaesslich.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Jojo
alter Rang


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

BeitragVerfasst am: 15.01.2012, 01:14    Titel: Antworten mit Zitat

steini hat Folgendes geschrieben:
Schade. Ich hatte gehofft, Freebasic hält da von Hause aus eine Lösung parat. Die Touchscreen-Auswertung wird ja immer bedeutsamer heutzutage bei der Menge an Geräten, die mitlerweile einen haben...

Eine Programmiersprache sollte so etwas absolut nicht von Haus aus (also in Form von reservierten Schlüsselworten) bieten. Das ist kein Bestandteil einer Sprache, sondern sollte als Bibliothek realisiert werden (was bei FreeBASIC bei geschätzt 3/4 der Schlüsselwörter leider falsch gemacht wurde). Der Vorteil einer Bibliothek ist üblicherweise auch, dass sie von anderen Compilern anderer Programmiersprachen wiederverwendet werden kann.
_________________
» 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
steini



Anmeldungsdatum: 17.09.2004
Beiträge: 58

BeitragVerfasst am: 15.01.2012, 18:58    Titel: Antworten mit Zitat

Sehe ich etwas anders. Ein Touchscreen ist mitlerweile ein Standardeingabegerät, wie Maus und Tastatur auch. Stell dir mal vor, du müsstest dir eine Bibliothek selber schreiben, um einen Tastendruck auf der Tastatur abzufragen...
Außerdem möchte man für eine Programmiersprache ja auch neue Leute begeistern, da sollten solche basics schon ohne Umwege oder spezielles knowhow verfügbar sein. Ich zum Beispiel habe jetzt keinen Schimmer, wie ich das machen soll und programmiere nun auch nicht erst seit gestern. Ich bin sozusagen der lebende dumme Beweis zwinkern
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
nemored



Anmeldungsdatum: 22.02.2007
Beiträge: 4702
Wohnort: ~/

BeitragVerfasst am: 15.01.2012, 19:17    Titel: Antworten mit Zitat

Du musst dir die Bibliothek auch nicht selbst schreiben, sondern nur eine bestehende nutzen. Wenn FreeBASIC das selbst einbaut, hast du nämlich genau das Problem, dass jeder (also jeder Compiler-Entwickler) seine Bibliothek selbst entwickeln muss. Wenn sich dagegen ein paar kompetente Leute um die Entwicklung dieser Bibliothek kümmern und diese dann von den verschiedenen Programmiersprachen eingebaut werden kann, ist das viel effektiver.
_________________
Deine Chance beträgt 1:1000. Also musst du folgendes tun: Vergiss die 1000 und konzentriere dich auf die 1.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
volta



Anmeldungsdatum: 04.05.2005
Beiträge: 1876
Wohnort: D59192

BeitragVerfasst am: 15.01.2012, 20:39    Titel: Antworten mit Zitat

Hi,
genau wie bei Tastatur und Mause gibt es für verschiedene Typen von Touchscreens entsprechende Treiber, die Aktionen dieser Geräte abfragbar machen. Für Touchscreens werden ,zumindest für die Einfinger-Aktionen, die Ergebnisse auf die Mausfunktionen umgeleitet.
Ab Windows7 gibt es die Touch Api, scheint mir aber sehr kompliziert mit den Augen rollen
http://www.codeproject.com/KB/winsdk/www7.aspx#3
http://msdn.microsoft.com/en-us/library/windows/desktop/dd317334.aspx
http://msdn.microsoft.com/en-us/library/windows/desktop/dd371581.aspx

Ob dort aber beim Druck auf den Touchscreen UNVERZÜGLICH reagiert wird?
_________________
Warnung an Choleriker:
Dieser Beitrag kann Spuren von Ironie & Sarkasmus enthalten.
Zu Risiken & Nebenwirkungen fragen Sie Ihren Therapeuten oder Psychiater.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Jojo
alter Rang


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

BeitragVerfasst am: 15.01.2012, 22:23    Titel: Antworten mit Zitat

Wie nemored schon sagt, ist es von Vorteil, eine Bibliothek zu schreiben, die dann mehrere nutzen können. Stell dir einfach mal vor, man hätte zu einer Sprache wie C vor 30 Jahren Befehle zum Laden von Dateien von einer Datasette hinzugefügt - "weil das ja damals so verbreitet war". Noch heute wären diese Befehle dann wohl im Sprachstandard enthalten und jeder moderne C-Compiler müsste diese Befehle unterstützen - und jetzt denk mal darüber nach, wie verbreitet die Datasette noch ist. durchgeknallt Selbiges gilt z.B. für die Lichtgriffel-Befehle in QBasic - wer hat heute noch einen Lichtgriffel? Niemand, und trotzdem gehören die Befehle zum Sprachstandard QBasic. Dabei wäre ein einfaches '$INCLUDE "lightpen.bi" oder so doch schon damals nicht zu viel verlangt gewesen für einen QBasic-Programmierer, der unbedingt den Lichtgriffel ansprechen wollte...
_________________
» 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
steini



Anmeldungsdatum: 17.09.2004
Beiträge: 58

BeitragVerfasst am: 16.01.2012, 11:15    Titel: Antworten mit Zitat

WM_TOUCH scheint wohl das magische Wort zu sein. Ist aber auch mir eine Nummer zu hoch und es lohnt für mein Vorhaben auch nicht, sich näher damit zu beschäftigen.

Deshalb hier nun ein Trick mittels ScreenEvent für alle, die es sich einfacher machen wollen:

Bei jeder Berührung des Touch wird auch immer eine neue Mauskoordinate ausgegeben (FB.EVENT_MOUSE_MOVE). Dieses Event kann man als Klick-Event missbrauchen. Man muss das Event dann halt nur sperren, bis ein release (FB.EVENT_MOUSE_BUTTON_RELEASE) festgestellt wurde, denn man bewegt den Finger ja minimal, während man drückt.
Leider wird auch die Mauskoordinate leicht verzögert ausgegeben, aber so minimal, damit kann ich leben. Danke für eure Hilfe.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
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