# [AppleScript] assigner un nom à un champ texte



## p4bl0 (6 Janvier 2006)

Bonjour, je voudrai pouvoir, en AppleScript, accéder au champs texte (lire le contenu et le modifier) d'une appli que je suis en train de faire.

Dans la palette info de Inteface Builder, je vais dans AppleScript, puis je met le nom à "chtxt".

je compil et lance mon appli, j'écris "abc" dans le champs texte.

ensuite je fait en AppleScript :

```
tell application "MonApp"
    set valeur to content of chtxt
end tell

do shell script "echo " & valeur
```
quand je le fait il me retourne l'erreur "La variable chtxt n'est pas défini"


Comment faire s'il vous plait ?





P.S.: je précise que j'ai essayer de mettre "set valeur to "test"" et dans ce cas là il m'a bien retourner "test".



EDIT : je précise que j'ai fait AppleScript application comme projet et que j'ai un "AppleScript Info" dans mes instances dans interface builder, peut-être que ça se passe par là ?


----------



## Didier Guillion (6 Janvier 2006)

truk2oof a dit:
			
		

> Bonjour, je voudrai pouvoir, en AppleScript, accéder au champs texte (lire le contenu et le modifier) d'une appli que je suis en train de faire.
> 
> Dans la palette info de Inteface Builder, je vais dans AppleScript, puis je met le nom à "chtxt".
> 
> ...



Ton champ texte est bien dans une fenetre, non ?
Si ta fenetre s'appelle "MaFenetre" cela va donner

set valeur to content of text field "chtxt" of  window "MaFenetre"

Note bien, "chtxt" et non chtxt.

Cordialement


----------



## p4bl0 (6 Janvier 2006)

Didier Guillion a dit:
			
		

> Ton champ texte est bien dans une fenetre, non ?
> Si ta fenetre s'appelle "MaFenetre" cela va donner
> 
> set valeur to content of text field "chtxt" of  window "MaFenetre"
> ...


MERCI ça marche !!!!


----------



## p4bl0 (6 Janvier 2006)

bon j'ai zun aut' problème...

comment faut faire pour accéder à un fichier, AS ne comprend pas "/tmp/fichier.txt" ni "/usr/tmp/fichier.txt" ?? 



merci 


EDIT : ok, j'avais pas penser au fait que pour mac os x aussi, c'est des : et pas des /

donc c'est bon ça marche


----------



## Didier Guillion (6 Janvier 2006)

truk2oof a dit:
			
		

> bon j'ai zun aut' problème...
> 
> comment faut faire pour accéder à un fichier, AS ne comprend pas "/tmp/fichier.txt" ni "/usr/tmp/fichier.txt" ??
> 
> ...




Tu es sur de ton chemin ?

Par exemple voici un chemin correct sur un utilisateur "didier", fichier "index.html'

/Users/didier/Sites/photos/noel2005/index.html

Tu fait quoi pour ouvrir ton fichier ?

Cordialement


----------



## p4bl0 (7 Janvier 2006)

extrait de mon script :

```
set grid to "t2oBook HD:private:tmp:grid.txt" as alias
open for access grid with write permission
```
Faut mettre des : si on met des / ça marche pas, même en faisant /private/tmp/grid.txt
Je comprends pas, pourtant mac os x est un unix...


Bon mais j'ai maintenant un autre problème :
Comment modifier les variable d'une liste (un record)
j'ai :

```
set grid to {a, b, c, d, e}
```
je voudrais ensuite faire en sorte de pourvoir leur donner à chacun une valeur.
Comment faire, je sais que je doit parcourir la grille avec 
	
	



```
repeat with var in grid
    set truc_a_chercher_dans_une_appli to content of text field var of window ma_fenetre
    set [ici]** to truc_a_chercher_dans_une_appli
end repeat
```

** ici je ne sais pas comment mettre le truc_a_chercher_dans_une_appli dans la variable qui var de ce tour là.
Je ne suis pas clair je crois...

