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:

Probleme bei Konvertierung von QB4.5 zu FB
Gehe zu Seite Zurück  1, 2, 3, 4  Weiter
 
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
St_W



Anmeldungsdatum: 22.07.2007
Beiträge: 957
Wohnort: Austria

BeitragVerfasst am: 26.11.2013, 12:29    Titel: Antworten mit Zitat

Der Vollständigkeit halber: ich hab den von Sebastian verlinkten C/C++ Code in ein kleines Beispiel für FreeBasic umgewandelt und dieses hochgeladen: http://www.freebasic-portal.de/porticula/windows-console-window-1671.html
Natürlich ist die Verwendung von WIDTH aufgrund u.a. der Plattformunabhängigkeit immer wenn möglich vozuziehen.
_________________
Aktuelle FreeBasic Builds, Projekte, Code-Snippets unter http://users.freebasic-portal.de/stw/
http://www.mv-lacken.at Musikverein Lacken (MV Lacken)
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
TimesChange



Anmeldungsdatum: 20.11.2013
Beiträge: 85

BeitragVerfasst am: 26.11.2013, 17:44    Titel: Antworten mit Zitat

@Grindstone: Danke, das hat funktioniert.

Kleiner Hinweis für andere, die das hier lesen: Man muss bei Verwendung von __SCREENRES mit dem Parameter -s gui compilieren, damit kein weiteres, leeres DOS-Fenster im Hintergrund erscheint.

@st_W: Auch wenn ich hier natürlich WIDTH verwende, ist deine Umwandlung interessant, um eine Umsetzung von C++ auf Freebasic zu sehen. Ich hätte vermutlich ziemlich lange gebraucht, um da was brauchbares zu erzeugen zwinkern

Viele Grüße
Rainer
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Sebastian
Administrator


Anmeldungsdatum: 10.09.2004
Beiträge: 5969
Wohnort: Deutschland

BeitragVerfasst am: 26.11.2013, 18:04    Titel: Konsolenfenster mit -s gui vermeiden Antworten mit Zitat

TimesChange hat Folgendes geschrieben:
Kleiner Hinweis für andere, die das hier lesen: Man muss bei Verwendung von __SCREENRES mit dem Parameter -s gui compilieren, damit kein weiteres, leeres DOS-Fenster im Hintergrund erscheint.

Siehe auch: http://www.freebasic-portal.de/freebasic-faq/dos-fenster-im-hintergrund-beseitigen-2.html lächeln
_________________

Die gefährlichsten Familienclans | Opas Leistung muss sich wieder lohnen - für 6 bis 10 Generationen!
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
nemored



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

BeitragVerfasst am: 26.11.2013, 19:48    Titel: Antworten mit Zitat

Zitat:
@TimesChange: Nicht, wenn du das Fenster mit ScreenRes erzeugt hast. Dann schreibt Windows nur Chr(255,107) in den Tastaturpuffer. Ob das ein Bug oder ein Feature ist, weiss ich nicht, aber es ist so.

Das ist durchaus als Feature gedacht. Beim Beenden des Programms mittels Schließen-Button bzw. Alt+F4 kann man in Ruhe aufräumen, ohne dass das Betriebssystem vorher das Programm abschießt. Das heißt natürlich auch, dass sich der Programmierer auch selbst darum kümmern muss.
_________________
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
TimesChange



Anmeldungsdatum: 20.11.2013
Beiträge: 85

BeitragVerfasst am: 27.11.2013, 02:11    Titel: Antworten mit Zitat

Die Fragen gehen nicht aus...


Kurzfassung Aufgabenstellung: Tastaturabfrage inkl. Alt_Taste

