Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
steini
Anmeldungsdatum: 17.09.2004 Beiträge: 58
|
Verfasst am: 10.01.2012, 13:52 Titel: fbgfx.bi in QB-Kompatibilitätsmodus |
|
|
Hallo, ich versuche verzweifelt, den folgenden Code im QB-Modus zum Laufen zu bringen
Code: | #INCLUDE "fbgfx.bi"
DIM AS FB.EVENT PTR event
event = ALLOCATE(20)
__SCREENRES 640, 480
DO
IF (SCREENEVENT(event)) Then
SELECT CASE event->type
CASE FB.EVENT_MOUSE_BUTTON_RELEASE
IF (event->button = FB.BUTTON_LEFT ) THEN PRINT "released!"
END SELECT
END IF
SLEEP 1
LOOP WHILE INKEY$ = ""
DEALLOCATE event ' reservierten Speicher wieder freigeben |
Nachdem ich in der fbgfx.bi die Ausdrücke union, ushort, uinteger, ubyte mit einem vorangestellten "__" versehen habe, wird in dieser Datei zwar kein Fehler mehr angezeigt, das Programm meckert aber trotzdem:
(Untitled).bas(3) error 14: Expected identifier, found 'FB.EVENT'
DIM AS FB.EVENT PTR event
Könnte mir vielleicht jemand behilflich sein, das zum Laufen zu bringen? Der Code soll in ein altes Programm integriert werden, das nur im qb-Modus läuft. Vielen Dank. |
|
Nach oben |
|
 |
nemored

Anmeldungsdatum: 22.02.2007 Beiträge: 4702 Wohnort: ~/
|
Verfasst am: 10.01.2012, 14:20 Titel: |
|
|
Meckern tut er vermutlich wegen des Punktes in FB.EVENT. Vielleicht klappt es ja mit
Code: | USING FB
DIM AS EVENT PTR event |
edit: USING oder __USING scheint er in -lang qb auch nicht zu mögen. Wenn du aber sowieso schon die fbgfx.bi modifizierst, dann kannst du da auch im Notfall den Namespace herausnehmen - eben damit die Elemente nicht über FB.irgendwas angesprochen werden müssen.
Warum gehen überhaupt Namespaces in -lang qb, wenn USING nicht geht? Komisch ... _________________ Deine Chance beträgt 1:1000. Also musst du folgendes tun: Vergiss die 1000 und konzentriere dich auf die 1. |
|
Nach oben |
|
 |
steini
Anmeldungsdatum: 17.09.2004 Beiträge: 58
|
Verfasst am: 10.01.2012, 14:38 Titel: |
|
|
Wie ich namespaces herausnehme und was das überhaupt ist habe ich ehrlich gesagt keine Ahnung. Ich habe mir das alles nur aus den Beispielcodes zusammengebastelt und gehofft, dass es auch im lang qb funktioniert
Kannst du mir vielleicht behilflich sein? Ich bin ja bereit alle möglichen Dateien zu modifizieren, ich weiß nur leider nicht wie!
Am liebsten wäre mir natürlich, das Benötigte aus der fbgfx.bi direkt ins Programm zu schreiben damit ich die Datei im Originalzustand belassen kann. |
|
Nach oben |
|
 |
nemored

