FORUM DE DISCUSSION SUR LE LANGAGE PANORAMIC

Développement d'applications avec le langage Panoramic
 
AccueilAccueil  FAQFAQ  RechercherRechercher  S'enregistrerS'enregistrer  MembresMembres  GroupesGroupes  Connexion  
Derniers sujets
» Tout est tranquille
par Jean Claude Hier à 21:41

» Texte en gif animé
par JL35 Hier à 13:29

» BasicEditor
par Yannick Mer 20 Sep 2017 - 17:17

» Simuler l’appui d'une touche ou combinaison de touches.
par pascal10000 Lun 18 Sep 2017 - 19:30

» Utilisation de HVIEWER pour afficher des images
par papydall Lun 18 Sep 2017 - 17:43

» Panoramic et les gifs animés.
par papydall Lun 18 Sep 2017 - 16:32

» recover source
par pascal10000 Dim 17 Sep 2017 - 14:21

» Recent dans vos menu
par Jean Claude Sam 16 Sep 2017 - 11:41

» Comment centrer un texte 3D.
par pascal10000 Ven 15 Sep 2017 - 20:20

» Carte interface 16 entrées et 16 sorties
par Jicehel Ven 15 Sep 2017 - 16:30

» Version instantanée V 0.9.28i9 possédant l'objet SYNEDIT
par pascal10000 Ven 15 Sep 2017 - 16:20

» Compilateur FBPano
par jean_debord Ven 15 Sep 2017 - 9:59

» 1 (en analyse): 3D_TARGET_IS ne fonctionne pas sur 3D_TEXT
par Jack Jeu 14 Sep 2017 - 19:52

» Problème avec la 3D.
par Jack Jeu 14 Sep 2017 - 18:06

» Test de la 3D.
par mindstorm Mer 13 Sep 2017 - 19:45

Navigation
 Portail
 Index
 Membres
 Profil
 FAQ
 Rechercher
Rechercher
 
 

Résultats par :
 
Rechercher Recherche avancée
Septembre 2017
LunMarMerJeuVenSamDim
    123
45678910
11121314151617
18192021222324
252627282930 
CalendrierCalendrier

Partagez | 
 

 Demande fonction KGF pour inclure une série dans une liste.

Voir le sujet précédent Voir le sujet suivant Aller en bas 
Aller à la page : Précédent  1, 2, 3
AuteurMessage
Klaus

avatar

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

MessageSujet: Re: Demande fonction KGF pour inclure une série dans une liste.   Sam 7 Nov 2015 - 0:55

Citation :

C'est quel programme qui utilise la dll? le programme distant ou celui qui veut lire.
C'est celui qui veut lire le texte du EDIT distant qui daoit faire ça.

Citation :
comment va t'il savoir la longueur du buffer?
De la manière suivante:
Code:
dim longueur%, cmd%,hnd%, buf$
cmd% = 14 : ' valeur décimale du code message WM_GETTEXTLENGTH
hnd% = ... (handle du EDIT dont il faut lire le texte)
longueur% = dll_call4("SendMessage",hnd%,cmd%,0,0)
buf$ = string$(longueur%+1," ")  : ' +1 pour faire de la place pour le séro terminal
...

J'ai également corrigé quelques approximations dans mon code du post précédent. Avec mes excuses...
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://klauspanoramic.comxa.com/index.html
Invité
Invité



MessageSujet: Re: Demande fonction KGF pour inclure une série dans une liste.   Sam 7 Nov 2015 - 1:39

Bien que mes yeux se ferme, j'ai eu envie de tester, mais je mélange les pinceaux. Je pense que ce serait intéressant de bien mettre le procédé au point. Ca servira un moment ou un autre.

Ca ne marche pas, mais je ne sais pas trop comment reprendre le programme, et dans quel ordre il faut procédé.

Je me sers du premier programme en exemple à lire. Il faut faire un exécutable de celui-ci avec l'éditeur normal, sinon il faut corriger les erreurs.

Voici tel que j'ai repris ton code. J’ai essayé d'inverser les deux routines, c'est le même résultat. Faut pas m'en vouloir mais je ne suis plus frais en fin de journée.

Code:
' teste communication avec edit compilateur
label ecrire , lire , fin , lire_edit
dim dll$ , exe$ , res%,message$ , recu% , handle$
left 0,600
dll$ = "c:\synedit_editor\kgf.dll"                    :' à modifier
exe$ = "c:\pano\divers\testeeditcompile.exe":' mettre le nom du 1er programme compilé

handle$ = "Réception"

execute exe$ : wait 1000

edit 10:width 10,500:font_size 10,10
button 11:top 11,40:caption 11,"écrire":on_click 11,ecrire
button 12:top 12,40:left 12,150:caption 12,"envoi memo":on_click 12,lire
button 13:top 13,40:left 13,300:caption 13,"stop":on_click 13,fin
button 14:top 14,40:left 14,450:caption 14,"Lire autre":on_click 14,lire_edit

