 |
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 |
Elektronix
Anmeldungsdatum: 29.06.2006 Beiträge: 742
|
Verfasst am: 18.10.2007, 16:18 Titel: Parameterübergabe- ich raff's nicht...! |
|
|
Wie schon gesagt, versuche ich, ein QuickBasic-Programmnach nach FreeBasic zu portieren. Warum bloß...
Hier eine Funktionsdeklaration:
Code: |
DECLARE FUNCTION Menuname (X As Integer, Y As Integer, Wort As String, COLV As Integer, COLH As Integer) As String
|
Das die dazugehörige Funktion:
Code: |
FUNCTION Menuname (X, Y, Wort, COLV, COLH)
Dim Buchst As String
Wort = ""
X1 = X: Y1 = Y' Koordinaten sichern
DO
LOCATE X, Y
Buchst = CHR(SCREEN(X, Y))
Y = Y - 1
LOOP UNTIL Buchst = " " OR Y = RL
Y = Y + 1
DO
Y = Y + 1
LOCATE X, Y
Buchst = CHR(SCREEN(X, Y)) 'Wort lesen
COLOR COLH, COLV
PRINT Buchst
FOR Warte = 1 TO 2000: NEXT Warte
LOCATE X, Y
COLOR COLV, COLH
'DO: LOOP UNTIL LEN(INKEY$)
PRINT Buchst ' Schrift blinkt kurz
IF Buchst <> " " THEN Wort = Wort + Buchst
LOOP UNTIL Buchst = " "
'LOCATE 10, 30
'PRINT Wort
X = X1: Y = Y1'Koordinaten zurckgeben
Muname = Wort
END FUNCTION
|
Und so wird sie angewendet:
Code: | DO
Taste$ = INKEY$
LOOP WHILE Taste$ = ""
SELECT CASE Taste$
CASE CHR$(0) + "K"
IF Y > 1 THEN Y = Y - 1: 'nach links
CASE CHR$(0) + "M"
IF Y < 80 THEN Y = Y + 1: 'nach rechts
CASE CHR$(0) + "H"
IF X > 1 THEN X = X - 1: 'nach oben
CASE CHR$(0) + "P"
IF X < 23 THEN X = X + 1: 'nach unten
CASE CHR$(13) 'Auswahl mit Return
IF X = 2 AND Y > 1 THEN
'_____________________________________________________________________________
'______________ Menuauswahl ____________
'_____________________________________________________________________________
SELECT CASE Menuname (X, Y, Wort, COLV, COLH)
CASE "Datei"
LOCATE 20, 20
PRINT Wort
CALL Dateimen (3, 2, 17, 20, Rahmen3, 4, 11)
CASE "Bearbeiten"
LOCATE 20, 20
PRINT Wort
CALL Bearbmen (3, 9, 17, 28, Rahmen3, 4, 11)
REM und so weiter...
|
Aber beim Kompilieren erhalte ich den Fehler
fbc hat Folgendes geschrieben: |
FbTemp.bas(51) error 55: Type mismatch, at parameter 1 of MENUNAME()
SELECT CASE Menuname (X, Y, Wort, COLV, COLH)
........................................^
|
Was mache ich da falsch?
Kann passieren, daß ich noch häufiger sowas poste. In QuickBasic war alles sooo schön einfach... 
Zuletzt bearbeitet von Elektronix am 18.10.2007, 16:22, insgesamt einmal bearbeitet |
|
Nach oben |
|
 |
Sebastian Administrator