Anmeldungsdatum: 22.02.2007 Beiträge: 4702 Wohnort: ~/
|
Verfasst am: 10.01.2012, 15:16 Titel: |
|
|
NAMESPACE ist dazu da, Namensdopplungen zu vermeiden. Du kannst z. B. einen Namespace "Test" anlegen und darin die Konstante "konstante" verwenden. Außerhalb des Namespace kann sie dann über "Test.konstante" angesprochen werden. Gleichzeitig kannst du aber irgendwo anders "konstante" definieren, ohne dass sich die beiden in die Quere kommen.
Wenn du den Namespace entfernst ( einfach durch Löschen der Zeilen "NAMESPACE FB" und "END NAMESPACE", dann kannst du auf alle dazwischen liegenden Konstanten direkt zugreifen (also z. B. auch auf den UDT "event" statt "FB.event"), dafür dürfen diese Namen dann aber nicht mehr anderweitig verwendet werden. Die Variable darf dann nicht auch noch "event" heißen.
Zitat: | Am liebsten wäre mir natürlich, das Benötigte aus der fbgfx.bi direkt ins Programm zu schreiben damit ich die Datei im Originalzustand belassen kann. |
Das kannst du selbstverständlich auch machen. Du brauchst ja eigentlich nur den UDT event und die verwendeten Konstanten. _________________ Deine Chance beträgt 1:1000. Also musst du folgendes tun: Vergiss die 1000 und konzentriere dich auf die 1. |
|
Nach oben |
|
 |
steini
Anmeldungsdatum: 17.09.2004 Beiträge: 58
|
Verfasst am: 10.01.2012, 16:34 Titel: |
|
|
Danke für die Hilfe!
Dieser Code wird nun fehlerfrei mit -lang qb gestartet, allerdings funktioniert es nun nicht mehr. Das Ereignis Linke Maustaste losgelassen wird nicht mehr angezeigt. Wo liegt der Fehler?
Code: | CONST as integer EVENT2_KEY_PRESS = 1 , _
EVENT2_KEY_RELEASE = 2 , _
EVENT2_KEY_REPEAT = 3 , _
EVENT2_MOUSE_MOVE = 4 , _
EVENT2_MOUSE_BUTTON_PRESS = 5 , _
EVENT2_MOUSE_BUTTON_RELEASE = 6 , _
EVENT2_MOUSE_DOUBLE_CLICK = 7 , _
EVENT2_MOUSE_WHEEL = 8 , _
EVENT2_MOUSE_ENTER = 9 , _
EVENT2_MOUSE_EXIT = 10 , _
EVENT2_WINDOW_GOT_FOCUS = 11 , _
EVENT2_WINDOW_LOST_FOCUS = 12 , _
EVENT2_WINDOW_CLOSE = 13 , _
EVENT2_MOUSE_HWHEEL = 14
type EVENT2 field = 1
type as integer
__union
type
scancode as integer
ascii as integer
end type
type
x as integer
y as integer
dx as integer
dy as integer
end type
button as integer
z as integer
w as integer
end __union
end TYPE
CONST as integer BUTTON_LEFT = &h1 , _
BUTTON_RIGHT = &h2 , _
BUTTON_MIDDLE = &h4 , _
BUTTON_X1 = &h8 , _
BUTTON_X2 = &h10
DIM AS EVENT2 __PTR event3
event3 = __ALLOCATE(20)
__SCREENRES 640, 480
DO
IF (__SCREENEVENT(event3)) Then
SELECT CASE event3->type
CASE EVENT2_MOUSE_BUTTON_RELEASE
IF (event3->button = BUTTON_LEFT ) THEN PRINT "released!"
END SELECT
END IF
SLEEP 1
LOOP while inkey$ = ""
__DEALLOCATE event3 |
|
|
Nach oben |
|
 |
nemored

Anmeldungsdatum: 22.02.2007 Beiträge: 4702 Wohnort: ~/
|
Verfasst am: 10.01.2012, 16:49 Titel: |
|
|
Schreibe mal __SLEEP 1 statt SLEEP 1  _________________ Deine Chance beträgt 1:1000. Also musst du folgendes tun: Vergiss die 1000 und konzentriere dich auf die 1. |
|
Nach oben |
|
 |
steini
Anmeldungsdatum: 17.09.2004 Beiträge: 58
|
Verfasst am: 10.01.2012, 16:51 Titel: |
|
|
Habe ich gerade mal gemacht - geht trotzdem nicht. Bei dir etwa??? |
|
Nach oben |
|
 |
nemored

Anmeldungsdatum: 22.02.2007 Beiträge: 4702 Wohnort: ~/
|
Verfasst am: 10.01.2012, 17:04 Titel: |
|
|
Oh, ich sehe, dass da noch was nicht stimmt. event3->button liefert, egal bei welchem Button, immer den Wert 0. Wenn du das so schreibst
Code: | SELECT CASE event3->type
CASE EVENT2_MOUSE_BUTTON_RELEASE
PRINT "released!"
END SELECT
|
dann funktioniert es, allerdings logischerweise nicht nur beim linken Mausbutton. Scheint mir ein Fehler im Dialekt -lang qb zu sein. _________________ Deine Chance beträgt 1:1000. Also musst du folgendes tun: Vergiss die 1000 und konzentriere dich auf die 1. |
|
Nach oben |
|
 |
steini
Anmeldungsdatum: 17.09.2004 Beiträge: 58
|
Verfasst am: 10.01.2012, 17:31 Titel: |
|
|
Super, ich danke dir ganz herzlich!
Das Problem ist nämlich, dass man mit getmouse nicht in der Lage ist, auf einem Win7 Touchscreen ein kurzes Antippen zu registrieren. Das entsprechende Bit wird komischerweise immer erst gesetzt, wenn man längere Zeit gedrückt hält oder eine Wischbewegung macht. Für Touchscreen-Buchstabeneingaben somit leider unbrauchbar! Mit ScreenEvent kann man zumindest das Loslassen zuverlässig registrieren.
Falls noch jemand einen Weg kennt, einen Druck am Touchscreen UNVERZÜGLICH (also nicht erst beim Lolassen) zurückzumelden, bitte her damit! |
|
Nach oben |
|
 |
Cherry
Anmeldungsdatum: 20.06.2007 Beiträge: 249
|
Verfasst am: 11.01.2012, 23:32 Titel: |
|
|
Was heißt "längere Zeit" genau?
(Übrigens: Wozu nimmst du -lang qb überhaupt? Verwendest du alten QB-Code?) |
|
Nach oben |
|
 |
nemored

Anmeldungsdatum: 22.02.2007 Beiträge: 4702 Wohnort: ~/
|
Verfasst am: 11.01.2012, 23:46 Titel: |
|
|
Siehe Anfangspost, letzter Satz.  _________________ Deine Chance beträgt 1:1000. Also musst du folgendes tun: Vergiss die 1000 und konzentriere dich auf die 1. |
|
Nach oben |
|
 |
Cherry
Anmeldungsdatum: 20.06.2007 Beiträge: 249
|
Verfasst am: 12.01.2012, 19:39 Titel: |
|
|
Aja sorry. Never mind.
Du könntest solchen Problemen in Zukunft aus dem Weg gehen indem du mehrere Module mit verschiedener #Lang-Einstellung zu Objektdateien kompilierst und die Objektdateien dann zusammenlinkst. Müsste gehen.
(Btw, gerade einen kleinen Fehler in FBC gefunden: Mehrere #Lang's werden einfach ignoriert, ohne Fehler aber auch ohne Effekt. Nur das erste gilt.) |
|
Nach oben |
|
 |
nemored

Anmeldungsdatum: 22.02.2007 Beiträge: 4702 Wohnort: ~/
|
Verfasst am: 12.01.2012, 20:08 Titel: |
|
|
Ich glaube nicht, dass das ein Fehler ist. Mitten im Quelltext den Dialekt zu wechseln wirft sicher eine Menge Probleme auf. Eine Warnung bei mehrfacher Verwendung wäre aber vermutlich wirklich nicht schlecht. _________________ Deine Chance beträgt 1:1000. Also musst du folgendes tun: Vergiss die 1000 und konzentriere dich auf die 1. |
|
Nach oben |
|
 |
steini
Anmeldungsdatum: 17.09.2004 Beiträge: 58
|
Verfasst am: 14.01.2012, 01:44 Titel: |
|
|
Ja, mehrere #lang's wären eine feine Sache, aber ich habe es dank nemoreds Hilfe nun auch mit etwas Bastelei hinbekommen. Für die Sache mit dem touch suche ich allerdings immer noch nach einer Lösung. Habe dazu einen neuen thread aufgemacht, da das Problem weder etwas mit lang qb boch mit dem thread hier zu tun hat. |
|
Nach oben |
|
 |
|