Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

AJOUTER UN SCRIPTING SIMPLE CLAIRE ET EFFICACE A VOTRE APPLICATION DELPHI !


Information sur la source

Catégorie :Exécution Classé sous : script, scripting, execution, code Niveau : Initié Date de création : 21/01/2007 Date de mise à jour : 22/10/2007 13:49:06 Vu / téléchargé: 3 346 / 516

Note :
Aucune note

Commentaire sur cette source (8)
Ajouter un commentaire et/ou une note

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

Fichier Zip

Pour les "Membres Club", vous pouvez télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !
  •   Samples
    • Alphablend.ksfTélécharger ce fichier [Réservé aux membres club]124 octets
    • aptrray.ksfTélécharger ce fichier [Réservé aux membres club]236 octets
    • array.ksfTélécharger ce fichier [Réservé aux membres club]222 octets
    • Binary to decimal.ksfTélécharger ce fichier [Réservé aux membres club]165 octets
    • CPF Maker.ksfTélécharger ce fichier [Réservé aux membres club]464 octets
    • Decimal to binary.ksfTélécharger ce fichier [Réservé aux membres club]216 octets
    • Decimal to hexa.ksfTélécharger ce fichier [Réservé aux membres club]266 octets
    • Decimal to octal.ksfTélécharger ce fichier [Réservé aux membres club]143 octets
    • Factorial.ksfTélécharger ce fichier [Réservé aux membres club]127 octets
    • for.ksfTélécharger ce fichier [Réservé aux membres club]112 octets
    • lbl.ksfTélécharger ce fichier [Réservé aux membres club]355 octets
    • Math Board.ksfTélécharger ce fichier [Réservé aux membres club]177 octets
    • Mix Letters.ksfTélécharger ce fichier [Réservé aux membres club]264 octets
    • object.ksfTélécharger ce fichier [Réservé aux membres club]90 octets
    • object1.ksfTélécharger ce fichier [Réservé aux membres club]34 octets
    • object2.ksfTélécharger ce fichier [Réservé aux membres club]86 octets
    • object3.ksfTélécharger ce fichier [Réservé aux membres club]34 octets
    • object4.ksfTélécharger ce fichier [Réservé aux membres club]96 octets
    • Propercase.ksfTélécharger ce fichier [Réservé aux membres club]329 octets
    • Replace String.ksfTélécharger ce fichier [Réservé aux membres club]182 octets
  • Notes.txtTélécharger ce fichier [Réservé aux membres club]Voir ce fichier1 103 octets
  • Passcript.pasTélécharger ce fichier [Réservé aux membres club]Voir ce fichier34 678 octets
  • Script._x_Télécharger ce fichier [Réservé aux membres club]738 304 octets
  • Script.cfgTélécharger ce fichier [Réservé aux membres club]Voir ce fichier434 octets
  • Script.dofTélécharger ce fichier [Réservé aux membres club]Voir ce fichier2 422 octets
  • Script.dprTélécharger ce fichier [Réservé aux membres club]Voir ce fichier333 octets
  • Script.resTélécharger ce fichier [Réservé aux membres club]1 536 octets
  • SpecProc.pasTélécharger ce fichier [Réservé aux membres club]Voir ce fichier19 245 octets
  • untAbout.dfmTélécharger ce fichier [Réservé aux membres club]7 832 octets
  • untAbout.pasTélécharger ce fichier [Réservé aux membres club]Voir ce fichier2 135 octets
  • untEditor.ddpTélécharger ce fichier [Réservé aux membres club]51 octets
  • untEditor.dfmTélécharger ce fichier [Réservé aux membres club]62 352 octets
  • untEditor.pasTélécharger ce fichier [Réservé aux membres club]Voir ce fichier13 809 octets
  • untSamples.dfmTélécharger ce fichier [Réservé aux membres club]1 113 octets
  • untSamples.pasTélécharger ce fichier [Réservé aux membres club]Voir ce fichier1 331 octets

Télécharger le zip

Historique

22 janvier 2007 13:05:51 :
Ajouter du support de tableaux bidimentionnel et unidimentionnel en variant déclaration comme ceci "pl:=array(10,20)" puis accés comme delphi "pl[10,20]:=448" ou "pl:=array(3)" il existe une différence entre pl[0]:="ok" pl[1]:="deux" pl[2]:="komsto" <- chaine de caractere formaté : "ok·deux·komsto" ce qui veut dire qu'on peut déclarer un tableau directement en entrant "·" s'obtient en tapant alt+250 pl:="Paris·Rouen·Montpellier·Lyon" et declaration directe tel que pl:=array(3) <- pointeur crée sur un tableau de variant de dimesion [3,1] je ne sais pas si l'une est plus rapide que l'autre
22 janvier 2007 22:26:34 :
avant "for (" au lieu de "for(" et toutes les instructions ne fonctionnait pas. maintenant si !
22 janvier 2007 23:09:24 :
correction d'un petit bug qui supprimer les espaces pour les procedure : ex : showmsg("Roberto le plus fort") >> en sortie on avait "Robertoleplusfort" ! ahhhhh c'est un peu mieux !
22 octobre 2007 13:49:07 :
Ajout de l'acces aux objets de la fiche par le scripting.

