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
» Gestion d'un système client-serveur.
Script dynamique en Panoramic Emptypar Klaus Ven 17 Mai 2024 - 14:02

» item_index(résolu)
Script dynamique en Panoramic Emptypar jjn4 Mar 14 Mai 2024 - 19:38

» Bataille terrestre
Script dynamique en Panoramic Emptypar jjn4 Lun 13 Mai 2024 - 15:01

» SineCube
Script dynamique en Panoramic Emptypar Marc Sam 11 Mai 2024 - 12:38

» Editeur EliP 6 : Le Tiny éditeur avec 25 onglets de travail
Script dynamique en Panoramic Emptypar Marc Sam 11 Mai 2024 - 12:22

» Philharmusique
Script dynamique en Panoramic Emptypar jjn4 Ven 10 Mai 2024 - 13:58

» PANORAMIC V 1
Script dynamique en Panoramic Emptypar papydall Jeu 9 Mai 2024 - 3:22

» select intégrés [résolu]
Script dynamique en Panoramic Emptypar jjn4 Mer 8 Mai 2024 - 17:00

» number_mouse_up
Script dynamique en Panoramic Emptypar jjn4 Mer 8 Mai 2024 - 11:59

» Aide de PANORAMIC
Script dynamique en Panoramic Emptypar jjn4 Mer 8 Mai 2024 - 11:16

» trop de fichiers en cours
Script dynamique en Panoramic Emptypar lepetitmarocain Mer 8 Mai 2024 - 10:43

» Je teste PANORAMIC V 1 beta 1
Script dynamique en Panoramic Emptypar papydall Mer 8 Mai 2024 - 4:17

» bouton dans autre form que 0(résolu)
Script dynamique en Panoramic Emptypar leclode Lun 6 Mai 2024 - 13:59

» KGF_dll - nouvelles versions
Script dynamique en Panoramic Emptypar Klaus Lun 6 Mai 2024 - 11:41

» @Jack
Script dynamique en Panoramic Emptypar Jack Mar 30 Avr 2024 - 20:40

Navigation
 Portail
 Index
 Membres
 Profil
 FAQ
 Rechercher
Rechercher
 
 

Résultats par :
 
Rechercher Recherche avancée
Mai 2024
LunMarMerJeuVenSamDim
  12345
6789101112
13141516171819
20212223242526
2728293031  
CalendrierCalendrier
-39%
Le deal à ne pas rater :
Pack Home Cinéma Magnat Monitor : Ampli DENON AVR-X2800H, Enceinte ...
1190 € 1950 €
Voir le deal

 

 Script dynamique en Panoramic

Aller en bas 
4 participants
AuteurMessage
Klaus

Klaus


Nombre de messages : 12301
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 : 2386
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 : 1250
Age : 69
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 : 12301
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 : 55
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 : 12301
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 : 12301
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
» Au sujet des DIM
» Dim dynamique (suite)
» 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: