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:

fbgfx.bi in QB-Kompatibilitätsmodus

 
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: 10.01.2012, 13:52    Titel: fbgfx.bi in QB-Kompatibilitätsmodus Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
nemored



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

BeitragVerfasst am: 10.01.2012, 14:20    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
steini



Anmeldungsdatum: 17.09.2004
Beiträge: 58

BeitragVerfasst am: 10.01.2012, 14:38    Titel: Antworten mit Zitat

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 traurig
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
Benutzer-Profile anzeigen Private Nachricht senden
nemored



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

BeitragVerfasst am: 10.01.2012, 15:16    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
steini



Anmeldungsdatum: 17.09.2004
Beiträge: 58

BeitragVerfasst am: 10.01.2012, 16:34    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
nemored



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

BeitragVerfasst am: 10.01.2012, 16:49    Titel: Antworten mit Zitat

Schreibe mal __SLEEP 1 statt SLEEP 1 happy
_________________
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
steini



Anmeldungsdatum: 17.09.2004
Beiträge: 58

BeitragVerfasst am: 10.01.2012, 16:51    Titel: Antworten mit Zitat

Habe ich gerade mal gemacht - geht trotzdem nicht. Bei dir etwa???
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
nemored



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

BeitragVerfasst am: 10.01.2012, 17:04    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
steini



Anmeldungsdatum: 17.09.2004
Beiträge: 58

BeitragVerfasst am: 10.01.2012, 17:31    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
Cherry



Anmeldungsdatum: 20.06.2007
Beiträge: 249

BeitragVerfasst am: 11.01.2012, 23:32    Titel: Antworten mit Zitat

Was heißt "längere Zeit" genau?

(Übrigens: Wozu nimmst du -lang qb überhaupt? Verwendest du alten QB-Code?)
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
nemored



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

BeitragVerfasst am: 11.01.2012, 23:46    Titel: Antworten mit Zitat

Siehe Anfangspost, letzter Satz. lächeln
_________________
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
Cherry



Anmeldungsdatum: 20.06.2007
Beiträge: 249

BeitragVerfasst am: 12.01.2012, 19:39    Titel: Antworten mit Zitat

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



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

BeitragVerfasst am: 12.01.2012, 20:08    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
steini



Anmeldungsdatum: 17.09.2004
Beiträge: 58

BeitragVerfasst am: 14.01.2012, 01:44    Titel: Antworten mit Zitat

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
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