Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
UdoMM
Anmeldungsdatum: 22.08.2007 Beiträge: 17 Wohnort: Ba-Wü
|
Verfasst am: 29.08.2007, 13:02 Titel: Syntax für SUB ohne Parameter |
|
|
Ich versuche gerade, mich an die SUBs zu gewöhnen.
Als erstes brauche ich mal ein SUB ohne Parameterübergabe:
mein Versuch:
Code: |
Declare SUB Titelzeile
dateiname = "Background.bmp"
cls
Bload dateiname, 0
End SUB |
... und die Reaktion darauf:
Duplicated definition
Declare SUB Titelzeile
__________^
(könnte es daran liegen, dass mein SUB nach dem Hauptprogramm steht und im Hauptptogramm stehen die ganzen Aufrufe für "Titelzeile"?)
und zum Aufrufen habe ich es zuerst versucht mit
...was nicht gut ankam, auch
hat nicht gefallen, nur mit
gab es keine Fehlermeldung, allerdings soll man ja nicht mehr mit CALL arbeiten - etwas verwirrend finde ich das jetzt schon.
Kann mir jemand ein einfaches Codebeispiel geben, wie ich das hinbekommen kann?
Vielen Dank im Voraus! _________________ <><
:
UdoMM |
|
Nach oben |
|
 |
Eternal_pain

Anmeldungsdatum: 08.08.2006 Beiträge: 1783 Wohnort: BW/KA
|
Verfasst am: 29.08.2007, 13:09 Titel: |
|
|
UdoMM hat Folgendes geschrieben: |
Ich versuche gerade, mich an die SUBs zu gewöhnen.
Als erstes brauche ich mal ein SUB ohne Parameterübergabe:
mein Versuch:
Code: |
Declare SUB Titelzeile
dateiname = "Background.bmp"
cls
Bload dateiname, 0
End SUB
|
|
Das ist soweit schon ganz in ordnung, jedoch als Vorschlag, koennte man den Dateinamen noch als Parameter uebergeben, was die ganze sache noch flexibler machen wuerde.
Aber uebergehen wir das als erstes
Sinnvoll ist es jedoch diese Sub am Anfang des Programms bzw vor der Sub selbst und vor dem ersten Aufruf zu deklarieren... also Deinem Hauptprogramm mitteilen, "Du, ich hab da eine Sub die ich spaeter schreiben werde und im Programm aufrufen moechte" dann weiss das Programm das auch... und stellt Dir diese Sub ueberall im Programm zur verfuegung
mit deinem Beispiel saehe das dann so aus:
Code: | Declare SUB Titelzeile |
Meistens macht man auch Titelzeile() wenn keine Parameter angegeben sind, ist aber eher Optional!
Das duerfte einen grossteil der Probleme beim aufrufen beseitigen...
die Sache das Dein Programm mit den ''Normalen'' Aufrufen womoeglich nicht klar kommt... und stattdessen nichts dagegen hat gegen ein Call schaetze ich das Du Dein Programm mit -lang qb compilierst ?!  _________________
 |
|
Nach oben |
|
 |
volta
Anmeldungsdatum: 04.05.2005 Beiträge: 1876 Wohnort: D59192
|
Verfasst am: 29.08.2007, 13:52 Titel: |
|
|
Code: | DECLARE SUB Titelzeile 'Die Deklaration ist nur notwendig
'wenn ein Aufruf erfolgt bevor die Prozedur beschrieben wurde.
'Gleiches gilt für Funktionen!
SUB Titelzeile 'Die Prozedur
dateiname = "Background.bmp"
CLS
BLOAD dateiname, 0
END SUB
Titelzeile 'Aufruf der Prozedur
SLEEP
END |
_________________ Warnung an Choleriker:
Dieser Beitrag kann Spuren von Ironie & Sarkasmus enthalten.
Zu Risiken & Nebenwirkungen fragen Sie Ihren Therapeuten oder Psychiater. |
|
Nach oben |
|
 |
UdoMM
Anmeldungsdatum: 22.08.2007 Beiträge: 17 Wohnort: Ba-Wü
|
Verfasst am: 29.08.2007, 16:40 Titel: |
|
|
Tja, nun wirft er mit ein "undefined label, TITELZEILE" in Zeile 0 vor... _________________ <><
:
UdoMM |
|
Nach oben |
|
 |
ytwinky

Anmeldungsdatum: 28.05.2005 Beiträge: 2624 Wohnort: Machteburch
|
Verfasst am: 29.08.2007, 17:13 Titel: |
|
|
Code: | DECLARE SUB Titelzeile 'Die Deklaration ist nur notwendig
'wenn ein Aufruf erfolgt bevor die Prozedur beschrieben wurde.
'Gleiches gilt für Funktionen!
SUB Titelzeile 'Die Prozedur
Dim Dateiname As String = "Background.bmp"
CLS
?Dateiname
BLOAD dateiname, 0
END SUB
Titelzeile 'Aufruf der Prozedur
SLEEP
END |
..ich überlasse es dir, herauszufinden, worin der Unterschied zu volta's Code besteht..
(getestet mit FB0.17 und FBIde 0.46) _________________
v1ctor hat Folgendes geschrieben: | Yeah, i like INPUT$(n) as much as PRINT USING.. | ..also ungefähr so, wie ich GOTO.. |
|
Nach oben |
|
 |