Anmeldungsdatum: 10.09.2004 Beiträge: 5969 Wohnort: Deutschland
|
Verfasst am: 18.10.2007, 16:21 Titel: |
|
|
Hallo,
bei der eigentlichen Funktion musst du die Argumente natürlich genauso hinschreiben wie bei der anfänglichen Deklaration:
Code: | DECLARE FUNCTION Menuname (X AS INTEGER, Y AS INTEGER, Wort AS STRING, COLV AS INTEGER, COLH AS INTEGER) AS STRING
....
FUNCTION Menuname (X AS INTEGER, Y AS INTEGER, Wort AS STRING, COLV AS INTEGER, COLH AS INTEGER) AS STRING
'Hier der FUNCTION-Code
END FUNCTION |
Viele Grüße!
Sebastian _________________
Die gefährlichsten Familienclans | Opas Leistung muss sich wieder lohnen - für 6 bis 10 Generationen! |
|
Nach oben |
|
 |
Elektronix
Anmeldungsdatum: 29.06.2006 Beiträge: 742
|
Verfasst am: 18.10.2007, 17:00 Titel: |
|
|
So, hab ich gemacht, hat aber irgendwie nichts gebracht. Gleicher Fehler an gleicher Stelle.  |
|
Nach oben |
|
 |
Sebastian Administrator

Anmeldungsdatum: 10.09.2004 Beiträge: 5969 Wohnort: Deutschland
|
|
Nach oben |
|
 |
nemored

Anmeldungsdatum: 22.02.2007 Beiträge: 4704 Wohnort: ~/
|
Verfasst am: 18.10.2007, 17:23 Titel: |
|
|
Ist zwar wohl nicht der Auslöser des Fehlers, ist mir aber aufgefallen:
X1 und X2 innerhalb der Funktion kennt er auch nicht, müssen auch geDIMt werden. Taste$ wird er auch nicht mögen, wegen des Suffix $.
Wenn die Funktion den Wert von Wort ändern soll, brauchst du davor ein BYREF. _________________ Deine Chance beträgt 1:1000. Also musst du folgendes tun: Vergiss die 1000 und konzentriere dich auf die 1. |
|
Nach oben |
|
 |
stuner
Anmeldungsdatum: 29.06.2006 Beiträge: 45
|
Verfasst am: 18.10.2007, 17:58 Titel: |
|
|
ich hab mal ein wenig darum rumgebastelt, so sollte dieser Teil funktionieren (evtl. habe ich ein paar Variabeln zuviel dimensioniert(wenn diese vorher schon dimensioniert waren))
Code: | DECLARE FUNCTION Menuname (X AS INTEGER, Y AS INTEGER, Wort AS STRING, COLV AS INTEGER, COLH AS INTEGER) AS STRING
FUNCTION Menuname (X AS INTEGER, Y AS INTEGER, Wort AS STRING, COLV AS INTEGER, COLH AS INTEGER) AS String
DIM AS String Buchst,muname
Dim As Integer x1,y1,rl,warte
Wort = ""
X1 = X
Y1 = Y' Koordinaten sichern
DO
LOCATE X, Y
Buchst = CHR(SCREEN(X, Y))
Y = Y - 1
LOOP UNTIL Buchst = " " OR Y = RL
Y = Y + 1
DO
Y = Y + 1
LOCATE X, Y
Buchst = CHR(SCREEN(X, Y)) 'Wort lesen
COLOR COLH, COLV
PRINT Buchst
FOR Warte = 1 TO 2000: NEXT Warte
LOCATE X, Y
COLOR COLV, COLH
'DO: LOOP UNTIL LEN(INKEY$)
PRINT Buchst ' Schrift blinkt kurz
IF Buchst <> " " THEN Wort = Wort + Buchst
LOOP UNTIL Buchst = " "
'LOCATE 10, 30
'PRINT Wort
X = X1: Y = Y1'Koordinaten zurckgeben
Muname = Wort
END FUNCTION
Dim As String taste,wort
Dim As Integer x,y,colv,colh
DO
Taste = InKey
LOOP WHILE Taste = ""
SELECT CASE Taste
CASE CHR(0) + "K"
IF Y > 1 THEN Y = Y - 1: 'nach links
CASE CHR(0) + "M"
IF Y < 80 THEN Y = Y + 1: 'nach rechts
CASE CHR(0) + "H"
IF X > 1 THEN X = X - 1: 'nach oben
CASE CHR(0) + "P"
IF X < 23 THEN X = X + 1: 'nach unten
CASE CHR(13) 'Auswahl mit RETURN
IF X = 2 AND Y > 1 THEN
'_____________________________________________________________________________
'______________ Menuauswahl ____________
'_____________________________________________________________________________
SELECT CASE Menuname(X, Y, Wort, COLV, COLH)
CASE "Datei"
LOCATE 20, 20
PRINT Wort
Dateimen (3, 2, 17, 20, Rahmen3, 4, 11)
CASE "Bearbeiten"
LOCATE 20, 20
PRINT Wort
Bearbmen (3, 9, 17, 28, Rahmen3, 4, 11)
End Select
End If
End Select |
|
|
Nach oben |
|
 |
