FORUM DE DISCUSSION SUR LE LANGAGE PANORAMIC
Vous souhaitez réagir à ce message ? Créez un compte en quelques clics ou connectez-vous pour continuer.
FORUM DE DISCUSSION SUR LE LANGAGE PANORAMIC

Développement d'applications avec le langage Panoramic
 
AccueilAccueil  RechercherRechercher  Dernières imagesDernières images  S'enregistrerS'enregistrer  MembresMembres  Connexion  
Derniers sujets
» Logiciel de planétarium.
Script dynamique en Panoramic Emptypar Pedro Aujourd'hui à 10:37

» Un autre pense-bête...
Script dynamique en Panoramic Emptypar Froggy One Jeu 21 Nov 2024 - 15:54

» Récupération du contenu d'une page html.
Script dynamique en Panoramic Emptypar Pedro Sam 16 Nov 2024 - 14:04

» Décompilation
Script dynamique en Panoramic Emptypar JL35 Mar 12 Nov 2024 - 19:57

» Un album photos comme du temps des grands-mères
Script dynamique en Panoramic Emptypar jjn4 Mar 12 Nov 2024 - 17:23

» traitement d'une feuille excel
Script dynamique en Panoramic Emptypar jjn4 Jeu 7 Nov 2024 - 3:52

» Aide-mémoire mensuel
Script dynamique en Panoramic Emptypar jjn4 Lun 4 Nov 2024 - 18:56

» Des incomprèhension avec Timer
Script dynamique en Panoramic Emptypar Klaus Mer 30 Oct 2024 - 18:26

» KGF_dll - nouvelles versions
Script dynamique en Panoramic Emptypar Klaus Mar 29 Oct 2024 - 17:58

» instructions panoramic
Script dynamique en Panoramic Emptypar maelilou Lun 28 Oct 2024 - 19:51

» Figures fractales
Script dynamique en Panoramic Emptypar Marc Ven 25 Oct 2024 - 12:18

» Panoramic et Scanette
Script dynamique en Panoramic Emptypar Yannick Mer 25 Sep 2024 - 22:16

» Editeur d étiquette avec QR évolutif
Script dynamique en Panoramic Emptypar JL35 Lun 23 Sep 2024 - 22:40

» BUG QR Code DelphiZXingQRCode
Script dynamique en Panoramic Emptypar Yannick Dim 22 Sep 2024 - 11:40

» fichier.exe
Script dynamique en Panoramic Emptypar leclode Ven 20 Sep 2024 - 19:02

Navigation
 Portail
 Index
 Membres
 Profil
 FAQ
 Rechercher
Rechercher
 
 

Résultats par :
 
Rechercher Recherche avancée
Novembre 2024
LunMarMerJeuVenSamDim
    123
45678910
11121314151617
18192021222324
252627282930 
CalendrierCalendrier
Le Deal du moment :
Code promo Nike : -25% dès 50€ ...
Voir le deal

 

 Script dynamique en Panoramic

Aller en bas 
4 participants
AuteurMessage
Klaus

Klaus


Nombre de messages : 12331
Age : 75
Localisation : Ile de France
Date d'inscription : 29/12/2009

Script dynamique en Panoramic Empty
MessageSujet: Script dynamique en Panoramic   Script dynamique en Panoramic EmptyJeu 16 Fév 2012 - 19:01

Je voulais trouver un moyen d'exécuter du code Panoramic dynamiquement, sans avoir à compiler et générer un EXE au préalable. Je m'absente 4 jours et pendant ce temps, je trouve ma solution, et qu'est-ce que je constate au retour ? Jack l'Eclair a fourni l'outil qui permet de faire exactement cela ! Bravo Jack !

Mais je vais mettre ma solution en ligne quand-même. L'idée est la suivante:
- dans un programme Panoramic, on constitue, en cours d'exécution, un morceau de code Panoramic dans une variable, avec des CHR$(13)+CHR$(10) comme séparateur de ligne.
- on crée un fichier temporaire contenant ce code (le fichier "script")
- on lance Panoramic avec la commande EXECUTE, en lui passant ce fichier en paramètre.

Résultat: l'éditeur Panoramic démarre, ayant chargé ce fichier, mais attend la commande "Ecécuter", par le menu, par un click sur l'éclair ou la touche F9.

Alors, j'ai fait une petite DLL qui servira de noyau pour gérer le pilotage d'un programme Windows à partir d'un programme Panoramic. L'idée, c'est de faire croire à l'éditeur Panoramic (ou à tout autre programme par la suite), que certaines touches ont été frappées.

