[AppleScript] assigner un nom à un champ texte

p4bl0

Membre expert
Club iGen
12 Juillet 2004
4 772
423
34
$PWD
p4bl0.net
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 :
Bloc de code:
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à ?
 
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".

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

ensuite je fait en AppleScript :
Bloc de code:
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à ?

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
 
  • J’aime
Réactions: p4bl0
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" ?? :confused:



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


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
 
extrait de mon script :
Bloc de code:
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 :
Bloc de code:
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
Bloc de code:
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
 
Ç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à ;)
 
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"
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à ;)

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
 
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



Si quelqu'un peut m'aider :)


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
 
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 ?
 
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 !



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 ?


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
 
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: :p) 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 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 :up:
=========
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 :
Bloc de code:
set file to volume & ":private:tmp:monfichier" as alias

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

merci.
 
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 :zen:
 
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 ?


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


merci d'avance :zen:


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