memo 15:top 15,80:width 15,800:height 15,300:font_size 15,10:font_bold 15

repeat
  recu%=clipboard_string_paste$
until recu% > 0 or scancode = 27
caption 0, recu%

end
=============
ecrire:
 message$ = text$(10)
 dll_on dll$
 res% = DLL_call3("IPCSendMessage",adr(message$),len(message$),recu%)
 dll_off
return

lire:
  if count(15) > 0
      lire()
      dll_on dll$
      res% = DLL_call3("IPCSendMessage",adr(message$),len(message$),recu%)
      dll_off
  end_if
return

sub lire()
  dim_local a,aa$ , bb$
  for a = 1 to count(15)
      aa$ = item_read$(15,a)
      bb$ = bb$+aa$+chr$(13)+chr$(10)
  next a
  message$ = bb$
end_sub

lire_edit:
  lire_edit()
return

sub lire_edit()
  if recu% = 0 then end_sub :' handle de l'edit
  dim_local longueur%, cmd%,hnd%, buf$ , adr% , adr2% , i% , wparam%
  dll_on "User32.dll"

  cmd% = 13
  wparam% = 255
  buf$ = string$(255," ")
  adr% = adr(buf$)
  adr2% = adr(lparam%)
  for i%=0 to 3
    poke adr2%+i%,peek(adr%+i%)
  next i%
  res% = dll_call4("SendMessage",recu%,cmd%,wparam%,lparam%)
  ' -------------
  cmd% = 14 : ' valeur décimale du code message WM_GETTEXTLENGTH
  ' hnd% = ... (handle du EDIT dont il faut lire le texte)
  longueur% = dll_call4("SendMessage",recu%,cmd%,0,0)
  buf$ = string$(longueur%+1," ")  : ' +1 pour faire de la place pour le séro terminal
  ' -------------------------------------------------------------
  dll_off
end_sub

fin:
  text 10,"HALT_STOP" : gosub ecrire
  terminate
 

Quand ça marchera, je garderai le code sous le coude, car ça permet plein de choses.
Revenir en haut Aller en bas
Klaus

avatar

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

MessageSujet: Re: Demande fonction KGF pour inclure une série dans une liste.   Sam 7 Nov 2015 - 2:38

Tu devrais relire le texte de la section "Communication entre programmes". Il y a un texte d'explidation génrale qui décrit la définition d'une "boite à lettres" en utilisant un EDIT avec TOP=LEFT=identifiant. Cet identifiant doit être une valeur négative. Ceci est à faire dans le programme contenant l'EDIT à lire ainsi que dans le programme qui lit. Ces deux EDIT doivent évidemment avoir un identifiant différent.

Cet identifiant doit être passé en paramètre à la fonction IPCGetHandle par le programme qui lit. Celle-ci retourne alors le handle de l'EDIT de la boite à lettre du programme distant. Et le programme distant fait de même pour récupérer le handle de la boite à lettre du progframme "lecteur".

A partir de là, on donne un évènement ON_CHANGE a cet EDIT "boite à lettres", dans chacun des deux programmes. On peut alors envoyer un message à l'autre programme, et cet autre programme sera averti via l'évènement ON_CHANGE de sa boite à lettres (le facteur a sonné...). Ceci est vrai dans les deux sens.

Alors, tu procèdes comme suit:
1. définir les boites à lettres avec leur évènement ON_CHANGE dans les deux programmes. Par exemple, avec les ID -2345 et -2346.
2. le programme "lecteur" envoie un message au programme distant, avec un texte "SendHandle".
3. le programme distant analyse le message reçu dans son évènement ON_CHANGE. S'il découvre "SendHandle", alors il envoie à son tour un message au programme "lecteur", avec le texte "Handle="+str$(handle(17)), si 17 est le handle du EDIT à lire.
4. le programme "récepteur", dans son évènement ON_CHANGE, analyse le message. S'il découvre le texte "Handle=", il convertit le reste en entier et le mémorise comme handle.
5. A partir de ce moment, tu peux fermer KGF.dll et utiliser User32.dll comme je l'ai indiqué ci-dessus.

Ou alors, tu restes avec KGF.dll:
1. définir les boites à lettres avec leur évènement ON_CHANGE dans les deux programmes. Par exemple, avec les ID -2345 et -2346.
2. le programme "lecteur" envoie un message au programme distant, avec un texte "SendData".
3. le programme distant analyse le message reçu dans son évènement ON_CHANGE. S'il découvre "SendData", alors il envoie à son tour un message au programme "lecteur", avec le texte Data="+text$(17), si 17 est le handle du EDIT à lire.
4. le programme "récepteur", dans son évènement ON_CHANGE, analyse le message. S'il découvre le texte "Date=", utilise le reste comme étant le contenu du EDIT.

