iCal

Bonjour,

Avec Xojo sous OSX, on peut utiliser la classe ADDRESSBOOK pour consulter les contacts de l’utilisateur. J’ai eu beau chercher, mais je n’ai rien trouv d’quivalent pour le calendrier.

Quelqu’un saurait m’indiquer o je pourrais trouver de la documentation pertinente ce sujet ?

Le MBS plugin a des classes pour cela. Peut-tre tlcharger, installer et essayer exemple de projet?

http://monkeybreadsoftware.net/pluginpart-calendarstore.shtml

Merci pour l’info, mais un plugin ne me semble pas une solution dans mon cas.

AppleScript?

Je devrai m’y rsigner…

[quote=117963:@Gilles Rioux]Avec Xojo sous OSX, on peut utiliser la classe ADDRESSBOOK pour consulter les contacts de l’utilisateur. J’ai eu beau chercher, mais je n’ai rien trouvé d’équivalent pour le calendrier.

Quelqu’un saurait m’indiquer où je pourrais trouver de la documentation pertinente à ce sujet ?[/quote]

https://developer.apple.com/library/mac/documentation/Cocoa/Conceptual/DatesAndTimes/Articles/dtCalendars.html

MacOSLib contient le declare pour cette fonction.

La fonction est NSCalendar :wink:

Michel, j’ai bien peur que la documentation que vous me proposez dpasse d’au moins 6 pieds mes capacits d’entendement…

Nanmoins, j’ai russi concocter le script suivant :

tell application "Calendar" activate tell calendar "rdv" set lesevnt to every event end tell set liste to "" repeat with i from 1 to length of lesevnt set liste to liste & start date of item i of lesevnt & "|" set liste to liste & summary of item i of lesevnt & "*" end repeat end tell return liste

Je l’intgre mon programme et je n’ai plus qu’ dcortiquer le rsultat dans Xojo, ce qui correspond mes capacits…

Dtail agaant : l’excution, OSX demande la permission pour fouiller dans son calendrier.

Et merci pour l’info sur MacOSLib. Y’a l de quoi occuper mes longues soires d’hiver.

[quote=118163:@Gilles Rioux]Michel, j’ai bien peur que la documentation que vous me proposez dépasse d’au moins 6 pieds mes capacités d’entendement…

Néanmoins, j’ai réussi à concocter le script suivant :

tell application "Calendar" activate tell calendar "rdv" set lesevnt to every event end tell set liste to "" repeat with i from 1 to length of lesevnt set liste to liste & start date of item i of lesevnt & "|" set liste to liste & summary of item i of lesevnt & "*" end repeat end tell return liste

Je l’intègre à mon programme et je n’ai plus qu’à décortiquer le résultat dans Xojo, ce qui correspond à mes capacités…

Détail agaçant : à l’exécution, OSX demande la permission pour fouiller dans son calendrier.

Et merci pour l’info sur MacOSLib. Y’a là de quoi occuper mes longues soirées d’hiver.[/quote]

Gilles, l’important est que cela fonctionne. En effet, la documentation d’Apple est assez roborative, mais si vous obtenez le résultat recherché en AppleScript, aucun besoin de declare et de maux de tête.

Pour autant que je sache, si vous désirez mettre l’application dans l’Apple Store, la seule chose qui n’est pas permise en AppleScript est de scripter le Finder ( ou System Events). Vous devriez donc être OK puisque vous ne scriptez que Calendar.

J’ai deux scripts :

#1

set liste to "" tell application "Calendar" set lesEvent to every event of calendar "Work" repeat with i from 1 to length of lesEvent set liste to liste & start date of item i of lesEvent & "*" set liste to liste & summary of item i of lesEvent & "|" end repeat end tell return liste

#2

[code]on run

set maintenant to current date
set time of maintenant to 0
set demain to maintenant + 5 * days
set liste to ""

tell application "Calendar"
	set lesEvent to every event of calendar "Work"
	repeat with i from 1 to length of lesEvent
		set m to start date of item i of lesEvent
		set rdv to m - (time of m)
		if (rdv > maintenant) and (rdv < demain) then
			set liste to liste & start date of item i of lesEvent & "*"
			set liste to liste & summary of item i of lesEvent & "|"
		end if
	end repeat
end tell
return liste

end run[/code]

Les deux fonctionnent parfaitement dans l’diteur Applescript.
Le premier fonctionne correctement dans Xojo, mais le deuxime retourne une string vide.

Quelqu’un a une ide ?

Ce n’est pas ncessairement une erreur dans ton 2e script. J’avais une fois la mme chose et du mal dcouvrir la raison. Lorsque tu modifies ton script avec applescript, tu dois explicitement enregistrer ton script. Il ne suffit pas de quitter applescript pour enregistrer automatiquement. Tu dois slectionner File (Fichier) de ton menu et cliquer Save (Enregistrer) aprs avoir fait une modification.

Par ailleurs, la solution avec applescript ne fonctionnait pas sur tous plateformes pour moi. Sur Mavericks il y avait un blocage pour moi, alors que sur ML tout fonctionnait bien.

