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:

Syntax für SUB ohne Parameter

 
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
UdoMM



Anmeldungsdatum: 22.08.2007
Beiträge: 17
Wohnort: Ba-Wü

BeitragVerfasst am: 29.08.2007, 13:02    Titel: Syntax für SUB ohne Parameter Antworten mit Zitat

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
Code:
Titelzeile

...was nicht gut ankam, auch
Code:
Titelzeile ()

hat nicht gefallen, nur mit

Code:
call Titelzeile


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
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Eternal_pain



Anmeldungsdatum: 08.08.2006
Beiträge: 1783
Wohnort: BW/KA

BeitragVerfasst am: 29.08.2007, 13:09    Titel: Antworten mit Zitat

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 zwinkern
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 lächeln

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 ?! lächeln
_________________
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen MSN Messenger
volta



Anmeldungsdatum: 04.05.2005
Beiträge: 1876
Wohnort: D59192

BeitragVerfasst am: 29.08.2007, 13:52    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
UdoMM



Anmeldungsdatum: 22.08.2007
Beiträge: 17
Wohnort: Ba-Wü

BeitragVerfasst am: 29.08.2007, 16:40    Titel: Antworten mit Zitat

Tja, nun wirft er mit ein "undefined label, TITELZEILE" in Zeile 0 vor...
_________________
<><
:
UdoMM
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
ytwinky



Anmeldungsdatum: 28.05.2005
Beiträge: 2624
Wohnort: Machteburch

BeitragVerfasst am: 29.08.2007, 17:13    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
volta



Anmeldungsdatum: 04.05.2005
Beiträge: 1876
Wohnort: D59192

BeitragVerfasst am: 29.08.2007, 17:55    Titel: Antworten mit Zitat

verlegen 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
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Sebastian
Administrator


Anmeldungsdatum: 10.09.2004
Beiträge: 5969
Wohnort: Deutschland

BeitragVerfasst am: 29.08.2007, 18:00    Titel: Antworten mit Zitat

Kleiner Tipp am Rande: http://Referenz.FreeBasic-Portal.de führt auch zum Ziel und ist vielleicht etwas leichter zu merken. 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
UdoMM



Anmeldungsdatum: 22.08.2007
Beiträge: 17
Wohnort: Ba-Wü

BeitragVerfasst am: 30.08.2007, 12:13    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
UdoMM



Anmeldungsdatum: 22.08.2007
Beiträge: 17
Wohnort: Ba-Wü

BeitragVerfasst am: 30.08.2007, 12:29    Titel: Mea culpa! Antworten mit Zitat

peinlich 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
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
UdoMM



Anmeldungsdatum: 22.08.2007
Beiträge: 17
Wohnort: Ba-Wü

BeitragVerfasst am: 30.08.2007, 12:41    Titel: on ... gosub ersetzen Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
nemored



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

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

Erste Empfehlung: Hier im Forum gibt es eine Edit-Funktion zwinkern

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



Anmeldungsdatum: 22.08.2007
Beiträge: 17
Wohnort: Ba-Wü

BeitragVerfasst am: 30.08.2007, 13:24    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
nemored



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

BeitragVerfasst am: 30.08.2007, 13:29    Titel: Antworten mit Zitat

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