CocoaMessage()

Syntax

Ergebnis = CocoaMessage(RückgabeWertAdresse, Objekt, Methode$ [, ParameterWert [, Parameter$, [, ParamaterWert, ...]]])
Beschreibung
Für fortgeschrittene Anwender. Verfügbar nur auf OS X, erlaubt diese Funktion das einfache Senden einer "Objective-C Message" (Nachricht) an das OS X Framework und den Zugriff auf jede API. Normalerweise verwendet Objective-C Klammern, um eine klare Syntax für Nachrichten zu haben. Da PureBasic jedoch keine Ojective-C Unterstützung eingebaut hat, muss es sie emulieren, deshalb ist die Syntax etwas anders. Einmal erlernt, ist es einfach, die erforderliche API aufzurufen. Um weitere Beispiele zu erhalten, lesen Sie bitte folgenden Thread im englischen Forum.

Parameter

RückgabeWertAdresse Wenn der API-Aufruf eine Struktur oder einen anderen Typ als 'Integer' zurückgibt, wird dieses Feld verwendet, um das zurückgegebene Ergebnis festzuhalten. Eine Adresse der Struktur oder Variable muss angegeben werden. Wird Null angegeben, wird das Ergebnis ignoriert.
Objekt Das Objekt, auf welches die Objective-C Methoden aufgerufen werden. Dies kann Null sein, wenn die Methode eine statische Methode ist (meist bei der Erstellung eines Objekts).
Methode$ Die auf das Objekt aufzurufende Methode, üblicherweise gefolgt von einem Semikolon (':'). Wenn die Methode eine Struktur als Parameter benötigt, muss '@' nach dem Semikolon angehängt werden. Wenn die Methode einen String als Parameter erwartet, kann '$' nach dem Semikolon angehängt werden, wodurch der String automatisch in einen temporären NSString konvertiert wird. Dies ist nicht erforderlich, aber es kann nützlich sein und das Programmieren vereinfachen. Wenn die Methode vom Objekt nicht unterstützt wird, wird während der Laufzeit eine Debugger-Meldung ausgegeben.
ParameterWert (optional) Der Parameter-Wert, welcher der vorherigen Methode zugeordnet ist.
Parameter$ (optional) Der nächste Methoden-Parameter. PureBasic unterstützt bis zu 7 Methoden-Parameter.

Rückgabewert

Integer-Rückgabewert. Nützlich für die ID zur Objekt-Erstellung.

Anmerkungen

PureBasic hat bereits einen temporären Speicher-Pool eingerichtet, welcher bei jedem Aufruf von WindowEvent() oder WaitWindowEvent() geleert wird. Wenn Sie große Objekte sofort freigeben müssen, müssen Sie einen lokalen Speicher-Pool rund um Ihre Aufrufe schaffen.

Beispiel: mit String

  ; Objective-C: 
  ;   ColorList = [NSColorList colorListNamed:@"Crayons"];
  ;
  ColorList = CocoaMessage(0, 0, "NSColorList colorListNamed:$", @"Crayons") ; Wird einen NSString für "Crayons" unter der Haube erstellen

Beispiel: mit komplexem Typ

  ; Objective-C: 
  ;   Transform = [NSAffineTransform transform];
  ;
  Transform = CocoaMessage(0, 0, "NSAffineTransform transform") ; Sorgt für eine "Identity"-Umwandlung

  ; Objective-C: 
  ;   [TransForm scaleXBy:sx yBy:sy];
  ;
  sx.CGFloat = 5.5
  sy.CGFloat = 20
  CocoaMessage(0, TransForm, "scaleXBy:@", @sx, "yBy:@", @sy) ; Skaliere x mit 5.5, y mit 20. Da sx kein Integer ist, muss '@' angegeben werden
  
  ; Objective-C: 
  ;   NSAffineTransform TransformStruct = [TransForm transformStruct];
  ;
  CocoaMessage(@TransformStruct.NSAffineTransform, TransForm, "transformStruct") ; Umwandlungs-Struktur ermitteln
  
  Debug TransformStruct\m11 ; debug outputs 5.5

Unterstützte OS

MacOS X

<- CPUName() - System Inhaltsverzeichnis - ComputerName() ->