CocoaMessage()

Syntaxe

Resultat = CocoaMessage(AddresseValeurDeRetour, Objet, Methode$ [, ValeurParametre [, Parametre$, [, ValeurParametre, ...]]])
Description
Pour les utilisateurs avancés. Disponible sur Mac OS X uniquement, elle permet d'envoyer facilement un message Objective-C au framework OS X et d'accéder à toute l'API. Habituellement Objective-C utilise des parenthèses pour avoir une syntaxe claire pour les messages. Comme PureBasic ne supporte pas Objective-C en natif, il doit l'émuler, alors la syntaxe est un peu différente. Une fois apprise, il est facile d'appeler une API. Pour plus d'exemples, n'hésitez pas à lire le thread suivant sur le forum.

Arguments

AddresseValeurDeRetour Si l'appel de l'API renvoie une structure ou un type différent d'entier 'integer', ce champ est utilisé pour définir le résultat du retour. Une adresse vers la structure ou la variable doit être spécifiée. Si zéro est spécifié, le résultat sera ignoré.
Objet L'objet sur lequel les méthodes Objective-C sera appelé. Il peut être égal à zéro si la méthode est une méthode statique (c'est le cas la plupart du temps lors de la création d'un objet).
Methode$ La méthode de l'objet à appeler, suivi d'un ';' comme d'habitude. Si la méthode a besoin d'une structure comme paramètre, '@' doit être ajouté après le point-virgule. Si la méthode s'attend à une chaîne comme paramètre, '$' peut être ajouté après le point-virgule, de sorte que la chaîne sera automatiquement convertie dans un NSString temporaire. Ce n'est pas requis, mais il peut être utile et ça facilite le codage. Si la méthode n'est pas prise en charge par l'objet, un message du débogueur sera levé lors de l'exécution.
ValeurParametre (optionnel) La valeur du paramètre associé à la méthode précédente.
Parameter$ (optionnel) Le paramètre de la méthode suivante. PureBasic supporte jusqu'à 7 paramètres par méthode.

Valeur de retour

Valeur de retour Integer. Utile pour la création d'identifiant d'objets.

Remarques

PureBasic a déjà configuré un pool de mémoire temporaire qui est vidé à chaque fois que WindowEvent() ou WaitWindowEvent() est appelé. Si vous avez besoin de libérer immédiatement les gros objets, vous devrez créer un pool de mémoire locale pour chacun de vos appels.

Exemple: avec une chaîne

  ; Objective-C: 
  ;   ColorList = [NSColorList colorListNamed:@"Crayons"];
  ;
  ColorList = CocoaMessage(0, 0, "NSColorList colorListNamed:$", @"Crayons") ; Créera un NSString pour "Crayons" (en respectant le mode ascii/unicode du programme)

Exemple: avec un type complexe

  ; Objective-C: 
  ;   Transform = [NSAffineTransform transform];
  ;
  Transform = CocoaMessage(0, 0, "NSAffineTransform transform") ; Obtenir une 'identity transform'

  ; Objective-C: 
  ;   [TransForm scaleXBy:sx yBy:sy];
  ;
  sx.CGFloat = 5.5
  sy.CGFloat = 20
  CocoaMessage(0, TransForm, "scaleXBy:@", @sx, "yBy:@", @sy) ; Agrandi x par 5.5, y par 20. comme sx n'est pas un 'integer', '@' doit être utilisé.
  
  ; Objective-C: 
  ;   NSAffineTransform TransformStruct = [TransForm transformStruct];
  ;
  CocoaMessage(@TransformStruct.NSAffineTransform, TransForm, "transformStruct") ; Obtenir une structure transform
  
  Debug TransformStruct\m11 ; debug affiche 5.5

OS Supportés

MacOS X

<- Blue() - Misc Index - Delay() ->