Ajouter un scripting simple claire et efficace a votre application delphi !

Soyez le premier à donner votre avis sur cette source.

Vue 6 232 fois - Téléchargée 1 043 fois

Description

En faisant un tour sur le net j'ai trouvé cette source qui permet de faire du scripting.
Elle est tellement compréhensible que j'ai pu ajouter un support pour les tableaux unidimentionnel :) et l'instruction goto
Donc si j'y ai pu apporter des modifications avec aisance je n'imagine meme pas ce que VOUS vous pouvez en faire !
Ps : si vous ajouter de nouvelles fonctionnalité prevenez moi !

Source / Exemple :


exemple de script avec un tableau contenant un mélange de chaine et de valeur

	u[0]:="Ligne 1 du tableau"
	u[1]:="Deuxiemme ligne du tableau"
	u[2]:=2
	showmsg(u[2])

exemple avec accées aux composant
        memo1.lines.add("petit teste");

    • 22/10/2007**
Pour permettre au script d'acceder aux composants contenu dans la fiche vous devrez creer 3 fonction : -1 pour la lecture des champs et dont la déclaration est la suivante : VotreMethodeGet(sfield:string;param:TVariantArray):variant; sfield : contient le nom complet du champ param : est un tableau de variant contenant tout les parametres. ex : dans le script "x := monobjet.tableau[0].line[5].cell[1,2];" lors de l'apelle sfield vaudra "monobjet.tableau.line.cell" et param = [0,5,1,2] function VotreFiche.VotreMethodeGet(sfield:string;param:TVariantArray):variant; begin if sfield='self.alphablend' then result := AlphaBlend else if sfield='self.alphablendvalue' then result := AlphaBlendValue else if sfield='self.caption' then result := Caption else if sfield='self.left' then result := left else if sfield='self.top' then result := top else if sfield='memo1.lines.count' then result := memo1.lines.Count else if sfield='memo1.lines.names' then result := memo1.lines.Names[param[0]] else if sfield='memo1.lines.text' then result := memo1.lines.Text else if sfield='memo1.lines' then result := memo1.lines[param[0]] else if sfield='memo1.align' then result := memo1.Align else if sfield='stg.cells' then result := stg.Cells[param[0],param[1]]; end; -2 pour l'ecriture des champs et dont la déclaration est la suivante : VotreMethodeSet(sfield:string;param:TVariantArray;value:variant); sfield : contient le nom complet du champ param : est un tableau de variant contenant tout les parametres. value : est variant contenant la valeur a affecter. ex : dans le script "monobjet.tableau[0].line[5].cell[1,2] := 125;" lors de l'apelle sfield vaudra "monobjet.tableau.line.cell", param = [0,5,1,2] et value = 125 procedure VotreFiche.VotreMethodeSet(sfield:string;param:TVariantArray;value:variant); begin if sfield='self.alphablend' then AlphaBlend:=value else if sfield='self.alphablendvalue' then AlphaBlendValue:=value else if sfield='self.caption' then Caption:=value else if sfield='self.left' then left:=value else if sfield='self.top' then top:=value else if sfield='memo1.color' then memo1.Color := value else if sfield='memo1.lines.text' then memo1.lines.Text := value else if sfield='memo1.lines' then memo1.lines[param[0]] := value else if sfield='memo1.align' then memo1.Align := value else if sfield='stg.cells' then stg.Cells[param[0],param[1]]:=value; end; -3 pour l'appelle de méthode et dont la déclaration est la suivante : VotreMethodeMethode(sname:string;param:TVariantArray):variant; sname : contient le nom complet de la méthode param : est un tableau de variant contenant tout les parametres. result : est variant contenant le résultat de la méthode si il y en a un. ex : dans le script "memo1.lines.add("125");" lors de l'apelle sname vaudra "memo1.line.add", param = [125] function VotreFiche.VotreMethodeMethode(sname:string;param:TVariantArray):variant; begin if sname='application.processmessages' then Application.ProcessMessages else if sname='memo1.lines.add' then result := memo1.lines.Add(param[0]) else if sname='memo1.lines.indexof' then result := memo1.lines.IndexOf(param[0]) else if sname='memo1.lines.indexofname' then result := memo1.lines.IndexOfName(param[0]) else if sname='memo1.lines.delete' then memo1.lines.delete(param[0]); end; -enfin une fois créer faut les affecter a l'objet du script de cette maniere Exec := TExecute.Create; with Exec do begin FObjetS := VotreFiche.VotreMethodeSet; FObjetG := VotreFiche.VotreMethodeGet; FObjetM := VotreFiche.VotreMethodeMethode; end; Et voila vous avez accees a vos objets. D'autre exemple sont dans le zip

Codes Sources

A voir également

Ajouter un commentaire

Commentaires

Mokost
Messages postés
48
Date d'inscription
jeudi 18 décembre 2003
Statut
Membre
Dernière intervention
29 mars 2010

Forman, je suppose que l'erreur viens du fait que j'ai mis l'exemple avec la dernier version de passcript dans le zip qui contenait l'ancienne version de passcript qui ne fonctionnait pas si on mettait "for (" avec un espace au lieu de "for(". Mais c'est reglé maintenant prends cette derniere version et tu verras ; )
cs_cantador
Messages postés
4716
Date d'inscription
dimanche 26 février 2006
Statut
Modérateur
Dernière intervention
27 mars 2018
11
merci forman..je ne savais pas pour GExperts
peut-être est-ce une nouvelle option ?
en tout cas je vais tester cette possibilité car ça devient utile pour moi.
cs_Forman
Messages postés
600
Date d'inscription
samedi 8 juin 2002
Statut
Membre
Dernière intervention
6 avril 2010
1
Cantador: il y a GExperts qui est pas mal et permet entre autres de mettre la palette sur plusieurs rangées:
http://www.gexperts.org/
Il est assez léger en tout cas je n'ai jamais eu de problèmes avec.

Mokost: oui mais c'est quand même ennuyeux pour celui qui écrit un script de devoir chercher à tâtons où s'est glissée l'erreur. Par exemple, dans les samples que tu donnes, le fichier aptrray.ksf.ksf bugge (EAccessViolation chez moi), mais je suis incapable de dire pourquoi...
cs_cantador
Messages postés
4716
Date d'inscription
dimanche 26 février 2006
Statut
Modérateur
Dernière intervention
27 mars 2018
11
Forman :
J'ai jeté un oeil sur le lien "Analyseur syntaxique" et j'ai noté
gadget IDE..
Il n'y aurait pas par hasard, un truc qui permettrait d'afficher les icones de la palette de D7 sur plusieurs rangées ?
(il y a bien CodeRush mais bcp trop lourd..)
Mokost
Messages postés
48
Date d'inscription
jeudi 18 décembre 2003
Statut
Membre
Dernière intervention
29 mars 2010

oui c'est vrai qu'aucune erreur n'est signalées ! Mais avant tout c'est un code pour permettre la flexible de l'application au develloper et c'est a lui de faire attention a tout ceci. Mais je vais y travailler ! Un point trés négatif j'avoue mais comme je l'ai c'est tellement simple qu'on l'ajoute soit même. Sinon j'ai regardé pour ta pub, je te tire mon chapeau. C'est vraiment trés fort ce que tu as fait.

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.