volta
Anmeldungsdatum: 04.05.2005 Beiträge: 1876 Wohnort: D59192
|
Verfasst am: 29.08.2007, 17:55 Titel: |
|
|
danke ytwinky!
@UdoMM
schau dir mal die FB-Referenz an http://www.freebasic-portal.de/index.php?s=ref
da sind auch Tut's drin, die könnten dir oft schneller helfen.
EDIT/
zum Anzeigen eines Bildes mußt du natürlich einen Grafik-srceen initialisieren! _________________ Warnung an Choleriker:
Dieser Beitrag kann Spuren von Ironie & Sarkasmus enthalten.
Zu Risiken & Nebenwirkungen fragen Sie Ihren Therapeuten oder Psychiater.
Zuletzt bearbeitet von volta am 29.08.2007, 18:01, insgesamt einmal bearbeitet |
|
Nach oben |
|
 |
Sebastian Administrator

Anmeldungsdatum: 10.09.2004 Beiträge: 5969 Wohnort: Deutschland
|
|
Nach oben |
|
 |
UdoMM
Anmeldungsdatum: 22.08.2007 Beiträge: 17 Wohnort: Ba-Wü
|
Verfasst am: 30.08.2007, 12:13 Titel: |
|
|
Ja, die Tuts und die Befehlsreferenz habe ich mir schon angeschaut und auch etwas rumprobiert. Aber da habe ich kein Beispiel für ein SUB ohne Parameterübergabe entdeckt.
Zitat: | .ich überlasse es dir, herauszufinden, worin der Unterschied zu volta's Code besteht.. |
...der von Volta funktioniert, wenn ich mal einen "dim shared dateiname as string" davor schreibe.
Der andere verlangt nach "-lang deprecated"
Also ich versuch's weiter mit meinem Umbau. _________________ <><
:
UdoMM |
|
Nach oben |
|
 |
UdoMM
Anmeldungsdatum: 22.08.2007 Beiträge: 17 Wohnort: Ba-Wü
|
Verfasst am: 30.08.2007, 12:29 Titel: Mea culpa! |
|
|
So sorry... ich bin dem FBIde und seiner Ersetzen-Funktion auf den Leim gegangen: da waren noch zusätzlich alte "Gosub Titelzeile"-Anweisungen vorhanden. Die habe ich jetzt entdeckt, entsorgt und siehe da: alles ist gut!
Enschuldigung für den Aufwand und vielen Dank für die Unterstützung!
Gruß _________________ <><
:
UdoMM |
|
Nach oben |
|
 |
UdoMM
Anmeldungsdatum: 22.08.2007 Beiträge: 17 Wohnort: Ba-Wü
|
Verfasst am: 30.08.2007, 12:41 Titel: on ... gosub ersetzen |
|
|
Leider gleich schon wieder ich:
Was empfehlt ihr, wenn ein "on ... gosub" zu ersetzen ist, weil jetzt alles mit den SUBs geschrieben werden soll? _________________ <><
:
UdoMM |
|
Nach oben |
|
 |
nemored

Anmeldungsdatum: 22.02.2007 Beiträge: 4704 Wohnort: ~/
|
Verfasst am: 30.08.2007, 13:18 Titel: |
|
|
Erste Empfehlung: Hier im Forum gibt es eine Edit-Funktion
Was sinnvoll ist, hängt ein wenig von der speziellen Situation ab. Manchmal kannst du den Wert, nach dem unterschieden werden soll, in eine SUB mitübergeben und die macht dann das, was sie soll. Ansonsten verwende ich gerne SELECT CASE:
Code: | SELECT CASE auswahlkriterium
CASE 1
tue_dies
CASE 2
tue_das
CASE 3
tue_jenes
END SELECT |
_________________ Deine Chance beträgt 1:1000. Also musst du folgendes tun: Vergiss die 1000 und konzentriere dich auf die 1. |
|
Nach oben |
|
 |
UdoMM
Anmeldungsdatum: 22.08.2007 Beiträge: 17 Wohnort: Ba-Wü
|
Verfasst am: 30.08.2007, 13:24 Titel: |
|
|
Also ich habe eine Variable "AMode" (Typ: Integer) und die kann Werte von 1 bis 7 annehmen. Bisher fand ich es recht elegant, diese in einem "On AMode Gosub..." einzusetzen. Meine Unterprogramme machen teilweise recht unterschiedliche Dinge, deshalb möchte ich die Verzweigung beibehalten.
Ich hatte gehofft, es würde etwas ähnlich handliches für die SUBs geben, wie früher für Gosub, ansonsten ist Select Case natürlich OK. _________________ <><
:
UdoMM |
|
Nach oben |
|
 |
nemored

Anmeldungsdatum: 22.02.2007 Beiträge: 4704 Wohnort: ~/
|
Verfasst am: 30.08.2007, 13:29 Titel: |
|
|
Eine 1:1-Umsetzung gibt es da nicht, aber im Prinzip passiert genau dasselbe: Abhängig vom Wert AMode wird eine passende SUB aufgerufen. Wenn das, was die SUB machen soll, kürzer ist (und du es nicht an verschiedenen Stellen des Programms brauchst), dann kannst du auch den kompletten Code-Block gleich in den CASE-Bereich reinschreiben. Hier ist SELECT CASE also sogar flexibler als ON ... GOSUB.  _________________ Deine Chance beträgt 1:1000. Also musst du folgendes tun: Vergiss die 1000 und konzentriere dich auf die 1. |
|
Nach oben |
|
 |
|