Si tu as des difficults, tu peux recourir la solution de Christian ou tout autre plugin si tu en trouves. J’ai remarqu que applescript n’est pas toujours idal sur Mac lorsqu’il y a des changements de version OSX.

Merci. Je me console savoir que je ne suis pas le seul pdaler dans la gravelle…

Problme rgl… ou presque.

Je rsume : mon application Xojo incorpore un applescript qui lui retourne un texte. Ce texte est ensuite dcortiqu pour remplir une listbox.

Si j’appelle la mthode qui remplit la listbox dans l’vnement OPEN de la fentre, de l’app ou mme de la listbox avec l’instruction Dim texte as string = rdv , ddv tant le nom du script, la variable texte reste dsesprment vide. Rien, nihil, nada.

Par contre, et c’est ce qui me fait aimer l’informatique, si j’appelle la mme mthode partir de l’vnement action d’un bouton, tout fonctionne correctement.

J’en dduis que Xojo est trop occup lors de l’ouverture de ses fentres, canevas, boutons, etc pour attendre le rsultat de l’appel un pauvre petit script.

Est-ce que vous connaissez un vnement tel que when_completely_opened ou encore when_you_have_a_minute ?

C’est pas parce que Xojo est grand, qu’il n’aime pas les petits, mais c’est parce qu’il doit s’occuper, pour une raison que je ne connais pas, de beaucoup plus petites choses d’abord, pour s’occuper de ton petit script la fin. C’est ainsi que tu crois alors que ton petit script est trs pauvre, alors qu’en fait il est le plus riche lorsque tu le compares aux autres petites choses, qui elles sont vraiment pauvres et ncessitent donc vraiment de la priorit.

C’est parce tu as rflchi comme a que tu n’arrives pas trouver une solution. Mais tu vois clairement que ton raisonnement ne peut pas tre correct.

Pour que je puisse t’aider tu dois me rpondre la question suivante: Es-tu vraiment certain que ta variable texte est vide? Comment as-tu vrifi que cette variable reste vide?

[quote=128930:@Gilles Rioux]Problème réglé… ou presque.

Je résume : mon application Xojo incorpore un applescript qui lui retourne un texte. Ce texte est ensuite décortiqué pour remplir une listbox.

Si j’appelle la méthode qui remplit la listbox dans l’événement OPEN de la fenêtre, de l’app ou même de la listbox avec l’instruction Dim texte as string = rdv , ddv étant le nom du script, la variable texte reste désespérément vide. Rien, nihil, nada.

Par contre, et c’est ce qui me fait aimer l’informatique, si j’appelle la même méthode à partir de l’événement action d’un bouton, tout fonctionne correctement.

J’en déduis que Xojo est trop occupé lors de l’ouverture de ses fenêtres, canevas, boutons, etc pour attendre le résultat de l’appel à un pauvre petit script.

Est-ce que vous connaissez un événement tel que when_completely_opened ou encore when_you_have_a_minute ?[/quote]

  • Copiez l’évènement Action du bouton dans un Timer placé sur la page, réglé à Off dans l’inspecteur
  • Ajoutez à la fin de l’évènement Action du Timer :
Me.enabled = False
  • Dans l’evènement Open, lancez le Timer comme suit :

Timer1.Mode = Timer.ModeSingle Timer1.Enabled = True

Je n’ai pas idée de la Periode qui obtiendra le meilleur résultat. Essayez un quart de seconde avec 250, puis réduisez tant que le texte s’affiche correctement.

[quote=128937:@Payam Arzani]
Pour que je puisse t’aider tu dois me répondre la question suivante: Es-tu vraiment certain que ta variable texte est vide? Comment as-tu vérifié que cette variable reste vide?[/quote]

Si je place msgbox str(len(texte)) immédiatement après l’appel du script et que j’obtiens 0, peut-on raisonnablement penser que la variable texte est vide ?

[quote=128946:@Michel Bujardet]Timer1.Mode = Timer.ModeSingle
Timer1.Enabled = True[/quote]

Succès !

Michel, le jour où vous mettrez en vente votre expérience, pouvez-vous m’avertir ?

[quote=129018:@Gilles Rioux]Michel, le jour où vous mettrez en vente votre expérience, pouvez-vous m’avertir ?
[/quote]

Promis :wink:

Je me pose une question :
Pourquoi crire Timer1.Enabled = True ?

Timer.ModeSingle ne suffit-il pas lancer le Timer, qui va ne s’excuter qu’une seule et unique fois (donc pas besoin non plus d’utiliser Timer1.Enabled = False) ?

[quote=129270:@FranoisVanLerberghe]Je me pose une question :
Pourquoi crire Timer1.Enabled = True ?

Timer.ModeSingle ne suffit-il pas lancer le Timer, qui va ne s’excuter qu’une seule et unique fois (donc pas besoin non plus d’utiliser Timer1.Enabled = False) ?[/quote]

Si vous ne mettez pas le timer sur Off dans l’inspecteur, il dmarrera immdiatement lorsque le programme se lance.

ModeSingle indique simplement que lorsqu’il est lanc, il ne dclenche Action qu’une fois.

Timer1.Enabled = True lance le timer au bon moment, et Timer1.Enabled = False le clot pour que la fois d’aprs, il puisse se dclencher une fois de plus.