Bien entendu, on peut passer toute donnée en forme de chaîne de caractères, pas seulement le contenu d'un EDIT.
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://klauspanoramic.comxa.com/index.html
Invité
Invité



MessageSujet: Re: Demande fonction KGF pour inclure une série dans une liste.   Sam 7 Nov 2015 - 4:06

Sad  Je me suis endormi sur mon ordi. Désolé.

Pourquoi tu changes de sujet? Il ne s'agit pas de KGF, mais de user32.dll. As-tu fait l'essai du programme?
Si c'est le cas, tu as vu que le handel de l'Edit d'en face est dans le caption de la fenêtre. Je pars du principe que le programme distant ne peux utiliser la dll, et apparemment c'est le cas du compilateur. C'est pas grave, on va en rester là. Si j'ai le temps un jour où je ne serais pas pertubé, je regarderai de nouveau. Il n'y a pas urgence, c'était pour suivre une idée, par curiosité.

Bonne nuit. Sleep
Revenir en haut Aller en bas
Klaus

avatar

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

MessageSujet: Re: Demande fonction KGF pour inclure une série dans une liste.   Sam 7 Nov 2015 - 4:27

Citation :
Il ne s'agit pas de KGF, mais de user32.dll.
Bizarre. Pourtant, tu appelles bien les fonctions IPCxxx, et ce sont des fonctions de KGF.dll, pas de User32.dll.
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://klauspanoramic.comxa.com/index.html
Invité
Invité



MessageSujet: Re: Demande fonction KGF pour inclure une série dans une liste.   Sam 7 Nov 2015 - 10:03

Effectivement il utilise IPC, et ça fonctionne bien. Je n'ai pas ici utilisé IPCGetHandle, mais le presse papier pour récupéré le handle de l'edit, vu que je pars du principe que pour l'instant qu'une dll ne marche pas avec le compilateur (voir message de Papydall à ce sujet).

En lançant le programme, je lance en même temps l'autre programme qui est exe$, c'est-à-dire le premier programme du haut qui doit-être un exécutable! Bon, ensuite dans le programme de droite en écrivant dans l'edit du haut, puis en cliquant sur: 'écrire' , celui-ci est recopié dans celui du programme distant qui est celui de gauche. Là pas de problème.

Maintenant en écrivant dans le memo de droite, puis en cliquant sur 'envoi memo', le memo est recopié dans l'edit du programme de droite, qui le décompose et le réécrit dans le list du même programme. Pas de problème ça fonctionne encore.

Ensuite à la fin du programme appelant, celui qui génère le programme de droite, il y a une autre procédure que j'ai nommé: sub lire_edit(). Cette procédure est en teste, et utilise user32.dll, et c'est de celle-ci qui est question. Elle est d'ailleurs pas fini vu que je ne visualise pas le contenu de ce que j'attends. C'est de ceci que je parle. Elle est censée fonctionner en mettant un texte dans l'edit du programme de droite, puis en cliquant sur le bouton: 'lire autre'. Et là il y a message d'erreur.

Pour moi, normalement la programmation est fini jusqu'à ce soir (comme les autres jours d'ailleurs). Et rien ne t'oblige d'y répondre, vu que je suis pas sûre de m'en servir maintenant.
Revenir en haut Aller en bas
Klaus

avatar

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

MessageSujet: Re: Demande fonction KGF pour inclure une série dans une liste.   Sam 7 Nov 2015 - 20:34

Je pense que la sub lire_edit() serait mieux ainsi:
Code:
sub lire_edit()
  if recu% = 0 then end_sub :' handle de l'edit
  dim_local longueur%, cmd%,hnd%, buf$ , adr% , adr2% , i% , wparam%
  dll_on "User32.dll"

  ' -------------
  cmd% = 14 : ' valeur décimale du code message WM_GETTEXTLENGTH
  ' hnd% = ... (handle du EDIT dont il faut lire le texte)
  longueur% = dll_call4("SendMessage",recu%,cmd%,0,0)
  buf$ = string$(longueur%+1," ")  : ' +1 pour faire de la place pour le séro terminal
  ' -------------------------------------------------------------
  cmd% = 13
  wparam% = longueur%
  adr% = adr(buf$)
  adr2% = adr(lparam%)
  for i%=0 to 3
    poke adr2%+i%,peek(adr%+i%)
  next i%
  res% = dll_call4("SendMessage",recu%,cmd%,wparam%,lparam%)
  dll_off
end_sub
On demande d'abord la longueur du contenu du EDIT, on prépare ensuite la variable buf$, puis on lit le contenu du EDIT dans la variable buf$.
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://klauspanoramic.comxa.com/index.html
Invité
Invité