Concrètement, ce que je veut faire : j'ai une appli avec 5 champs texte, nommé a, b, c, d, e. je voudrait avoir une liste avec les valeurs de chacun de ces champs.
Le problèmes, c'est que je voudrais que si le champs est vide (si ce qu'on récupère est "" ou " ") on mette sa valeur à "+" dans la liste,je ne peut donc pas le faire sans boucle (en fait il y a plus de 80 champs dans l'appli, mais ça sera la même méthode pour 5 ou 30 ou 70 alors...)


Voilà, j'espère que j'ai été assez claire, sinon, dites-moi ce sur quoi vous voulez des précisions 





MERCI


----------



## p4bl0 (7 Janvier 2006)

Ça passera certainement mieux avec un exemple :
dans mon appli :
le champs texte "a" vaut "champsA"
le champs texte "b" vaut "Quelquechose"
le champs texte "c" vaut "hahahaha"

je voudrais que mon apple script me génère une liste qui me donne l'équivalent de 
set laListe to {a:"champsA", b:"Quelquechose", c:"hahahaha"}


voilà


----------



## Didier Guillion (7 Janvier 2006)

truk2oof a dit:
			
		

> Ça passera certainement mieux avec un exemple :
> dans mon appli :
> le champs texte "a" vaut "champsA"
> le champs texte "b" vaut "Quelquechose"
> ...



Je ne suis pas sur d'avoir tout compris, mais je pense que tu peut dans ce cas acceder au champ par son nom, non plus donné par une constante "xxxx" mais par une une variable contenant son nom.

Au passage, puisque je vois que tu te pose beaucoup de questions, connait tu :

http://www.scripteur.com/cormoran/as/osa/standard/default.html


Cordialement


----------



## p4bl0 (8 Janvier 2006)

Le site à l'air géniale, je vais le lire, à priori, j'y trouverai mon bonheur 




merci


----------



## p4bl0 (8 Janvier 2006)

Bon, alors maintenant, c'est censé marcher, j'ai trouver ce que je veut, mais ilme retourne une erreur qui cette foi ne vient pas de mon script mais de mon appli, cette erreur est :

Erreur dans MonAppli
NSReceiverEvaluationScriptError : 4



Si quelqu'un peut m'aider


----------



## Didier Guillion (8 Janvier 2006)

truk2oof a dit:
			
		

> Bon, alors maintenant, c'est censé marcher, j'ai trouver ce que je veut, mais ilme retourne une erreur qui cette foi ne vient pas de mon script mais de mon appli, cette erreur est :
> 
> Erreur dans MonAppli
> NSReceiverEvaluationScriptError : 4
> ...




Quel est le contenu de la ligne qui produit cette erreur ?

(Cette erreur peut apparaitre quand tu fait un acces a un element non defini de l'interface, par exemple, un mauvais nom de fenetre)

Cordialement


----------



## p4bl0 (8 Janvier 2006)

ah ben merci, du coup j'ai reverifier, et en fait ma fenetre ne s'appellais pas comme je lui avait dit dans interface Builder, j'avais du oublier d'enregistrer! merci !



EDIT :

Maintenant que je sais lire le contenu d'un champs texte, comment écrire dans un champs texte ???

j'ai essayer sans succès :
set (content of text field "chtxt") to monTexte -- marche pas
write monTexte to text field "chtxt" -- write que pour fichier
...


comment faire ?


----------



## Didier Guillion (8 Janvier 2006)

truk2oof a dit:
			
		

> ah ben merci, du coup j'ai reverifier, et en fait ma fenetre ne s'appellais pas comme je lui avait dit dans interface Builder, j'avais du oublier d'enregistrer! merci !
> 
> 
> 
> ...




set (content of text field "chtxt" of window "MaFenetre") to monTexte

ou 

set content of text field "chtxt" of window "MaFenetre" to monTexte

ou

tell window "MaFenetre"
set content of text field "chtxt"  to monTexte
end tell

est correct mais ll faut que monTexte soit du bon type (string)

essaie
set monTexte to monTexte as string
set content of text field "chtxt" of window "MaFenetre" to monTexte

ou
set content of text field "chtxt" to (monTexte as string)

Cordialement


----------



## p4bl0 (9 Janvier 2006)

Merci c'est parfait 

J' ai maintenant tout ce qu'il me faut


----------



## p4bl0 (10 Janvier 2006)

Bon, y a un autre problème...

Sur le site (super au passage) que tu m'a donné, il parle de REReplace, pour remplacer une chaine de caractère par une autre, dans une 3eme mouais: ) bon, et ça marche pas...

N'y a-t-il pas en AS une façon plus simple que ça de transformer l'adresse d'un fichier mac (HD:Users........ en unix ? (/Users/...../) 


merci 

Merci Didier Guillon, j'ai changer les termes rechercher et je suis tomber sur ça :
http://forums.macg.co/vbulletin/showthread.php?t=97120&highlight=apple+script+path+unix


ça m'étonnait aussi que ce sujet n'ai jamais été traité !


----------



## Didier Guillion (11 Janvier 2006)

Il vaut mieux en effet utiliser les informations du sujet que tu cite.
La transformation d'un chemin en chemin Mac OS X n'est pas simplement un remplacement des ":" par "/".

Cordialement


----------



## p4bl0 (11 Janvier 2006)

Didier Guillion a dit:
			
		

> Il vaut mieux en effet utiliser les informations du sujet que tu cite.
> La transformation d'un chemin en chemin Mac OS X n'est pas simplement un remplacement des ":" par "/".
> 
> Cordialement


c'est vrai qu'il faut enlever le nom du volume aussi...


en tout cas, encore merci pour ton aide plus que précieuse 
=========
EDIT :

 encore un problème... Comment faire pour connaitre le nom du volume (ou même sans le connaitre, mais avec un "path to") pour accéder au dossier de fichier temporaires ?
(c'est /private/tmp/), j'ai pas trouver sur scripteur.com

en fait c'est pour ouvrir un fichier dans /private/tmp, donc si j'arrive à stocker dans la variable "volume" le nom du volume ou il y a mac os x, je peut faire ça :

```
set file to volume & ":private:tmp:monfichier" as alias
```

mais je ne sais comment récupérer le nom du volume

merci.


----------



## p4bl0 (13 Janvier 2006)

Je voudrais aussi savoir comment faire pour savoir quel est le bouton radio sélectionné sachant que l'ensemble des 4 boutons s'appelle Radio et que les boutons s'appelle a, b, c, d dans les champs AppleScript dans IB.


Comment faire ?


J'ai (au hasard) essayer "set radioCoche to selected button of "Radio" of window "fenetre""
mais ça marceh pas :rateau:


merci d'avance


----------



## Didier Guillion (14 Janvier 2006)

truk2oof a dit:
			
		

> Je voudrais aussi savoir comment faire pour savoir quel est le bouton radio sélectionné sachant que l'ensemble des 4 boutons s'appelle Radio et que les boutons s'appelle a, b, c, d dans les champs AppleScript dans IB.
> 
> 
> Comment faire ?
> ...




Normallement des boutons sont rangés dans une matrix

La doc est ici :

http://developer.apple.com/document...ce/sr5_control_suite/chapter_5_section_6.html


Du genre :

 set machin to current row of matrix "Radio"

Cordialement


----------