Langfassung:
In zweiten des aus QB4.5 zu konvertierenden Programms kann ich mit den Cursortasten in einer alphabetisch geordneten Namensliste blättern, und mit "ALT-" + Buchstabe(n) direkt zum ersten passenden Namen springen. Wenn ich "Meier" suche, halte ich also die Alt-Taste gedrückt, und drücke "m" -> Programm springt zum ersten Eintrag der mit "M" beginnt. "e" -> "Me" usw.
In QB hatte ich damals eine Function namens getkey, die mittels mehrere Aufrufe von Interrupt &H16 direkt den Tastaturspeicher abgefragt hat.
Int-Aufruf geht in FB nicht mehr (vielleicht auch besser so?), also brauche ich eine andere Lösung.

Erster Gedanke war MultiKey. Hat aber den Nachteil, dass ich nur den Zustand einer einzelnen Taste abfragen kann.
Also versucht: Multikey, um die Alt-Taste abzufragen, gefolgt von Inkey oder Getkey, um die zusammen mit Alt-gedrückte Taste (oder auch ohne "Alt") zu ermitteln:

Code:
MK=__Multikey(&H38)
HZ=__Getkey


Hier erkenne ich aber nicht, ob die ALT-Taste durchgehend gedrückt wurde, oder z.B. zwischen "m" und "e" losgelassen wurde (im ersten Fall soll nach "me" gesucht werden, im zweiten Fall soll eine neue Suche nach Namen beginnend mit "e" erfolgen.

Hat jemand eine Idee, wie ich hier weiterkomme?

Viele Grüße
Rainer



PS: Ist es ok, wenn ich meine Fragen zu unterschiedlichen Problemen alle hier stelle, oder soll ich mir künftig lieber einen jeweils passenden, bestehenden Thread (soweit vorhanden) suchen?
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
grindstone



Anmeldungsdatum: 03.10.2010
Beiträge: 1280
Wohnort: Ruhrpott

BeitragVerfasst am: 27.11.2013, 08:49    Titel: Antworten mit Zitat

Mit der WinAPI-Funktion GetKeyState(nVirtKey) kannst du den Zustand jeder Taste abfragen. nVirtKey ist dabei der Tastencode, und der Rückgabewert der Funktion vom Typ Byte enthält die Meldung über den Zustand der Taste. Ein gesetztes Bit 7 (MSB) bedeutet "Taste ist gedrückt", und Bit 0 (LSB) wird bei jedem Tastendruck umgeschaltet.

Mit diesem kleinen Programm
Code:
#Include "windows.bi"
Dim As Integer m
Dim As Byte k
Do
   Locate 1,1
   For m = 0 To 255
    k = GetKeyState(m)
    If k < 0 Then
       Print m;"(";k;")";         
    EndIf
   Next
   Print "                                      "
Loop
kannst du den Tastaturcode jeder Taste herausfinden, und du kannst dir sogar aussuchen, ob du bei "Alt", "Ctrl", "Shift" etc. zwischen rechter und linker Taste unterscheiden möchtest.

Gruß
grindstone
_________________
For ein halbes Jahr wuste ich nich mahl wie man Proggramira schreibt. Jetzt bin ich einen!
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
Sebastian
Administrator


Anmeldungsdatum: 10.09.2004
Beiträge: 5969
Wohnort: Deutschland

BeitragVerfasst am: 28.11.2013, 18:04    Titel: Antworten mit Zitat

TimesChange hat Folgendes geschrieben:
PS: Ist es ok, wenn ich meine Fragen zu unterschiedlichen Problemen alle hier stelle, oder soll ich mir künftig lieber einen jeweils passenden, bestehenden Thread (soweit vorhanden) suchen?

Für jedes separate, inhaltlich abgrenzbare Thema bitte einen separaten Thread mit aussagekräftigem Titel erstellen. Sonst ist es später sehr schwer für andere Nutzer mit einem ähnlichen Problem, die bereits einmal diskutierten Lösungen zu finden. Ein guter Thread-Titel wäre zum Beispiel "CIRCLE-Befehl in Verbindung mit SCREENLOCK", ein schlechter wäre "Problem mit Programm". zwinkern
_________________

Die gefährlichsten Familienclans | Opas Leistung muss sich wieder lohnen - für 6 bis 10 Generationen!
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
TimesChange



Anmeldungsdatum: 20.11.2013
Beiträge: 85

BeitragVerfasst am: 28.11.2013, 18:09    Titel: Antworten mit Zitat

Hallo Grindstone,

danke für den Tipp mit GetKeyState.
Jetzt muss ich mir zunächst mal ansehen, was genau meine alte Routine gemacht hat, und dann versuchen das mit GetKeyState nachzubilden.

GetKeyState funktioniert zwar für die Abfrage des Tatstaturstatus, aber gib es in FB tatsächlich keinen Weg, direkt die Tastatur nach dem Wert der gedrückten Tasten abzufragen (wie Int &H16), ohne alle 255 Werte in einer Schleife einzeln zu prüfen??

Und noch eine weitere Frage vorab:
Ich habe Probleme, wenn ich in der "-lang qb" Einstellung windows.bi einbinden will. Gibt es da einen anderen Ausweg, als mein gesamtes Programm auf -fb umzuschreiben?

Viele Grüße
Rainer

@Sebastian: Deine Antwort habe ich gerade erst gelesen. Eventuelle lächeln weitere Fragen zu neuen Problemen stelle ich dann gesondert.
Die Eingabe-Problematik (Alt-Taste) können wir hier noch weiterführen?
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
arduno



Anmeldungsdatum: 12.05.2011
Beiträge: 252

BeitragVerfasst am: 29.11.2013, 00:35    Titel: Antworten mit Zitat

.....Es gibt leider gar keinen Interpreter, dem man zur Ausführungszeit in die Karten gucken.....

Jammer nicht, dann nimmst du einfach "QB64" : http://www.qb64.net/forum/

Dann ist dein Problem gelöst, wenn du mit Freebasic als ASM-Code nicht klar kommst......
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
arduno



Anmeldungsdatum: 12.05.2011
Beiträge: 252

BeitragVerfasst am: 29.11.2013, 00:36    Titel: Antworten mit Zitat

.....Und noch eine weitere Frage vorab:
Ich habe Probleme, wenn ich in der "-lang qb" Einstellung windows.bi einbinden will. Gibt es da einen anderen Ausweg, als mein gesamtes Programm auf -fb umzuschreiben? .....

Du bist eine faule Socke.....
lächeln
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Sebastian
Administrator


Anmeldungsdatum: 10.09.2004
Beiträge: 5969
Wohnort: Deutschland

BeitragVerfasst am: 29.11.2013, 00:53    Titel: Antworten mit Zitat

TimesChange hat Folgendes geschrieben:
@Sebastian: Deine Antwort habe ich gerade erst gelesen. Eventuelle lächeln weitere Fragen zu neuen Problemen stelle ich dann gesondert.

Gerne! Wenn wir können, versuchen wir hier immer gern, weiterzuhelfen.

TimesChange hat Folgendes geschrieben:
Die Eingabe-Problematik (Alt-Taste) können wir hier noch weiterführen?

Na klar, das ist ja hier kein Erbsenzählerforum. zwinkern
_________________

Die gefährlichsten Familienclans | Opas Leistung muss sich wieder lohnen - für 6 bis 10 Generationen!
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
TimesChange



Anmeldungsdatum: 20.11.2013
Beiträge: 85

BeitragVerfasst am: 29.11.2013, 00:57    Titel: Antworten mit Zitat

arduno hat Folgendes geschrieben:
...Du bist eine faule Socke.....
lächeln


Würde ich halbwegs gelten lassen, wenn es keine Möglichkeit gibt, GetKeyState mit -lang qb Einstellung zu benutzen (oder anders den Tastaturstatus abzufragen).
Wenn es aber eine Möglichkeit gibt, die ich nur noch nicht kenne, wäre ich eine dumme Socke, wenn ich das ganze Programm deswegen umstricken würde zwinkern

Grüße
Rainer
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
grindstone



Anmeldungsdatum: 03.10.2010
Beiträge: 1280
Wohnort: Ruhrpott

BeitragVerfasst am: 29.11.2013, 11:35    Titel: Antworten mit Zitat

Hallo TimesChange!

TimesChange hat Folgendes geschrieben:
...wäre ich eine dumme Socke, wenn ich das ganze Programm deswegen umstricken würde
Aus eigener Erfahrung kann ich dir sagen, daß du deine Programme früher oder später doch umschreiben wirst (zumindest, wenn du sie regelmäßig benutzt), weil freeBasic gegenüber QB so viel mehr Möglichkeiten bietet, daß sich die Mühe lohnt. Und sooo viel Arbeit ist es nun auch wieder nicht, das aufwendigste ist die Entfernung der Suffixe, und das lässt sich sehr bequem mit Suchen und Ersetzen erledigen (Trotzdem: Sicherungskopie nicht vergessen!).

Gruß
grindstone
_________________
For ein halbes Jahr wuste ich nich mahl wie man Proggramira schreibt. Jetzt bin ich einen!
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
St_W



Anmeldungsdatum: 22.07.2007
Beiträge: 957
Wohnort: Austria

BeitragVerfasst am: 29.11.2013, 13:39    Titel: Antworten mit Zitat

TimesChange hat Folgendes geschrieben:
Ich habe Probleme, wenn ich in der "-lang qb" Einstellung windows.bi einbinden will. Gibt es da einen anderen Ausweg, als mein gesamtes Programm auf -fb umzuschreiben?


Die windows.bi kannst du nicht direkt einbinden, da darin sehr viele sytaktische konstrukte verwendet werden, die es in "lang qb" so nicht gibt. Allerdings lässt sich der Inhalt sehr wohl so umschreiben, sodass es im qb modus läuft. Ein kleines Beispiel für GetKeyState:

Die Funktion ist in winuser.bi wie folgt definiert:
Code:
extern "windows" lib "user32"
declare function GetKeyState (byval as integer) as SHORT
End Extern


Den "extern" Block gibt es im qb modus nicht, hier muss man die Infos direkt bei allen declares angeben. Integer soll 32 bits groß sein, ist im QB modus allerdings nur 16 bits groß, muss daher durch z.B. Long ersetzt werden. Short existiert nicht im QB modus und muss über den alias "__Short" referenziert werden. Das ganze schaut dann wie folgt aus:
Code:
Declare Function GetKeyState StdCall Lib "user32" Alias "GetKeyState" (byval as LONG) as __SHORT


Ein kleines Verwendungsbeispiel:
Code:
#Lang "qb"

#Define VK_LCONTROL &hA2

Declare Function GetKeyState StdCall Lib "user32" Alias "GetKeyState" (byval as LONG) as __SHORT

Dim keyState As Integer
While InKey$ = ""
   keyState = GetKeyState(VK_LCONTROL)
   Print "Toggle:"; keyState And 1; ", Pressed:"; (keyState __Shr 15) And 1
   __Sleep 100
Wend

Die VirtualKey Codes findest du z.B. auf msdn.microsoft.com/en-us/library/windows/desktop/dd375731.aspx
_________________
Aktuelle FreeBasic Builds, Projekte, Code-Snippets unter http://users.freebasic-portal.de/stw/
http://www.mv-lacken.at Musikverein Lacken (MV Lacken)
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
TimesChange



Anmeldungsdatum: 20.11.2013
Beiträge: 85

BeitragVerfasst am: 29.11.2013, 18:13    Titel: Antworten mit Zitat

St_W hat Folgendes geschrieben:
... Allerdings lässt sich der Inhalt sehr wohl so umschreiben, sodass es im qb modus läuft. Ein kleines Beispiel für GetKeyState:...


Das sieht schon mal sehr hilfreich aus - Danke.
Damit sollte ich eigentlich weiterkommen.


@grindstone: Machbar ist es zweifellos. Aber außer den Suffixen muss ich mich dann noch mit den unterschiedlich gehandhabten Datentypen auseinander setzen wie Integer mit 32 Byte in FB und 16 Byte in QB. Da sehe ich auch nicht auf den ersten Blick, wo der Unterschied Probleme macht oder nicht.
Also vorerst lieber faule Socke zwinkern
Und wenn ich dann mal viel Zeit habe ...

Viele Grüße
Rainer
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
TimesChange



Anmeldungsdatum: 20.11.2013
Beiträge: 85

BeitragVerfasst am: 01.12.2013, 01:59    Titel: Antworten mit Zitat

Analog zu obigem Beispiel mit GetKeyState habe ich versucht, die Funktion GetKeyboardState einzubinden, die mir alle virtuellen Keycodes "in einem Rutsch" liefern sollte (ob das dann eleganter ist, als eine Schleife mit GetKeyState von 0 bis 255 durchlaufen zu lassen, sei mal dahingestellt).

Das erste Problem ist eine Fehlermeldung #2 (Passing pointer to scalar, at parameter 1 of GETKEYBOARDSTATE()).

Nicht wissend, was mir das sagen soll, habe ich dies vorerst guten Mutes ignoriert zwinkern

Möglicherweise rührt mein 2. Problem ja aus dem Ignorieren des ersten her:

Nachfolgendes Miniprogramm zu Testzwecken soll solange die virtuellen Keys auslesen, bis die Taste "A" (virtueller Key &h41) gedrückt wird.
Innerhalb der Schleife wird abgefragt, ob eine der Tasten A-Z gedrückt ist, und ggf. eine Meldung ausgegeben.


Code:

#Lang "qb"

Declare Function GetKeyboardState StdCall Lib "user32" Alias "GetKeyboardState" (byval as LONG) as __SHORT

DIM kb (0 to 255) as __uByte
DIM P as __Byte __Pointer
Dim Z as String
Dim A, I as Integer

P = @KB(0)
Z = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
Do
  A= GetKeyboardState (P)
  For i=&H41 to &H5a
    if kb(i)>0 then  ' Taste gedrückt
       Print "i ";i; "   kb(i)"; kb(i); "  Zeichen: ";MID$(Z, i-&H41+1,1)
    endif
    Sleep 1,1
  next i 

Loop until kb(&h41)<>0

Print "Ende mit bel. Taste..."
Sleep


Das Ergebnis der Bildschirmausgabe (ohne irgendeine Taste zu drücken) sieht bei mir so aus:

i 65 kb(i)1 Zeichen: A
i 68 kb(i)1 Zeichen: D
i 69 kb(i)1 Zeichen: E
i 71 kb(i)1 Zeichen: G
i 78 kb(i)1 Zeichen: N
i 80 kb(i)1 Zeichen: P
i 82 kb(i)1 Zeichen: R
i 85 kb(i)1 Zeichen: U
i 86 kb(i)1 Zeichen: V
i 89 kb(i)1 Zeichen: Y
Ende mit bel. Taste...
[/color]

Kann mich jemand auf den Trichter bringen?

Viele Grüße
Rainer
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
St_W



Anmeldungsdatum: 22.07.2007
Beiträge: 957
Wohnort: Austria

BeitragVerfasst am: 01.12.2013, 14:45    Titel: Antworten mit Zitat

Zum ersten Problem:
Die Fehlermeldung sagt dir, dass du einen Pointer an die Funktion übergibst, obwohl die Funktion keinen Pointer erwartet. Dies kommt daher, dass du die Funktion mit einen LONG Parameter definiert hast. Besser wäre da wohl __ubyte __pointer gewesen, dann fällt auch diese Fehlermeldung weg. Auswirkung auf die Funktionalität des Programms hat dies jedoch keine, da LONG genauso wie ein beliebiger Pointer jeweils eine 32-Bit Zahl sind (also gleich groß).


Zum zweiten Problem:
Hierbei bin ich mir selbst nicht ganz sicher, da ich mit der GetKeyboardState Funktion nicht vertraut bin. Der MSDN Library ist aber folgendes zu entnehmen:
MSDN hat Folgendes geschrieben:
An application can call this function to retrieve the current status of all the virtual keys. The status changes as a thread removes keyboard messages from its message queue. The status does not change as keyboard messages are posted to the thread's message queue, nor does it change as keyboard messages are posted to or retrieved from message queues of other threads. (Exception: Threads that are connected through AttachThreadInput share the same keyboard state.)

Dies bedeutet, dass die Funktion keine aktualisierten Keyboard States liefern kann, wenn im aktuellen Thread keine Window Messages (daraunter Keyboard Messages) abgearbeitet werden. Ich kenn die GFXlib von FreeBasic jetzt zu ungenau, um dir sagen zu könnten, ob die Message Queue in einem eigenen Thread abgearbeitet wird - wenn dies jedoch der Fall ist wäre das unerwünschte Ergebnis erklärbar.


Ich verstehe allerdings nicht ganz, warum du nicht die in FreeBasic eingebauten Funktionen zur Abfrage der Tastatureingaben, wie INKEY oder MULTIKEY oder ScreenEvents, verwenden willst.
_________________
Aktuelle FreeBasic Builds, Projekte, Code-Snippets unter http://users.freebasic-portal.de/stw/
http://www.mv-lacken.at Musikverein Lacken (MV Lacken)
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
TimesChange



Anmeldungsdatum: 20.11.2013
Beiträge: 85

BeitragVerfasst am: 01.12.2013, 15:39    Titel: Antworten mit Zitat

Danke für die Infos.

St_W hat Folgendes geschrieben:
...Ich verstehe allerdings nicht ganz, warum du nicht die in FreeBasic eingebauten Funktionen zur Abfrage der Tastatureingaben, wie INKEY oder MULTIKEY oder ScreenEvents, verwenden willst.


Mit INKEY kann ich meiner Meinung nach nicht das gewünschte Ziel (s.u.) erreichen. MULTIKEY hat mir zunächst nicht "gefallen", da ich dort für jede einzelne Taste abfragen muss, ob sie gedrückt wurde, und nicht wie beim Interruptaufruf den Status der zuletzt gedrückten Taste bekomme.
Daher der Versuch mit GETKEYBOARDSTATE.
SCREENEVENT war mir als FB-Neuling nicht bekannt. Sieht für meine Zwecke auf den ersten Blick gut aus, erfordert aber wiederum eine Umsetzung des Codes von QB auf FB.

Aber du hast schon recht, wahrscheinlich muss ich versuche, die Eingabefunktionen mit MULTIKEY oder notfalls SCREENEVENT umzusetzen.

Was die Eingaberoutine tun soll:
Ich blättere in einer Adressenliste. Meine Eingabefunktion muss mir also folgende Infos liefern:
- diverse Pfeiltasten (rauf, runter, Pos1,...) zurückliefern, teils in Verbindung mit STRG-Taste (z.B. STRG + PFeil ab -> blättert mehrere Seiten runter).
- Speziell belegte Tasten wir "Space", "Enter", "ESC", "F1", "F5"...
- Einige Tasten in Kombination mit STRG (z.B. STRG-E für "Export"
Bis dahin alles auch mit INKEY lösbar.

Was mir Schwierigkeiten macht ist folgendes:
Durch Drücken und Halten der ALT-Taste, gefolgt von Buchstabentasten, suche ich einen bestimmten Eintrag. Wenn ich also ALT gedrückt halte, und danach "M" "E" "I" "E" drücke, springt das Programm zum ersten Eintrag der mit "MEIE" beginnt.
Dazu muss ich die Rückmeldung bekommen, ob die ALT-Taste durchgehend (!) gedrückt wurde. Das bekomme ich mit INKEY nicht hin.

Das Ganze würde mir wohl leichter fallen, wenn ich besser verstehen würde, was ich damals in QB warum und wie programmiert habe zwinkern
Eine ausführliche Kommentierung ist schon was wert...

Viele Grüße
Rainer
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
TimesChange



Anmeldungsdatum: 20.11.2013
Beiträge: 85

BeitragVerfasst am: 02.12.2013, 00:47    Titel: Antworten mit Zitat

Das macht mich allmählich irre mit dem Kopf durch die Mauer wollen
Für heute höre ich erstmal leicht frustriert auf.

Wenn ich ein Tastaturabfrage mit MULTIKEY mache, dann bekomme ich nicht 1 einzelnes Zeichen / Tastendruck geliefert, sondern auch bei sehr kurzem Antippen einer Taste zwischen 3 und 10 "Eingaben". Es gibt hier also keinerlei Tastaturverzögerung.
Das wäre ok, wenn ich nur abfragen will, ob eine bestimmte Taste gedrückt wurde, um dann irgendeine Aktion einzuleiten. Aber nicht, wenn ich aus den Eingaben einen fortlaufenden Text generieren will, oder Pfeiltasten zum Blättern auswerten möchte.

In der Hilfedatei "FBREF_11-18-2013D.CHM" ist unter MULTIKEY ein Programmbeispiel, bei dem man wohl einen Kreis mit den Cursortasten bewegen können sollte. Funktioniert bei mir auch nicht im Sinne des Erfinders, da der Kreis durch die schnelle Tastaturabfrage bei mir nur zwischen den Ecken des Bildschirms hin- und herspringen kann, eine schrittweise Positionsveränderung ist also nicht möglich...

Viele Grüße
Rainer
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
nemored



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

BeitragVerfasst am: 02.12.2013, 19:35    Titel: Antworten mit Zitat

Zitat:
Das wäre ok, wenn ich nur abfragen will, ob eine bestimmte Taste gedrückt wurde

Genau das macht MULTIKEY ja. Wenn du das Drücken einer Taste nur einmal registrieren willst, müsstest du ein Array verwalten, in dem du für jede Taste (bzw. für jede, die dich interessiert) speicherst, ob sie zuletzt gedrückt war oder nicht. Das wäre dir aber bei SCREENEVENT bereits abgenommen.

Zitat:
In der Hilfedatei "FBREF_11-18-2013D.CHM" ist unter MULTIKEY ein Programmbeispiel, bei dem man wohl einen Kreis mit den Cursortasten bewegen können sollte. Funktioniert bei mir auch nicht im Sinne des Erfinders, da der Kreis durch die schnelle Tastaturabfrage bei mir nur zwischen den Ecken des Bildschirms hin- und herspringen kann, eine schrittweise Positionsveränderung ist also nicht möglich...

Evtl. die Pause (SLEEP) erhöhen ... allerdings kann ich mit dem unveränderten Beispiel zwar auch keine "Einzelschritt-"Abfrage erreichen, um vom linken zum rechten Rand zu gelangen, muss ich die Taste aber schon so anderthalb Sekunden gedrückt halten. Wäre mal interessant, wie das bei anderen ist.

(Ich beziehe mich auch http://www.freebasic-portal.de/befehlsreferenz/multikey-215.html; der Artikel in der FBREF_11-18-2013D.CHM müsste da ja identisch sein.)


edit: ah ja, noch etwas - in -lang qb ist ein SLEEP 1 zu lang (eine Sekunde) - aber nicht einfach rausschmeißen, sondern durch __SLEEP 1 ersetzen!
_________________
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
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
Gehe zu Seite Zurück  1, 2, 3, 4  Weiter
Seite 2 von 4

 
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