begin process at 2010 03 18 16:43:08
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Exécution

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

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


 Information sur la source

Note :
Aucune note
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 967 / 649

Auteur : Mokost

Ecrire un message privé
Site perso
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

Les Membres Club peuvent 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.

 Sources du même auteur

AFFICHER, TELECHARGER DES IMAGES SE TROUVANT SUR INTERNET DA...
Source avec Zip Source avec une capture GESTION BDD CHEZ UN HEBERGEUR INTERNET QUI NE VOUS NE PERMET...
Source avec Zip Source avec une capture RPG EN DELPHI
Source avec Zip Source avec une capture MARIO BROS
Source avec Zip Source avec une capture EDITEUR DE MAP

 Sources de la même categorie

Source avec Zip Source avec une capture SURVEILLANCE DU CONTENU D'UN DOSSIER par botelec
Source avec Zip GÉNÉRATEUR DE JET DE DÉS par koriteki
Source avec Zip Source avec une capture LES FIBERS : DES THREADS NON PRÉEMPTÉS PAR LE SYSTÈME par Caribensila
Source avec Zip Source avec une capture UAC (USER ACCOUNT CONTROL) - EXÉCUTER UNE APPLICATION EN TAN... par ni69
BLOQUER LE TASKMGR SANS CLÉ DE REGISTRE par craftsystem

 Sources en rapport avec celle ci

Source avec Zip WEB-BUILDER par numeror86
Source avec Zip Source avec une capture 3D-CRADE WIRE MODELER par jyce3d
Source avec Zip MINI SCRIPT (PHP-LIKE) par bubulemaster
CONVERTIR LES CODE HTML EN CARACTÈRES SPÉCIAUX par svendeville
Source avec Zip Source avec une capture KEYGENME par craftsystem

Commentaires et avis

Commentaire de Forman le 22/01/2007 10:12:50

Salut,

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

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

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

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.

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

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

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.

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 compilation de code généré [ par zininf ] bonjour, ma question est la suivante : comment compiler un code généré pendant l'execution pour qu'il sera executé ? je précise : dans une petite appl 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' Execution dynamique [ par alichem8 ] slt , j'ai fait un programme qui sert à verifier le langage d'un automate.J'ai voulu généraliser mon programme pour qu'il reconaisse  n'imprte quel au Deux chaînes à parser [ par corole3 ] Bonjour,je récupère dans deux fichiers les infos sur les process et services en cours. Je voudrais parser les données du premier fichier qui se présen Clé Composée !! [ par tmsarts ] Salut à tousJe travail sur un projet de Budget, et je veut facilité la saisi du code d'opération.Sachant que j'ai :- Une base de donnée "Secteur" avec 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


Nos sponsors


Sondage...

CalendriCode

Mars 2010
LMMJVSD
1234567
891011121314
15161718192021
22232425262728
293031    

Consulter la suite du CalendriCode

Photothèque

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), 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

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 9,641 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales