Buchempfehlung
Windows System Programming
Windows System Programming
Das Kompendium liefert viele interessante Informationen zur Windows-Programmierung auf Englisch. [Mehr Infos...]
FreeBASIC-Chat
Es sind Benutzer im FreeBASIC-Chat online.
(Stand:  )
FreeBASIC bei Twitter
Twitter FreeBASIC-Nachrichten jetzt auch über Twitter erhalten. Follow us!


Referenz - WITH

Referenz-Navigation

 

Typ: Anweisung
Kategorie: Verschiedenes
Syntax:

WITH UDT_Name
   [Ausdruck_mit_'.Record1'
   [Ausdruck_mit_'.Record2']
   [...]
END WITH

Innerhalb eines WITH-Blocks müssen nur die Namen der Records eines BefehlsreferenzeintragUDTs angegeben werden, nicht aber der UDT-Bezeichner selbst. Dies erspart dem Programmierer einige Tipparbeit.

BefehlsreferenzeintragUNION wird ebenfalls unterstützt. 'UDT_Name' kann auch ein dereferenzierter BefehlsreferenzeintragPointer sein.

Beispiel:

TYPE AdrType
   Name AS STRING
   City AS STRING
   PLZ  AS INTEGER
END TYPE
DIM Adressen(10) AS AdrType

WITH Adressen(0)
   .PLZ  = 98765
   .Name = "Karl Mustermann"
END WITH

Innerhalb eines WITH-Blocks müssen keine festen Reihenfolgen eingehalten werden. Es ist auch möglich, innerhalb eines WITH-Blocks andere Anweisungen zu benutzen. Der Zugriff auf andere UDTs als dem zuerst genannten ist ebenfalls möglich:

TYPE MyType
   MyStr AS STRING
   MyInt AS INTEGER
   MyPtr AS INTEGER PTR
END TYPE

TYPE OtherType
   OthStr AS STRING
   OthArr(20) AS INTEGER
END TYPE

DIM Anything(10) AS MyType
DIM AnythingElse AS OtherType

WITH Anything(5)
   FOR i = 0 TO 10
      .MyStr = STR(AnythingElse.OthArr(i))
      PRINT .MyStr
      PRINT @.MyPtr
   NEXT
END WITH

WITH-Blöcke dürfen auch verschachtelt sein:

TYPE MyType
   MyStr AS STRING
   MyInt AS INTEGER
   MyPtr AS INTEGER PTR
END TYPE

TYPE OtherType
   OthStr AS STRING
   OthArr(20) AS INTEGER
   OthUdt As MyType
END TYPE

DIM Anything(10) AS MyType
DIM AnythingElse AS OtherType

WITH AnythingElse
   .OthStr = "hello"
   .OthArr(5) = 7
   WITH .OthUdt
      .MyStr = "world"
      .MyInt = 8
      .MyPtr = @.MyInt
   END WITH
END WITH

Ein WITH-Block mit einem dereferenzierten Pointer als Argument:

TYPE SubType
   d  AS INTEGER
   e  AS INTEGER
   f  AS INTEGER
End Type

TYPE MainType
   a  AS INTEGER
   b  AS INTEGER
   c  AS SubType
End Type


DIM x AS MainType PTR
x = CALLOCATE(LEN(MainType))

WITH x->c
   .d = 5
   .e = 6
   .f = 7

   PRINT .d
   PRINT .e
   PRINT .f
END WITH

SLEEP

Hinweise:
- WITH funktioniert (noch) nicht mit BefehlsreferenzeintragNAMESPACE
- Aufgrund der inneren Struktur sollte nicht mit BefehlsreferenzeintragGOTO in einen WITH-Block gesprungen werden

Unterschiede in den Dialektformen:
- unter Befehlsreferenzeintrag-lang qb ist WITH nur als __WITH verfügbar

Unterschiede zu QuickBASIC:
- Neu in FreeBASIC

Siehe auch:
BefehlsreferenzeintragTYPE, BefehlsreferenzeintragUNION, BefehlsreferenzeintragDIM


Zusätzliche Informationen und Funktionen
  • Der Referenzeintrag wurde am 26.06.2007 von RedakteurMao angelegt.
  • Die aktuellste Version wurde am 13.09.2010 von RedakteurMOD gespeichert.
  Versionen Versionen