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:

UDT() an Function

 
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
braesident



Anmeldungsdatum: 15.04.2008
Beiträge: 189
Wohnort: Berlin

BeitragVerfasst am: 22.07.2013, 10:18    Titel: UDT() an Function Antworten mit Zitat

Hallo Leute,

ich habe etwas an einem Eingabefeld gebastelt - war ganz ok jetzt wollte ich es überarbeiten so das auf dem Screen mehrere Felder angezeigt werden usw.
Jetzt wollte ich wissn ob man ein komplettes UDT(array) an eine Function übergeben kann und genauso auch zurückgeben.

Mit meinen Versuchen bin ich bis hier gekommen - ohne Func.aufruf gab es keine Meldungen mehr.
Code:
Type textfeld
  X as integer
  Y as integer
  text as string = ""
  stringlaenge as integer = 10000
  Laenge as integer = 200
  betreff as string = ""
End Type
Dim TF(2) AS textfeld

Declare Function FillField(code() as textfeld) as textfeld


Function FillField(code() as textfeld) as textfeld

  Dim AS String WF_input
  Dim AS integer anzeigbar(UBound(code)), Cursor, n = 0
  anzeigbar(0) = code(0).Laenge / 8
  anzeigbar(1) = code(1).Laenge / 8
  anzeigbar(2) = code(2).Laenge / 8
 
  Do          ' Dateiname
    Sleep 1
 
    ScreenLock
      'Draw String (12, 12), "Pfad und Dateiangabe:", &h505050
      Line (code(n).X, code(n).Y)-Step(code(n).Laenge, 12), &hffffff, BF
     
      If LEN(code(n).text) > anzeigbar(n) Then
        Draw String (code(n).X+2, code(n).Y+2), _
         Mid(code(n).text, (Len(code(n).text)-anzeigbar(n))+1, anzeigbar(n)), &h000000
     
      ElseIF LEN(code(n).text) = 0 Then
        Draw String (code(n).X+2, code(n).Y+2), code(n).betreff, &hcccccc
        Line ((code(n).X+1)+(Cursor*8), code(n).Y+1) - Step (0, 10), &h100000
     
      Else
        Draw String (code(n).X+2, code(n).Y+2), code(n).text, &h000000
        Line ((code(n).X+1)+(Cursor*8), code(n).Y+1) - Step (0, 10), &h100000
     
      End If
    ScreenUnlock
 
    WF_input = Inkey
   
    IF LEN(WF_Input) = 1 Then
      If WF_input = CHR(13) Then Exit Do
      'If WF_input = CHR(27) Then Exit Do
      If WF_Input = Chr(8) Then
        IF Cursor > 0 Then
          code(n).text = AddTxt(WF_input, code(n).StringLaenge, code(n).text, Cursor)
          Cursor -= 1
        End If
      Else
        IF code(n).text < AddTxt(WF_input, code(n).StringLaenge, code(n).text, Cursor) Then
          code(n).text = AddTxt(WF_input, code(n).StringLaenge, code(n).text, Cursor)
          Cursor += 1
        End If
      End If
    Else
      Select Case WF_Input
      Case Chr(255) & Chr(75)
        IF Cursor > 0 Then Cursor -= 1
      Case Chr(255) & Chr(77)
        IF Cursor < Len(code(n).text) Then Cursor += 1
      Case Chr(255) & Chr(72)
        IF n > LBound(Code) Then n -= 1
      Case Chr(255) & Chr(80)
        IF n < UBound(code) Then n += 1
      End Select
    End If
   
  Loop
  Return code()
End Function


TF(0).X = 10: TF(0).Y = 10: TF(0).stringlaenge = 5: TF(0).betreff = "tag"
TF(1).X = 10: TF(1).Y = 30: TF(1).stringlaenge = 6: TF(1).betreff = "monat"
TF(2).X = 10: TF(2).Y = 50: TF(2).stringlaenge = 7: TF(2).betreff = "jahr"

FillField()
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden MSN Messenger
MOD
Fleißiger Referenzredakteur


Anmeldungsdatum: 10.09.2007
Beiträge: 1003

BeitragVerfasst am: 22.07.2013, 11:26    Titel: Antworten mit Zitat

Übergeben schon, nur es gibt keine Array-Rückgabe, d. h. 'Return code()' funktioniert nicht. Ein Array-Parameter ist standardmäßig ByRef, du kannst also nach dem Aufruf der Funktion dasselbe Array prüfen, die Werte müssten geändert sein, weil deine Funktion es manipuliert.

Zu dem Thema steht übrigens einiges in der Referenz im Portal. Such mal nach 'Arrays' und 'Parameterübergabe'.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
braesident



Anmeldungsdatum: 15.04.2008
Beiträge: 189
Wohnort: Berlin

BeitragVerfasst am: 23.07.2013, 17:34    Titel: Antworten mit Zitat

Ich habs mir angesehen. Also wenn ich schreibe byref Code() as textfelddann kann ich mir ein return sparen da die Funktion die original variable verändert.. Im Prinzip muss es also keine Funktion sondern brauch nur eine Sub zu sein. Bzw könnte ich die Funktion etwas anderes zurück geben lassen wie zb ob das was gemacht werden sollte geklappt hat oder nicht.
Hab ich das so richtig verstanden? Sitz gerade nicht an meinem PC.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden MSN Messenger
nemored



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

BeitragVerfasst am: 23.07.2013, 17:50    Titel: Antworten mit Zitat

Code:
byref Code() as textfeld

da kannst du dir das BYREF sparen (geht vielleicht sogar gar nicht?)
Arrays werden ausschließlich BYREF übergeben; eine Übergabe BYVAL ist gar nicht möglich.

Zitat:
Bzw könnte ich die Funktion etwas anderes zurück geben lassen wie zb ob das was gemacht werden sollte geklappt hat oder nicht.

Das ist prinzipiell eine gute Idee und wird auch häufig so gemacht. 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
ThePuppetMaster



Anmeldungsdatum: 18.02.2007
Beiträge: 1839
Wohnort: [JN58JR]

BeitragVerfasst am: 23.07.2013, 19:47    Titel: Antworten mit Zitat

Array's sind standardmässig ByRef. Die Angabe ist sogar garnicht erlaubt. übergabe angaben des Arrays im Typeheader der sub/funktion sind nicht erlaubt. Also kein ByRef oder ByVal .. das array ist immer ByRef.


MfG
TPM
_________________
[ WebFBC ][ OPS ][ ToOFlo ][ Wiemann.TV ]
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