dreael Administrator

Anmeldungsdatum: 10.09.2004 Beiträge: 2529 Wohnort: Hofen SH (Schweiz)
|
Verfasst am: 18.10.2007, 21:36 Titel: |
|
|
Mein berühmter QB-Unterprogrammartikel zum Thema:
http://www.dreael.ch/Deutsch/BASIC-Knowhow-Ecke/SUB-Unterprogramme.html
Ich nehme einmal an, dass in FreeBasic die bisherigen Syntaxen und Semantiken aus QB weiterhin existieren. Praktisch habe ich es dort noch nicht getestet, weiss aber nur, dass dort ein paar wirklich hübsche ;-) Erweiterungen gemacht wurden, d.h. exakt einige Dinge, die ich dort unter "Möglichkeitsgrenzen im Unterprogrammkonzept von QuickBASIC" erwähnt habe, sind in FreeBasic laut Befehlsreferenz nun möglich, z.B. ich könnte dort eine FUNCTION Schnittpunkt() schreiben, die das Ergebnis direkt als TYPE Punkt zurückliefert. _________________ Teste die PC-Sicherheit mit www.sec-check.net |
|
Nach oben |
|
 |
Elektronix
Anmeldungsdatum: 29.06.2006 Beiträge: 742
|
Verfasst am: 19.10.2007, 10:23 Titel: |
|
|
So, jetzt habe ich erstmal das Zielsystem von QB-Console auf Windows-Console umgestellt, das hat schon eine Menge Fehler gelöst...
Nächste Frage: Wie frage ich die Pfeiltasten ab? |
|
Nach oben |
|
 |
stuner
Anmeldungsdatum: 29.06.2006 Beiträge: 45
|
Verfasst am: 19.10.2007, 10:48 Titel: |
|
|
Ich werds mal versuchen....
Code: | #include "fbgfx.bi"
DIM AS INTEGER work_page, x, y
'Bildschirmmodus 640x480x8 mit zwei Seiten initialisieren
SCREEN 18, ,2
COLOR 2, 15
work_page = 0
x = 320
y = 240
DO
' Eine Seite beschreiben, während die andere angezeigt wird
SCREENSET work_page, work_page XOR 1
' Überprüfe die Pfeiltasten und aktualisiere die Koordinaten
' x, y entsprechend.
IF MULTIKEY(FB.SC_RIGHT) AND x < 639 THEN x += 1
IF MULTIKEY(FB.SC_LEFT) AND x > 0 THEN x -= 1
IF MULTIKEY(FB.SC_dOWN) AND y < 479 THEN y += 1
IF MULTIKEY(FB.SC_UP) AND y > 0 THEN y -= 1
CLS
CIRCLE(x, y), 30, , , , ,F
' Seite wechseln
work_page = work_page XOR 1
LOOP UNTIL INKEY = CHR(27) ' Bis ESC gedrückt wird weitermachen
' Setze aktive und sichtbare Bildschirmseite wieder auf 0
SCREENSET
PRINT "beliebige Taste drücken um zu beenden..."
GETKEY |
Siehe auch: FB Referenz -> Multikey
Nachtrag: In der Referenz steht SC_LEFT (usw.), das stimmt alllerdings in den aktuellen Versionen nicht mehr. Jetzt ist es FB.SC_LEFT (usw.) |
|
Nach oben |
|
 |