MessageSujet: Re: Demande fonction KGF pour inclure une série dans une liste.   Sam 7 Nov 2015 - 20:50

Merci Klaus d'avoir regardé.

Je viens de reporter la sub, mais en ligne 65:   longueur% = dll_call4("SendMessage",recu%,cmd%,0,0) , j'ai le message: (29) Not correct arithmetic expression : Error in function. Line: 65

@+
Revenir en haut Aller en bas
Klaus

avatar

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

MessageSujet: Re: Demande fonction KGF pour inclure une série dans une liste.   Sam 7 Nov 2015 - 21:29

Alors, essaie avec SendMessageA au lieu de SendMessage. Cela prendra la version ANSI de l'API.
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://klauspanoramic.comxa.com/index.html
Invité
Invité



MessageSujet: Re: Demande fonction KGF pour inclure une série dans une liste.   Dim 8 Nov 2015 - 1:24

Oui Klaus, ça fonctionne bien ainsi.

Je publierai le code après l'avoir remanié, pour que celui qui est intéressé puisse utiliser le principe. On pourrait ainsi avoir un programme normal avec l'éditeur, et échangé avec le compilateur des données, pour un affichage rapide. Il faudra attendre un peu, j'ai des choses urgentes à faire.
Revenir en haut Aller en bas
Klaus

avatar

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

MessageSujet: Re: Demande fonction KGF pour inclure une série dans une liste.   Dim 8 Nov 2015 - 3:01

Ouf ! C'est bien - tu y es arrivé ! Je vais y réfléchir, mais je pense que je vais intégrer dans la doc de KGF.dll, ton système de transmission du handle, comme alternative à la fonction IPCGetHandle.
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://klauspanoramic.comxa.com/index.html
Invité
Invité



MessageSujet: Re: Demande fonction KGF pour inclure une série dans une liste.   Dim 8 Nov 2015 - 13:01

Je remets le code de la sub en question, car il y a une modification.

J'ai eu des problèmes de pointeur, mais ainsi ça semble résolu.

Code:
sub lire_edit()
  if recu% = 0 then exit_sub :' handle de l'edit
  dim_local longueur%, cmd%, buf$ , adr% , adr2% , i% , wparam%
  dim_local v , aa$
  dll_on "User32.dll"

  ' -------------
  cmd% = 14 : ' valeur décimale du code message WM_GETTEXTLENGTH
  longueur% = dll_call4("SendMessageA",recu%,cmd%,0,0)
  buf$ = string$(longueur%+1," ")  : ' +1 pour faire de la place pour le zéro terminal
  ' -------------------------------------------------------------
  cmd% = 13
  adr% = adr(buf$)
  adr2% = adr(lparam%)
  wparam% = longueur%  :' indispensable d'avoir une variable qui reprenne longueur%, sinon problème de pointeur
  for i%=0 to 3
    poke adr2%+i%,peek(adr%+i%)
  next i%
  res% = dll_call4("SendMessageA",recu%,cmd%,wparam%+1,lparam%)
  '                                                 +1  car il manque un caractère
  message buf$
  dll_off
return

Mais pour le compilateur, il y a un réel problème avec les label, surtout avec gosub.
Le mélange de sous-programme et de sub posent problème, sans compter des différences en un programme normal et compilé concernant des retours chariots sur un edit.
Revenir en haut Aller en bas
Klaus

avatar

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

MessageSujet: Re: Demande fonction KGF pour inclure une série dans une liste.   Dim 8 Nov 2015 - 16:46

Oui, je sais, Cosmos70. Pour le moment, je suis le compilateur de loin - il y a trop de contraintes et restrictions par rapport à la version interprétée. Plusieurs commandes et fonctions ne sont et ne seront pas implémentées, ce qui fait que les codes existants ne seront pas forcément portables vers le compilateur. Il faudra écrire spécifiquement pour le compilateur.
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://klauspanoramic.comxa.com/index.html
Contenu sponsorisé




MessageSujet: Re: Demande fonction KGF pour inclure une série dans une liste.   

Revenir en haut Aller en bas
 
Demande fonction KGF pour inclure une série dans une liste.
Voir le sujet précédent Voir le sujet suivant Revenir en haut 
Page 3 sur 3Aller à la page : Précédent  1, 2, 3
 Sujets similaires
-
» demande bb code pour ouvrir 1 lien dans nouvel onglet
» Comment faire pour appliquer le code dans ce sujet ?
» Demande info pour ma signature s.v.p.
» probleme pour poser des photos dans un nouveau sujet
» Empêcher la création de topics dans un forum sans pour autant l'interdire dans ses sous forums

Permission de ce forum:Vous ne pouvez pas répondre aux sujets dans ce forum
FORUM DE DISCUSSION SUR LE LANGAGE PANORAMIC :: Activité des sites créés par les Panoramiciens. :: Le site de Klaus-
Sauter vers: