 |
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 |
steini
Anmeldungsdatum: 17.09.2004 Beiträge: 58
|
Verfasst am: 14.01.2012, 01:51 Titel: Touchscreen-Berührung registrieren |
|
|
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 |
|
 |
MisterD

Anmeldungsdatum: 10.09.2004 Beiträge: 3071 Wohnort: bei Darmstadt
|
Verfasst am: 14.01.2012, 12:41 Titel: |
|
|
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 |
|
 |
steini
Anmeldungsdatum: 17.09.2004 Beiträge: 58
|
Verfasst am: 14.01.2012, 23:09 Titel: |
|
|
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 |
|
 |
Flo aka kleiner_hacker
Anmeldungsdatum: 23.06.2006 Beiträge: 1210
|
Verfasst am: 14.01.2012, 23:49 Titel: |
|
|
du könntest ne lib schreiben bzw einen wrapper für eine existierende, ich denke mal dass die fb-devs das dankend annehmen werden  _________________ 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 |
|
 |
Jojo alter Rang

Anmeldungsdatum: 12.02.2005 Beiträge: 9736 Wohnort: Neben der Festplatte
|
Verfasst am: 15.01.2012, 01:14 Titel: |
|
|
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 |
|
 |
steini
Anmeldungsdatum: 17.09.2004 Beiträge: 58
|
Verfasst am: 15.01.2012, 18:58 Titel: |
|
|
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  |
|
Nach oben |
|
 |
nemored

Anmeldungsdatum: 22.02.2007 Beiträge: 4702 Wohnort: ~/
|
Verfasst am: 15.01.2012, 19:17 Titel: |
|
|
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 |
|
 |
volta
Anmeldungsdatum: 04.05.2005 Beiträge: 1876 Wohnort: D59192
|
|
Nach oben |
|
 |
Jojo alter Rang

Anmeldungsdatum: 12.02.2005 Beiträge: 9736 Wohnort: Neben der Festplatte
|
Verfasst am: 15.01.2012, 22:23 Titel: |
|
|
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. 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 |
|
 |
steini
Anmeldungsdatum: 17.09.2004 Beiträge: 58
|
Verfasst am: 16.01.2012, 11:15 Titel: |
|
|
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 |
|
 |
|
|
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.
|
|