Mao
Anmeldungsdatum: 25.09.2005 Beiträge: 4409 Wohnort: /dev/hda1
|
Verfasst am: 19.10.2007, 11:24 Titel: |
|
|
Sollte gefixt sein.  _________________ Eine handvoll Glück reicht nie für zwei.
--
 |
|
Nach oben |
|
 |
Elektronix
Anmeldungsdatum: 29.06.2006 Beiträge: 742
|
Verfasst am: 19.10.2007, 15:22 Titel: |
|
|
Das funktioniert nicht.
Also: ich möchte in meinem Menüsystem den Cursor mit den Pfeilen steuern (Maussteuerung kommt später dazu). In QB habe ich die Pfeile mit Inkey$ eingelesen und dann mit CHR$ den Ascii-Code überprüft. Bei Pfeil Links z. B.
Code: |
Select Case Taste$
Case =CHR(0) + "K"
|
Aber in FB sind offenbar die Scancodes der Pfeiltasten anders, darum funktioniert das nicht. Außerdem wird im FB-Screen der Cursor nicht angezeigt oder ist nur so ein kleiner Strich. Er sollte aber ein gut erkennbares 8x8 oder 8x16-Rechteck oder von mir aus auch ein Zeichen (z. B. X oder O) sein.
Wie kann ich dafür die Pfeiltasten einlesen?
Zuletzt bearbeitet von Elektronix am 19.10.2007, 15:33, insgesamt einmal bearbeitet |
|
Nach oben |
|
 |
nemored

Anmeldungsdatum: 22.02.2007 Beiträge: 4704 Wohnort: ~/
|
Verfasst am: 19.10.2007, 15:26 Titel: |
|
|
Die Scancodes sind dieselben, nur statt chr$(0)+chr$(x) ist es jetzt chr$(255)+chr$(x). _________________ Deine Chance beträgt 1:1000. Also musst du folgendes tun: Vergiss die 1000 und konzentriere dich auf die 1. |
|
Nach oben |
|
 |
Elektronix
Anmeldungsdatum: 29.06.2006 Beiträge: 742
|
Verfasst am: 19.10.2007, 15:35 Titel: |
|
|
Ok, danke schon mal. Und wie mache ich den Cursor sichtbar?
Locate (X,Y,1) macht den Cursor nicht sichtbar (Hintergrund mit blau gefärbt) |
|
Nach oben |
|
 |
stuner
Anmeldungsdatum: 29.06.2006 Beiträge: 45
|
Verfasst am: 19.10.2007, 16:11 Titel: |
|
|
Elektronix hat Folgendes geschrieben: | Das funktioniert nicht. |
Und was genau funktioniert an meinem Beispiel nicht?
Bei mir (FB 0.18.2b + lang fb) funktioniert das Beispiel tadellos. _________________ MfG Stuner |
|
Nach oben |
|
 |
Elektronix
Anmeldungsdatum: 29.06.2006 Beiträge: 742
|
Verfasst am: 19.10.2007, 16:54 Titel: |
|
|
Ich habe das Arbeitsfeld mit COLOR (a,b) eingefärbt. Der Cursor ist nicht sichtbar. |
|
Nach oben |
|
 |
Elektronix
Anmeldungsdatum: 29.06.2006 Beiträge: 742
|
Verfasst am: 22.10.2007, 09:39 Titel: |
|
|
Jetzt habe ich die FB0.18-b installiert, aber ich kann den Cursor immer noch nicht sehen, und offensichtlich reagiert er auch nicht auf die Pfeiltasten. Kann mir keiner helfen?  |
|
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.
|
|