Commentaires et avis

signaler à un administrateur
Commentaire de Forman le 22/01/2007 10:12:50

Salut,

il manque l'unité specproc.pas, référencée dans PasScript.pas

signaler à un administrateur
Commentaire de Mokost le 22/01/2007 11:42:59

Salut Forman, désolé de ne pas avoir précisé mais tu peux la trouver ici :

http://www.delphifr.com/codes/MANIPULATION-CHAINES-CARACTERES_31504.aspx

signaler à un administrateur
Commentaire de Forman le 22/01/2007 16:30:09

Re-salut,

je viens de regarder (pas dans les détails pour l'instant) et ça me parait pas mal du tout. J'ai toutefois quelques remarques:
-Les erreurs de syntaxes ne sont pas signalées (et provoquent en général une EIndexOutOfBound ou EAccessViolation)
-Les résultats sont "imprédictibles" lorsqu'on appelle une procédure/fontion avec un nombre d'arguments non valide. Par exemple: ShowMsg("Salut") en lui-même ne fait rien, mais s'il y a du code après il peut le faire bugger.

J'en profite pour faire ma pub: pour faire un analyseur syntaxique, j'ai programmé COW, disponible ici:
http://www.delphifr.com/codes/COW-FOR-DELPHI7-GENERATEUR-CODE-POUR-GRAMMAIRES-FORMELLES_38931.aspx
Pour l'instant il ne fonctionne qu'avec Delphi7 mais je suis en train de le refaire pour qu'il puisse s'intégrer avec d'autres versions, avec une architecture plus légère. L'intérêt de définir la syntaxe ainsi, c'est que les erreurs de syntaxe sont détectées, et affichées explicitement.

En tout cas beau travail jusque là!

signaler à un administrateur
Commentaire de Mokost le 22/01/2007 18:44:33

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.

signaler à un administrateur
Commentaire de cantador le 22/01/2007 19:17:25

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

signaler à un administrateur
Commentaire de Forman le 22/01/2007 19:37:18

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

signaler à un administrateur
Commentaire de cantador le 22/01/2007 22:05:58

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.

signaler à un administrateur
Commentaire de Mokost le 22/01/2007 22:25:18

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

Ajouter un commentaire

Discussions en rapport avec ce code source dans le forum

Execution d'Application (EXE) [ par MAsterC ] Salut à tous,Avec mon programme je voudrai exécuter un jeux... en appuyant sur un "button"...J'ai essayé avec SHELLAPI, ShellExecute(0,'open' ........ Table.emptytable -> erreur ? [ par manson34 ] Je veux vider une table (apres l'execution d'un tbatchmove) grace a la commande : table.emptytable; Mais a l'execution j'ai le Execution d'un code en pascal dans un programme en pascal [ par Mokost ] Bonjour tout le monde,je pense que vous devez trouver le titre de mon sujet un peu vague aussi je vais essayer de l'expliquer du mieux que je le puiss Afficher des images pendant l'execution d'un code. [ par kacola ] Bonjour,Voila, j'ai un code qui s'exécute pendant une à deux minutes, il s'agit d'une analyse d'images bmp.Je souhaiterais que ces images s'affichent Temps d'acces execution script [ par ludopika ] Bonjour à tous,J'ai un petit soucis avec l'execution d'un script. En fait mon fichier contient 1000000 d'enregistrements à insérer dans une table...L' Générer un code a partir des champs? [ par abdousoft ] Sltje suis en Cours de developper un programme de gestion des cartes fiscaleset je trouve un probleme pour generer le numero de ces derniers.Programme application delphi [ par oudihatma ] J'ai plusieurs tables : Employé (cod_emp,nom,pre,, Key codes... [ par ELCouz ] Bonjour,jaimerais savoir si qqn connais un site ou on peu voir tout les codes KEY de F1 a la touche standby etc,,,bref les codes a placer dans la sent interet du try...finally [ par Guillemouze ] salut a tous, je me posait une question toute bete : quel est l'interet du try...finally?etant donne qu'on ne peut pas faire de tryexceptfinallyendon Fonctionnement du DBImage [ par simonpelloquin ] Bonjour à tous, Suite à une discussion avec (entre autres) Ali_Usto : http://www.delphifr.com/infomsg_IMAGE-DANS-BASE-DONNEE_956002.aspx#25 , nous avo


Nos sponsors

Sondage...

CalendriCode

Octobre 2008
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
2728293031  

Consulter la suite du CalendriCode

Téléchargements

Logiciels à télécharger sur le même thème :



Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel BAÏSE, Merci à Vincent pour ses précieux conseils
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés
Temps d'éxécution de la page : 0,59 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.