J'ai fait donc une première fonction pour lancer l'exécution du programme que l'éditeur a chargé en mémoire:
ident_panoramic$ = "PANORAMIC EDITOR"
i% = dll_call1("Execute_PANORAMIC",adr(ident_panoramic$))

Cette fonction ne fait que ça: démarrer l'exécution. J'ai fait aussi la fonction réciproque: arrêter un programme Windows. Ceci peut s'appliquer au programme lancé par l'éditeur, puis l'éditeur lui-même ! Voilà:
pour le programme lancé par l'éditeur (le "script"):
ident_srcipt$ = "titre de la fenêtre du programme lancé par l'éditeur" : ' à adapter bien sûr
i% = dll_call2("Stop_PANORAMIC",adr(ident_script$),0)
pour l'éditeur lui-même:
i% = dll_call2("Stop_PANORAMIC",adr(ident_panoramic$),1)
Le second paramètre est 0 dans le cas normal, et 1 dans le cas où le programme demande une confirmation par "Y" pour sortir (comme l'éditeur Panoramic).

Ces fonctions sont dans la nouvelle dll Pilote.dll (dans DLLs divers), et la doc est mise à jour.

Je suis en train d'étendre cette DLL de sorte à pouvoir envoyer n'importe quelle touche à n'importe quel programme, même les touches fonction comme F1 à F12, les flèches, alt, shift, control, numlock, print etc. C'est en bonne voie.

Donc, finalement, ma contribution n'est pas obsolète - elle est un complément ouvrant l'horizon vers d'autres applications. On pourra, par exemple, aller chercher le texte d'une fenêtre Word, le copier dans le presse-papier (tout ça par la simulation des touches qu'on aurait frappé au clavier), puis récupérer le presse-papier dans un mémo. Et ce n'est qu'un exemple. Idem pour les images, ... C'est pourquoi ma DLL s'appelle "Pilote" - c'est bien parce qu'elle permettra de "piloter" d'autres programmes.

La dll est incluse aussi dans le téléchargement global de mes DLL's.

EDIT

Voici un petit programme de démo montrant l'usage de ces fonctions. Un mémo permet de saisir un petit programme (sans coloration syntaxique, bien sûr). Un programme par défaut est proposé - ce programme affiche un bouton "Fermer" qui arrête ce "script".

Quatre boutons de fonctions permettent de lancer ce script selon plusieurs modalités.
Code:

label exec1
label exec2
label exec3
label exec4
label timer15sec

dim ident_test$ : ident_test$ = "Test SCRIPT Panoramic"
dim ident_panoramic$ : ident_panoramic$ = "PANORAMIC EDITOR"
dim ident_script$ : ident_script$ = "SCRIPT_PILOTE"
dim ident_script_string$ : ident_script_string$ = " "+chr$(34)+ident_script$+chr$(34)
dim panoramic$ : panoramic$ = "c:\PROGRA~1\PANORA~1\Panoramic_Editor.exe "
dim script$ : script$ = "panoramic_script.bas"
dim i%, nsec%
dim go% : ' 0=riel en cours  1=Panoramic en cours

height 0,730 : left 0,400 : top 0,50 : caption 0,ident_test$

memo 1 : top 1,10 : left 1,10 : width 1,400 : height 1,600
button 2 : top 2,10 : left 2,420 : caption 2,"Exécuter"
  on_click 2,exec1  : width 2,160
button 3 : top 3,40 : left 3,420 : caption 3,"Exécuter et arrêter après 15 sec."
  on_click 3,exec2 : width 3,160
button 4 : top 4,70 : left 4,420 : caption 4,"Exécuter et laisser"
  on_click 4,exec3 : width 4,160
button 5 : top 5,100 : left 5,420 : caption 5,"Arrêter de force"
  on_click 5,exec4 : width 5,160 : inactive 5
progress_bar 6 : top 6,130 : left 6,420 : hide 6
  min 6,0 : max 6,15 : position 6,0
timer 10 : timer_off 10 : timer_interval 10,1000 : on_timer 10,timer15sec

item_add 1,"label fermer"
item_add 1,"button 1 : caption 1,"+chr$(34)+"Fermer"+chr$(34)
item_add 1,"top 1,300 : left 1,10"
item_add 1,"on_click 1,fermer"
item_add 1,"end"
item_add 1,"fermer:"
item_add 1,"terminate"

end

exec1:
  if go%>0 then return
  go% = 1
  inactive 2 : inactive 3 : inactive 4
  if item_read$(1,1)<>"caption 0,"+ident_script_string$ then item_insert 1,1,"caption 0,"+ident_script_string$
  file_save 1,script$

' lancer l'éditeur avec le script
  execute panoramic$ + script$
' et attendre qu'il démarre
  while HANDLE_FORM(ident_panoramic$)=0
    wait 1
  end_while

' attendre que le l'éditeur soit prêtt
  wait 4000
' et lancer le script
  dll_on "pilote.dll"
  i% = dll_call1("Execute_PANORAMIC",adr(ident_panoramic$))

' attendre que le script soit lancé
  while HANDLE_FORM(ident_script$)=0
    wait 1
  end_while
' puis attendre que le script soit terminé
  while HANDLE_FORM(ident_script$)<>0
    wait 1
  end_while

' alors terminer l'éditeur
  i% = dll_call2("Stop_PANORAMIC",adr(ident_panoramic$),1)
  dll_off
  go% = 0
  active 2 : active 3 : active 4
  return
 
exec2:
  if go%>0 then return
  go% = 1
  inactive 2 : inactive 3 : inactive 4
  if item_read$(1,1)<>"caption 0,"+ident_script_string$ then item_insert 1,1,"caption 0,"+ident_script_string$
  file_save 1,script$

' lancer l'éditeur avec le script
  execute panoramic$ + script$
' et attendre qu'il démarre
  while HANDLE_FORM(ident_panoramic$)=0
    wait 1
  end_while

' attendre que le l'éditeur soit prêtt
  wait 4000
' et lancer le script
  dll_on "pilote.dll"
  i% = dll_call1("Execute_PANORAMIC",adr(ident_panoramic$))

' attendre que le script soit lancé
  while HANDLE_FORM(ident_script$)=0
    wait 1
  end_while
 
' maintenant, attendre 15 secondes
  show 6
  timer_on 10
  return
 
' ici, les 15 secondes d'attende sont terminées
timer15sec:
  timer_off 10
  nsec% = nsec% + 1
  position 6,nsec%
  if nsec%<15
    timer_on 10
    return
  end_if
' alors terminer le script
  i% = dll_call2("Stop_PANORAMIC",adr(ident_script$),0)

' puis attendre que le script soit terminé
  while HANDLE_FORM(ident_script$)<>0
    wait 1
  end_while

' alors terminer l'éditeur
  i% = dll_call2("Stop_PANORAMIC",adr(ident_panoramic$),1)
  dll_off
  go% = 0
  hide 6
  active 2 : active 3 : active 4
  return
 
exec3:
  if go%>0 then return
  inactive 2 : inactive 3 : inactive 4
  go% = 1
  inactive 2 : inactive 3 : inactive 4 : active 5
  if item_read$(1,1)<>"caption 0,"+ident_script_string$ then item_insert 1,1,"caption 0,"+ident_script_string$
  file_save 1,script$

' lancer l'éditeur avec le script
  execute panoramic$ + script$
' et attendre qu'il démarre
  while HANDLE_FORM(ident_panoramic$)=0
    wait 1
  end_while

' attendre que le l'éditeur soit prêtt
  wait 4000
' et lancer le script
  dll_on "pilote.dll"
  i% = dll_call1("Execute_PANORAMIC",adr(ident_panoramic$))

' attendre que le script soit lancé
  while HANDLE_FORM(ident_script$)=0
    wait 1
  end_while
  active 5
  return
 
exec4:
  if go%=0 then return
  inactive 5

' alors terminer le script
  i% = dll_call2("Stop_PANORAMIC",adr(ident_script$),0)

' puis attendre que le script soit terminé
  while HANDLE_FORM(ident_script$)<>0
    wait 1
  end_while

' alors terminer l'éditeur
  i% = dll_call2("Stop_PANORAMIC",adr(ident_panoramic$),1)
  dll_off
  go% = 0
  active 2 : active 3 : active 4

  return

Revenir en haut Aller en bas
http://klauspanoramic.comxa.com/index.html
Jack
Admin
Jack


Nombre de messages : 2395
Date d'inscription : 28/05/2007

Script dynamique en Panoramic Empty
MessageSujet: Re: Script dynamique en Panoramic   Script dynamique en Panoramic EmptyVen 17 Fév 2012 - 8:18

Pas mal ton analyse.
Revenir en haut Aller en bas
https://panoramic.1fr1.net
jean_debord

jean_debord


Nombre de messages : 1266
Age : 70
Localisation : Limoges
Date d'inscription : 21/09/2008

Script dynamique en Panoramic Empty
MessageSujet: Re: Script dynamique en Panoramic   Script dynamique en Panoramic EmptyVen 17 Fév 2012 - 8:32

Personnellement, ce qui m'intéresserait, ce serait de pouvoir récupérer la sortie d'un programme Panoramic sous forme d'une chaîne de caractères, sans être obligé de créer un fichier sur disque.

Pour cela, il faudrait que le programme puisse écrire sur la sortie standard (la console). Or à ma connaissance il ne peut écrire que sur des objets graphiques (FORM ou autres).

Il nous faudrait une instruction du type PRINT_TARGET_IS_CONSOLE. Est-ce possible ?

L'intérêt, c'est qu'on pourrait lancer des scripts Panoramic depuis un autre langage comme FreeBASIC qui peut récupérer la sortie standard dans une chaîne de caractères.

(Désolé de réclamer encore des modifications alors que Jack vient tout juste de sortir la version en ligne de commande, mais c'est bien connu : plus on en a, plus on en veut !)
Revenir en haut Aller en bas
http://www.unilim.fr/pages_perso/jean.debord/index.htm
Klaus

Klaus


Nombre de messages : 12331
Age : 75
Localisation : Ile de France
Date d'inscription : 29/12/2009

Script dynamique en Panoramic Empty
MessageSujet: Re: Script dynamique en Panoramic   Script dynamique en Panoramic EmptyVen 17 Fév 2012 - 10:25

J'ai une possibilité de récupérer stdout et stderr ainsi que d'alimenter stdin, à partir d'une DLL en Delphi. Comment écrire sur stdout en Panoramic ? Je n'ai pas trouvé. Tout PRINT est effectivement dirigé sur PRINT_TARGET_IS qui est form 0 par défaut.
Revenir en haut Aller en bas
http://klauspanoramic.comxa.com/index.html
Nardo26

Nardo26


Nombre de messages : 2294
Age : 56
Localisation : Valence
Date d'inscription : 02/07/2010

Script dynamique en Panoramic Empty
MessageSujet: Re: Script dynamique en Panoramic   Script dynamique en Panoramic EmptyVen 17 Fév 2012 - 10:58

... il y a beaucoup de questions sur PRINT_TARGET_IS en ce moment... Wink

Tout à fait d'accord avec jean debord :
PRINT_TARGET_IS_CONSOLE est une bonne idée surtout pour des programmes qui doivent s'executer en ligne de commande et n'ayant pas, par la force des choses, d'interface graphique... Smile
Revenir en haut Aller en bas
http://nardo26.lescigales.org
Klaus

Klaus


Nombre de messages : 12331
Age : 75
Localisation : Ile de France
Date d'inscription : 29/12/2009

Script dynamique en Panoramic Empty
MessageSujet: Re: Script dynamique en Panoramic   Script dynamique en Panoramic EmptyVen 17 Fév 2012 - 12:13

Oui, PRINT_TARGET_IS_CONSOLE serait bien, mais il est évident que dans ce contexte, PRINT_LOCATE, PRINT_X_LOCATE et PRINT_Y_LOCATE devraient être simplement ignorés.
Revenir en haut Aller en bas
http://klauspanoramic.comxa.com/index.html
Klaus

Klaus


Nombre de messages : 12331
Age : 75
Localisation : Ile de France
Date d'inscription : 29/12/2009

Script dynamique en Panoramic Empty
MessageSujet: Re: Script dynamique en Panoramic   Script dynamique en Panoramic EmptyVen 17 Fév 2012 - 19:03

J'ai ajouté des fonctions à ma dll Pilote.dll qui permettent d'écrire du texte dans StdOutput pour pouvoir le récupérer dans le programme suivant. J'ai ouvert un fil de discussion dans la section "Le site de Klaus" au sujet de cette DLL, et je poursuis les discussions à cet sujet à cet endroit. Merci !
Revenir en haut Aller en bas
http://klauspanoramic.comxa.com/index.html
Contenu sponsorisé





Script dynamique en Panoramic Empty
MessageSujet: Re: Script dynamique en Panoramic   Script dynamique en Panoramic Empty

Revenir en haut Aller en bas
 
Script dynamique en Panoramic
Revenir en haut 
Page 1 sur 1
 Sujets similaires
-
» Exécution d'un script en Panoramic SANS compiler !
» Variables locales et DIM dynamique
» dynamique de numérotation
» Au sujet des DIM
» Mon (re)souhait pour un Dim dynamique

Permission de ce forum:Vous ne pouvez pas répondre aux sujets dans ce forum
FORUM DE DISCUSSION SUR LE LANGAGE PANORAMIC :: PANORAMIC :: Vos sources, vos utilitaires à partager-
Sauter vers: