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.
KGF_dll - nouvelles versions - Page 31 Emptypar Pedro Aujourd'hui à 10:37

» Un autre pense-bête...
KGF_dll - nouvelles versions - Page 31 Emptypar Froggy One Jeu 21 Nov 2024 - 15:54

» Récupération du contenu d'une page html.
KGF_dll - nouvelles versions - Page 31 Emptypar Pedro Sam 16 Nov 2024 - 14:04

» Décompilation
KGF_dll - nouvelles versions - Page 31 Emptypar JL35 Mar 12 Nov 2024 - 19:57

» Un album photos comme du temps des grands-mères
KGF_dll - nouvelles versions - Page 31 Emptypar jjn4 Mar 12 Nov 2024 - 17:23

» traitement d'une feuille excel
KGF_dll - nouvelles versions - Page 31 Emptypar jjn4 Jeu 7 Nov 2024 - 3:52

» Aide-mémoire mensuel
KGF_dll - nouvelles versions - Page 31 Emptypar jjn4 Lun 4 Nov 2024 - 18:56

» Des incomprèhension avec Timer
KGF_dll - nouvelles versions - Page 31 Emptypar Klaus Mer 30 Oct 2024 - 18:26

» KGF_dll - nouvelles versions
KGF_dll - nouvelles versions - Page 31 Emptypar Klaus Mar 29 Oct 2024 - 17:58

» instructions panoramic
KGF_dll - nouvelles versions - Page 31 Emptypar maelilou Lun 28 Oct 2024 - 19:51

» Figures fractales
KGF_dll - nouvelles versions - Page 31 Emptypar Marc Ven 25 Oct 2024 - 12:18

» Panoramic et Scanette
KGF_dll - nouvelles versions - Page 31 Emptypar Yannick Mer 25 Sep 2024 - 22:16

» Editeur d étiquette avec QR évolutif
KGF_dll - nouvelles versions - Page 31 Emptypar JL35 Lun 23 Sep 2024 - 22:40

» BUG QR Code DelphiZXingQRCode
KGF_dll - nouvelles versions - Page 31 Emptypar Yannick Dim 22 Sep 2024 - 11:40

» fichier.exe
KGF_dll - nouvelles versions - Page 31 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 :
Smartphone Xiaomi 14 – 512 Go- 6,36″ 5G ...
Voir le deal
599 €

 

 KGF_dll - nouvelles versions

Aller en bas 
+13
The Gamer
Nardo26
silverman
Minibug
Pedro
mindstorm
pascal10000
Jicehel
papydall
Jean Claude
JL35
Yannick
Klaus
17 participants
Aller à la page : Précédent  1 ... 17 ... 30, 31, 32 ... 35 ... 40  Suivant
AuteurMessage
Yannick




Nombre de messages : 8635
Age : 53
Localisation : Bretagne
Date d'inscription : 15/02/2010

KGF_dll - nouvelles versions - Page 31 Empty
MessageSujet: re   KGF_dll - nouvelles versions - Page 31 EmptyMer 17 Juin 2015 - 19:53

Bien docteur, je me mets à jour.
Laughing
Revenir en haut Aller en bas
Klaus

Klaus


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

KGF_dll - nouvelles versions - Page 31 Empty
MessageSujet: Re: KGF_dll - nouvelles versions   KGF_dll - nouvelles versions - Page 31 EmptyMer 17 Juin 2015 - 21:35

Petite info: l'aide de KGF.dll est maintenant disponible "en ligne", via un lien en bas à gauche de la page d'accueil de mon site, aussi bien pour le site habituel que pour le site miroir sur Olympe. Et pour un accès plus rapide, j'ai placé un raccourci sur le bureau, et un autre dans la barre personnelle de mon Firefox. Voici le lien direct vers l'aide en ligne de KGF.dll (sur le site miroir qui semble plus rapide):
http://klauspanoramic.comxa.com/KGF.html?SommaireIndex.html
Cela ouvre un nouvel onglet.
Revenir en haut Aller en bas
http://klauspanoramic.comxa.com/index.html
papydall

papydall


Nombre de messages : 7017
Age : 74
Localisation : Moknine (Tunisie) Entre la chaise et le clavier
Date d'inscription : 03/03/2012

KGF_dll - nouvelles versions - Page 31 Empty
MessageSujet: Re: KGF_dll - nouvelles versions   KGF_dll - nouvelles versions - Page 31 EmptyMer 17 Juin 2015 - 23:08

Ce lien est bien pratique.
Danke Klaus king
Revenir en haut Aller en bas
http://papydall-panoramic.forumarabia.com/
Minibug

Minibug


Nombre de messages : 4570
Age : 58
Localisation : Vienne (86)
Date d'inscription : 09/02/2012

KGF_dll - nouvelles versions - Page 31 Empty
MessageSujet: Re: KGF_dll - nouvelles versions   KGF_dll - nouvelles versions - Page 31 EmptyMer 17 Juin 2015 - 23:23

Fonction 33 de synedit , TEST OK Wink

Je viens de l'ajouter dans GPP.

Merci Klaus
Revenir en haut Aller en bas
http://gpp.panoramic.free.fr
Jicehel

Jicehel


Nombre de messages : 5947
Age : 52
Localisation : 77500
Date d'inscription : 18/04/2011

KGF_dll - nouvelles versions - Page 31 Empty
MessageSujet: Re: KGF_dll - nouvelles versions   KGF_dll - nouvelles versions - Page 31 EmptyMer 17 Juin 2015 - 23:33

C'est clair, très pratique
Revenir en haut Aller en bas
Yannick




Nombre de messages : 8635
Age : 53
Localisation : Bretagne
Date d'inscription : 15/02/2010

KGF_dll - nouvelles versions - Page 31 Empty
MessageSujet: re   KGF_dll - nouvelles versions - Page 31 EmptyVen 19 Juin 2015 - 21:29

Question à cent sous...

J' ai rencontré un souci avec mon éditeur il y a quelques temps.
Lorsque je lançais un programme qui utilisait KGF.dll depuis mon éditeur,
il y avait un souci.

Dans le cas où je renommerai la dll par un autre nom style : KGF1.dll pour mon éditeur.
Si je lance un programme qui lui utilise KGF.dll et utilise les mêmes fonctions, qu' elle sera la vérité :

Cas 1 : ce sont deux dll differentes qui tournent en même temps et pas de souci
Cas 2 : ce sont les mêmes fonctions, il y a un conflit.


( je suis entrain de me refaire un éditeur mais plus égoïste car il est fait pour ma façon de créer mes programmes
et ne sera pas forcément très "populaire" Laughing )
Revenir en haut Aller en bas
Klaus

Klaus


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

KGF_dll - nouvelles versions - Page 31 Empty
MessageSujet: Re: KGF_dll - nouvelles versions   KGF_dll - nouvelles versions - Page 31 EmptyVen 19 Juin 2015 - 22:35

Le chargement des DLLs est une fonctionnalité de Windows et est indépendante de Panoramic. Voici ce que je puis en dire:
- deux DLLs, physiquement identiques mais portant le même nom, sont des DLLs différentes pour le système. Il n'y a rien en commun entre elles
- deux programmes chargeant la MEME dll, on chacun un espace de données PRIVATIF pour la DLL. Le code est partagé, mais les données sont séparées. Et la DLL est déchargée de la mémoire lorsque le dernier des programmes la libère, pas avant. Il ne peut pas y avoir de conflit.
- un programme qui charge une DLL, ne peut pas savoir si un autre programme a déjà chargé cette DLL. Le chargement de la DLL, vu par un programme donné, se déroulera de la même manière, que la DLL soit déjà chargée par un autre programme ou non
- le seul moyen de savoir si une DLL est actuellement chargée par un programme, c'est d'utiliser une série d'APIs de Windows, pour parcourir la liste des processus actif, et pour chaque processus, parcourir la liste des modules chargés et comparer avec le nom de la DLL cherchée. Et la liste des processus ainsi que celle des modules pour un processus donné change constamment...

Voilà pour l'essentiel. En résumé, un processus qui charge une DLL, a l'impression d'être virtuellement le seul à l'utiliser. Windows gère les alloocations de mémoire de sorte à ne charger le code exécutable de la DLL qu'une seule fois, en le partageant dans l'espace mémoire virtuel de chaque processus qui l'utilise. Mais Windows alloue une portion de mémoire spécifique pour les données de la DLL, propre à chaque processus.

Si, après un plantage d'un programme Panoramic, quelque chose reste en mémoire, c'est parce que le processus du programme Panoramic (Panoramic.exe si c'est lancé par l'éditeur...) est encore dans la liste des processus de Windows. Et quelques fois, il faut lancer le gestionnaire des tâches de Windows et cliquer sur l'onglet "Détail" pour le trouver. On peut alors supprimer ce processus devenu obsolète. Et la DLL est libérée automatiquement, à ce moment.
Revenir en haut Aller en bas
http://klauspanoramic.comxa.com/index.html
Yannick




Nombre de messages : 8635
Age : 53
Localisation : Bretagne
Date d'inscription : 15/02/2010

KGF_dll - nouvelles versions - Page 31 Empty
MessageSujet: re   KGF_dll - nouvelles versions - Page 31 EmptyVen 19 Juin 2015 - 22:41

Merci de ta réponse Klaus.

Le problème vient peut être alors du fait que les deux programmes utilisent l' interpréteur "Panoramic.exe"
Il faudrait peut être que l' éditeur soit compilé.
Revenir en haut Aller en bas
Klaus

Klaus


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

KGF_dll - nouvelles versions - Page 31 Empty
MessageSujet: Re: KGF_dll - nouvelles versions   KGF_dll - nouvelles versions - Page 31 EmptyVen 19 Juin 2015 - 22:49

Si tu lances simultanément deux programmes Panoramic par deux éditeurs Panoramic, ou par deux onglets dans le même éditeur (ça, je ne sais même pas si c'est possible...), il y aura des problèmes avec certitude. L'éditeur de Panoramic, pour chaque exécution, crée un exécutable exactement identique à ce qu'il ferait par la fonction "Exécutable", mais en le plaçant dans un dossier temporaire et en le nommant Panoramic.exe. Deux exécutions simultanées essaient de créer deux fichiers Panoramic.exe dans le même dossier. Et c'est la ratatouille assurée.

Il faut générer au moins un des deux en EXE par le menu Fichiers de l'éditeur, lancer cet exécutable et lancer l'autre par l'éditeur. Alors, plus de conflit.
Revenir en haut Aller en bas
http://klauspanoramic.comxa.com/index.html
Yannick




Nombre de messages : 8635
Age : 53
Localisation : Bretagne
Date d'inscription : 15/02/2010

KGF_dll - nouvelles versions - Page 31 Empty
MessageSujet: re   KGF_dll - nouvelles versions - Page 31 EmptyVen 19 Juin 2015 - 22:56

Le truc

Mon éditeur est un executable panoramic qui englobe donc un panoramic.exe
et le programme créé avec cet executable est lui lancé par un panoramic.exe...
ce qui fait que deux panoramic.exe tournent
mais si les deux essais de créer dans le même temp...Suspect affraid

Heu..je ne sais pas si c' est très clair mais je vous assure que j' suis pas bourré... Laughing
Revenir en haut Aller en bas
Klaus

Klaus


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

KGF_dll - nouvelles versions - Page 31 Empty
MessageSujet: Re: KGF_dll - nouvelles versions   KGF_dll - nouvelles versions - Page 31 EmptyVen 19 Juin 2015 - 23:23

En réalité, cela se présente ainsi:
- Panoramic_Editor contient en interne, une copie de l'interpréteur Panoramic. Cette copie est utilisée pour créer un exécutable Windows avec l'extension EXE, en lui collant le code source de la fenêtre d'édition à la fin, crypté selon un certain algorithme. Et ceci peut être fait en 2 circonstances: soit par le menu Fichiers, fonction Exécutable, un fichier exécutable du nom donné par l'utilisateur est créé, dans le dossier de son choix. Ou alors, en cliquant sur la flèche ou par le menu Exécuter (F9), un fichier Panoramic.exe est créé avec exactement le même contenu, dans un dossier temporaire défini par Windows, mais propre à chaque utilisateur.
- il y a aussi le programme d'exécution fourni par Jack, qui s'appelle malheureusement Panoramic.exe également, pour ajouter à la confusion, au lieu de s'appeler Panoramic_Excutor.exe ou Panoramic_Run.exe, par exemple. Mais techniquement, ce n'est pas un problème, car ce programme réside dans un autre dossier, et en général dans le dossier où est Panoramic_Editor.exe.

Or, pour Windows, ce qui compte, c'est le chemin complet vers l'exécutable. On peut donc très bien avoir Panoramic.exe de Jack, lancé en mode commande avec le nom d'un fichier BAS en paramètre, simultanément avec un programme lancé par l'éditeur par la touche F9. Dans le gestionnaire des tâches de Windows, leus deux apparaîtront comme Panoramic.exe car seul le nom du fichier est affiché, par le chemin complet. Mais il s'agit bien de programmes distincts, différents et indépendants.

Le problème est différent avec deux sources lancés toutes les deux par F9, simultanément. Les apparaîtront également sous le nom de Panoramic.exe. Les deux seront également des processus parfaitement distincts pour Windows. Le problème se situe au niveau de la gestion des fichiers dans le dossier de travail où les deux fichiers Panoramic.exe sont créés par Panoramic_Editor.exe. Et ce à plusieurs niveaux:
- Panoramic_Editor garde une "trace" de l'exécutable qu'il a lancé par F9. Ne serait-ce que pour faire Stop. Or, le lancement du deuxième programme remplace la référence gardée vers le premier, et la synchronisation est foutue.
- Que fait Panoramic_Editor.exe lorsqu'il écrit le fichier Panoramic.exe dans le dossier temporaire ? S'il existe déjà, on sait qu'il sera remplacé. Et qu'arrive-t-il au Panorami.exe créé par le premier lancement ?
- si c'est le même source qui est lancé deux fois, et si ce programme crée ou utilise des fichiers en écriture, que se passe-t-il si les deux copies du même programme accèdent au même fichier ? A moins d'avoir prévu et géré cela dans le programme, c'est la cata...

Donc, conclusion: je JAMAIS produire une situation ou deux (ou plusieurs) programmes Panoramic sont actif simultanément, s'ils sont lancés par F9 à partir de l'éditeur. TOUJOURS générer des programmes exécutables avec des noms significatifs, et lancer ces exécutables par un moyen normal de Windows (double-clic dans l'explorateur des fichiers, clic sur un raccourci menant vers le fichier etc).

EDIT

C'est ainsi que j'ai fait la mise au point dfe Synedit_Editor: à chaque modification, (1) générer l'exécutable, (2) refaire le programme d'installation, (3) réinstaller dans mon dossier test, puis (4) cliquer sur l'icône de Synedit_Editor. Même si les phases 2 et 3 sont propres à des problèmes spécifiques de Synedit_Editor, les phases 1 et 4 sont indispensables dès le moment qu'il y a cohabitation avec d'autres programmes Panoramic. Penses-y - c'est très important !

Une petite remarque, encore: Jack pourrait facilement éviter ce problème en générant, non pas Panoramic.exe, mais Panoramic_hhmmss.exe, avec hhmmss étant l'heure de création. Mais en lisant ceci, il le fera peut-être...
Revenir en haut Aller en bas
http://klauspanoramic.comxa.com/index.html
Yannick




Nombre de messages : 8635
Age : 53
Localisation : Bretagne
Date d'inscription : 15/02/2010

KGF_dll - nouvelles versions - Page 31 Empty
MessageSujet: re   KGF_dll - nouvelles versions - Page 31 EmptySam 20 Juin 2015 - 0:17

Je pollue ton sujet et j' en suis désolé mais j' en reviens à ma marotte des modules

Panoramic.exe devrait se limiter à la prévisualisation d' un programme avant sa compilation par un module de compilation.
avec une seule et unique syntaxe.

Ainsi, peu importe l' éditeur, on a deux modules distincts
On peut même penser à une limitation par processus, 1 seul processus Panoramic.exe, si + => erreur et on doit fermer le programme en preview pour en prévisualiser un autre.

Je le pense peut être à tort mais j' ai le sentiment que Jack est entrain de se perdre avec toutes ses versions.
Le compilateur est d' ailleurs en retard sur les derniers objets.

Une petite révolution est peut être nécessaire.
Les anciens programmes peuvent très bien continuer de tourner avec l' interpreteur et on peut en faire des executables.
Mais, pour avancer, peut être faut il passer sous la forme du compilateur pour nos progs.

Là, si je ne prends pas les huées du public, c' est un miracle...Laughing
Revenir en haut Aller en bas
papydall

papydall


Nombre de messages : 7017
Age : 74
Localisation : Moknine (Tunisie) Entre la chaise et le clavier
Date d'inscription : 03/03/2012

KGF_dll - nouvelles versions - Page 31 Empty
MessageSujet: Re: KGF_dll - nouvelles versions   KGF_dll - nouvelles versions - Page 31 EmptySam 20 Juin 2015 - 0:36

ygeronimi a écrit:
Là, si je ne prends pas les huées du public, c' est un miracle...

Personnellement, je ne te hue pas.
Et je pense  que le développement du compilateur doit avoir la priorité.
Mais, le dernier mot reste au géniteur de Panoramic.
Revenir en haut Aller en bas
http://papydall-panoramic.forumarabia.com/
Yannick




Nombre de messages : 8635
Age : 53
Localisation : Bretagne
Date d'inscription : 15/02/2010

KGF_dll - nouvelles versions - Page 31 Empty
MessageSujet: re   KGF_dll - nouvelles versions - Page 31 EmptySam 20 Juin 2015 - 0:45

@ Papydall,

Le géniteur est entrain de nous faire des septuplés...lol !
Même sur le forum on commence à se faire des noeuds dans les sujets.
Revenir en haut Aller en bas
Klaus

Klaus


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

KGF_dll - nouvelles versions - Page 31 Empty
MessageSujet: Re: KGF_dll - nouvelles versions   KGF_dll - nouvelles versions - Page 31 EmptySam 20 Juin 2015 - 1:02

Personnellement, je ne suis pas très enthousiaste dans la perspective du compilateur. Je vais sûrement à contre-courant de l'attente fébrile de la nouveauté technique de certains, mais j'y vois de gros inconvénients.

1. Pour ma part, le gros de mon travail consiste à faire des extensions à Panoramic sous forme de DLL. Et ça, ce sera fini avec le compilateur. Plus de DLLs. Jack l'a annoncé. Du moins, dans la forme actuelle. Aucune autre approche du problème des DLLs n'a encore été annoncé, et cette ouverture au "système" a pour moi été un élément de décision capital pour le choix de Panoramic. Certes, j'aurais aimé une interface un peu plus souple, plus facile à utiliser, mais ça, ce sont des contraintes techniques avec lesquelles je sais composer. Mais perdre l'accès aux DLLs, ou changer d'interface - là, ça va me stopper net dans mon élan.

2. Les programmes compilés sont certes très intéressants pour un gain considérable de performances. Ceci est un argument important pour tout ce qui concerne des programmes intensifs en calcul (fractales, simulations, jeux 2D ou 3D etc). Mais pour moi, ce n'est pas l'usage principal de Panoramic. Pour moi, c'est à la fois l'accès facile aux fonctions système, et le développement aisé d'applications de gestion. Pour moi, plutôt de pousser vers un compilateur, j'aurais applaudi des deux mains pour une gestion de fichiers, d'enregistrements et de bases de données digne de ce nom. Mais c'est Jack qui choisit, et j'essaie de faire avec.

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




Nombre de messages : 8635
Age : 53
Localisation : Bretagne
Date d'inscription : 15/02/2010

KGF_dll - nouvelles versions - Page 31 Empty
MessageSujet: re   KGF_dll - nouvelles versions - Page 31 EmptySam 20 Juin 2015 - 1:17

On pourrait au moins se mettre d' accord pour un seul langage.
peut être que si on parlait d' une seule voix, deux oreilles nous écouteraient.
Laughing

DOMOTICON
PANGINE2D
PANORAMIC
...
scratch  drunken  rendeer  geek  jocolor

Bon, j' arrête là la pollution.
Croisé Corse et Breton, je suis plus têtu qu' un troupeau de mûles... Laughing
Revenir en haut Aller en bas
Klaus

Klaus


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

KGF_dll - nouvelles versions - Page 31 Empty
MessageSujet: Re: KGF_dll - nouvelles versions   KGF_dll - nouvelles versions - Page 31 EmptySam 20 Juin 2015 - 1:31

Si j'avais à choisir, j'opterais pour un seul langage interprété qui serait Panoramic.
Toutes les fonctions y seraient accessibles, en déclarant de grands modules via des directives:
#USE "2D"
#USE "3D"
#USE "DLL"
#USE "DATABASE" (dans l'espoir d'une évolution dans ce sens...)
etc

Ces "modules" seraient techniquement des DLLs que Panoramic_Editor charge s'il rencontre la directive correspondante. Et ces DLLs gèrent la syntaxe et l'exécution des commandes et fonctions qui en font partie. Ces DLLs seraient systématiquement distribuées avec Panoramic.

Un compilateur pourra être réalisé pour ce langage, en utilisant également ces mêmes DLLs, pour générer le code nécessaire, en y incluant le chargement des DLLs requises en début d'exécution du programme compilé.

Ainsi, Panoramic pourrait évoluer, dans la ou les directions voulues, simplement en faisant évoluer une DLL ou en ajoutant une DLL. C'est ainsi que Windows est construit, et c'est ainsi que fonctionnent la quasi-totalité des langages modernes. Mais c'est ma vue personnelle, et qui n'engage évidemment que moi.
Revenir en haut Aller en bas
http://klauspanoramic.comxa.com/index.html
Yannick




Nombre de messages : 8635
Age : 53
Localisation : Bretagne
Date d'inscription : 15/02/2010

KGF_dll - nouvelles versions - Page 31 Empty
MessageSujet: re   KGF_dll - nouvelles versions - Page 31 EmptySam 20 Juin 2015 - 1:58

En Python c' était "#Import xxx" il me semble.
cela remonte à loin maintenant.
Laughing
Revenir en haut Aller en bas
Nardo26

Nardo26


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

KGF_dll - nouvelles versions - Page 31 Empty
MessageSujet: Re: KGF_dll - nouvelles versions   KGF_dll - nouvelles versions - Page 31 EmptyDim 21 Juin 2015 - 5:44

Du même avis que Klaus ! KGF_dll - nouvelles versions - Page 31 07
Revenir en haut Aller en bas
http://nardo26.lescigales.org
papydall

papydall


Nombre de messages : 7017
Age : 74
Localisation : Moknine (Tunisie) Entre la chaise et le clavier
Date d'inscription : 03/03/2012

KGF_dll - nouvelles versions - Page 31 Empty
MessageSujet: Re: KGF_dll - nouvelles versions   KGF_dll - nouvelles versions - Page 31 EmptyDim 21 Juin 2015 - 19:01

Salut Klaus
Documentation KGF.DLL :
Scripts avec Panoramic
Fonction ExecuteVBS
Dans l’exemple donné, il manque une ligne (à la fin du code) : END_IF king
Revenir en haut Aller en bas
http://papydall-panoramic.forumarabia.com/
Klaus

Klaus


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

KGF_dll - nouvelles versions - Page 31 Empty
MessageSujet: Re: KGF_dll - nouvelles versions   KGF_dll - nouvelles versions - Page 31 EmptyDim 21 Juin 2015 - 19:16

Merci, Papydall ! Cet oubli sera corrigé dans la prochaine version !
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

KGF_dll - nouvelles versions - Page 31 Empty
MessageSujet: Re: KGF_dll - nouvelles versions   KGF_dll - nouvelles versions - Page 31 EmptyJeu 2 Juil 2015 - 11:44

Nouvelle version:
KGF.dll V4.82 du 02/07/2015

Nouveautés:
- nouvelle fonction ReadBinaryFileToPanoramic

Modules modifiés:
KGF.dll
KGF.chm


La doc et l'aide en lignesont à jour. Les sources seront à jour prochainement.

La nouvelle fonction est documentée dans la rubrique "Gestion des fichiers binaires".

Cette nouvelle fonction permet de lire une portion d'un fichier binaire dans un tableau d'entiers de Panoramic. Mais contrairement à la commande FILEBIN_BLOCK_READ de Panoramic, cette fonction remplit le tableau avec une image du contenu du fichier. Donc, chaque mot du tableau reçoit 4 octets du fichier. Et par conséquant, on lit toujours par multiples de 4 octets. Le mieux est de regarder le petit programme exemple qui lit le début de son propre source comme fichier binaire:
Code:
' test_ReadBinaryFileToPanoramic.bas

dim buffer%(1000)
dim res%, f$, i%

dll_on "KGF.dll"

f$ = "test_ReadBinaryFileToPanoramic.bas"
res% = dll_call4("ReadBinaryFileToPanoramic",adr(f$),0,20,adr(buffer%))

list 1 : full_space 1
item_add 1,"nombre="+str$(res%)
for i%=0 to 20
  item_add 1,str$(i%*4)+"("+hex$(i%*4)+"): "+hex$(buffer%(i%))
next i%

end
Enregistrez-le sous le nom de ReadBinaryFileToPanoramic.bas et lance-le: vous verrez un dump hexa du début du fichier, mot par mot.

La taille maximale admise en lecture en une seule fois est 1024 mots, soit 4096 octets.
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

KGF_dll - nouvelles versions - Page 31 Empty
MessageSujet: Re: KGF_dll - nouvelles versions   KGF_dll - nouvelles versions - Page 31 EmptySam 18 Juil 2015 - 1:15

Nouvelle version:
KGF.dll V4.83 du 15/07/2015

Nouveautés:
- un nouveau module de gestion de fichiers ISAM

Modules modifiés:
KGF.dll
KGF.chm


La doc et l'aide en ligne sont à jour. Les sources sont à jour également.

Ceci est un ajout majeur ! On peut maintenant gérer des fichiers multi-clés, avec des enregistrements organisés en champs, et des clés composés d'un ou plusieurs champs. Voici une petite démo sous forme d'un fichier de contacts (vous pouvez prendre, dans mon WebDav dossier Sources\KGF\, les fichiers TestISAM.DAT et TestISAM.IX et utiliser le bouton "Ouvrir", ou utiliser le bouton "Créer" pour créer un nouveau fichier vide. Le source Panoramic est ici:
Code:
' test_ISAM.bas


label close0
label crefic, opnfic, clsfic, copfic, envers, choix
label addrec, delrec, chgnam, chgid, chgadr


dim res%, version$, no%, n%, err%, s$, sr$, sf$, inverser%, lg%, f$
dim data$, key$, nrec%, key1$, key2$

dim dll$   : dll$ = "KGF.dll"
dim FName$ : FName$ = "TestISAM"

dim Isam$, IsamID%, RecLen%

dim aNRec%, aDefSiz%, aNKeys%, aNFields%, aRecLen%, Grid%, envers%, gridlig%
dim eNom%, eID%, eAdresse%



full_space 0 : on_close 0,close0
no% = no% + 1 : button no% : top no%,40 : left no%, 20 : caption no%,"Créer fichier"  : on_click no%,crefic
no% = no% + 1 : button no% : top no%,40 : left no%,120 : caption no%,"Ouvrir fichier" : on_click no%,opnfic
no% = no% + 1 : button no% : top no%,40 : left no%,220 : caption no%,"Fermer fichier" : on_click no%,clsfic
no% = no% + 1 : button no% : top no%,70 : left no%, 20 : caption no%,"Copier fichier" : on_click no%,copfic

no% = no% + 1 : alpha no%  : top no%, 40 : left no%,400 : caption no%,"Enregistrements:"
no% = no% + 1 : alpha no%  : top no%, 10 : left no%,600 : caption no%,"Taille descripteur:"
no% = no% + 1 : alpha no%  : top no%, 40 : left no%,600 : caption no%,"Nombre de clés:"
no% = no% + 1 : alpha no%  : top no%, 70 : left no%,600 : caption no%,"Nombre de champs:"
no% = no% + 1 : alpha no%  : top no%,100 : left no%,600 : caption no%,"Longueur enregistrement:"

no% = no% + 1 : alpha no%  : top no%, 35 : left no%,500 : caption no%,"0"
  font_bold no% : font_size no%,12
  aNRec% = no%
no% = no% + 1 : alpha no%  : top no%,  5 : left no%,750 : caption no%,"0"
  font_bold no% : font_size no%,12
  aDefSiz% = no%
no% = no% + 1 : alpha no%  : top no%, 35 : left no%,750 : caption no%,"0"
  font_bold no% : font_size no%,12
  aNKeys% = no%
no% = no% + 1 : alpha no%  : top no%, 65 : left no%,750 : caption no%,"0"
  font_bold no% : font_size no%,12
  aNFields% = no%
no% = no% + 1 : alpha no%  : top no%, 95 : left no%,750 : caption no%,"0"
  font_bold no% : font_size no%,12
  aRecLen% = no%

no% = no% + 1 : check no%  : top no%,120 : left no%, 20 : caption no%,"Ordre inverse"
  envers% = no% : on_click no%,envers
no% = no% + 1 : grid no%   : top no%,150 : left no%, 20 : width no%,776 : height no%,255
  grid% = no% : on_click no%,choix
  grid_row no%,500 : grid_column no%,3 : grid_column_fixed grid%,0.01
  grid_one_column_width no%,1,200
  grid_one_column_width no%,2,50
  grid_one_column_width no%,3,500
  grid_write no%,1,1,"Nom" : grid_write no%,1,2,"ID" : grid_write no%,1,3,"Adresse"

no% = no% + 1 : alpha no%  : top no%,430 : left no%, 20 : caption no%,"Nom:"
no% = no% + 1 : alpha no%  : top no%,430 : left no%,230 : caption no%,"ID:"
no% = no% + 1 : alpha no%  : top no%,430 : left no%,280 : caption no%,"Adresse:"
no% = no% + 1 : edit no%   : top no%,460 : left no%, 20 : width no%,200
  eNom% = no%
no% = no% + 1 : edit no%   : top no%,460 : left no%,230 : width no%,40
  eID% = no%
no% = no% + 1 : edit no%   : top no%,460 : left no%,280 : width no%,500
  eAdresse% = no%

no% = no% + 1 : button no% : top no%,490 : left no%,20  : caption no%,"Ajouter"  : on_click no%,addrec
no% = no% + 1 : button no% : top no%,490 : left no%,120 : caption no%,"Supprimer"  : on_click no%,delrec
no% = no% + 1 : button no% : top no%,490 : left no%,280 : width no%,120 : caption no%,"Changer nom"  : on_click no%,chgnam
no% = no% + 1 : button no% : top no%,490 : left no%,410 : width no%,120 : caption no%,"Changer ID"  : on_click no%,chgid
no% = no% + 1 : button no% : top no%,490 : left no%,540 : width no%,120 : caption no%,"Changer adresse"  : on_click no%,chgadr

dll_on dll$

version$ = string$(25," ")
res% = dll_call1("GetIsamVersion",adr(version$))
caption 0,"Test ISAM (B-Tree) - "+version$
n% = dll_call0("GetIsamIdentifierSize")
caption aDefSiz%,str$(n%)

res% = dll_call0("InitIsam")

end

close0:
  if IsamID%<>0 then res% = dll_call1("CloseIsamFile",IsamID%)
  res% = dll_call0("FreeIsam")
  return

crefic:
  res% = dll_call0("IsamFileIsOpen")
  if res%=0
    message "Le fichier est actuellement ouvert !"
    return
  end_if
  res% = dll_call1("IsamFileExists",adr(FName$))
  if res%=0
    if message_confirmation_yes_no("Le fichier "+FName$+" existe déjà. Remplacer ?")<>1 then return
  end_if
  CreateIdentifier()
  InitContext()
  res% = dll_call0("GetIsamOk")
  if res%<0 then return

  res% = dll_call2("CreateIsamFile",IsamID%,adr(FName$))
  if res%<0
    err% = dll_call0("GetIsamError")
    if res%=-1 then message "Erreur en création de base: "+str$(err%)
    if res%=-2 then message "Erreur en réouverture de base: "+str$(err%)
    return
  end_if
  AfficherEtat()
  gridlig% = 0
  return
  
opnfic:
  res% = dll_call1("IsamFileExists",adr(FName$))
  if res%<0
    message "Le fichier "+FName$+" n'existe pas"
    return
  end_if
  res% = dll_call0("IsamFileIsOpen")
  if res%=0
    message "Le fichier est actuellement ouvert !"
    return
  end_if
  CreateIdentifier()
  res% = dll_call2("OpenIsamFile",IsamID%,adr(FName$))
  if res%<0
    res% = dll_call0("GetIsamError")
    message "Erreur en ouverture: "+str$(res%)
    return
  end_if
  AfficherEtat()
  AfficherTableau()
  gridlig% = 0
  return

clsfic:
  res% = dll_call1("CloseIsamFile",IsamID%)
  caption aRecLen%,"0"
  caption aNFields%,"0"
  caption aNKeys%,"0"
  caption aNRec%,"0"
  EffacerTableau()
  gridlig% = 0
  return

copfic:
  res% = dll_call1("IsamFileExists",adr(FName$))
  if res%<0
    message "Le fichier "+FName$+" n'existe pas"
    return
  end_if
  res% = dll_call0("IsamFileIsOpen")
  if res%=0
    message "Le fichier est actuellement ouvert !"
    return
  end_if
  f$ = FName$ + "_copy"
  res% = dll_call1("IsamFileExists",adr(f$))
  if res%=0
    if message_confirmation_yes_no("Le fichier "+FName$+"_copy existe déjà. Remplacer ?")<>1 then return
    file_delete FName$+"_copy.DAT"
    file_delete FName$+"_copy.IX"
  end_if
  CreateIdentifier()
  res% = dll_call2("CopyIsamFile",IsamID%,adr(FName$))
  res% = dll_call1("CloseIsamFile",IsamID%)
  message "Le fichier est recopié sous "+FName$+"_copy.DAT et "+FName$+"_copy.IX"
  return
  
envers:
  inverser% = checked(envers%)
  AfficherTableau()
  return
  
choix:
  lg% = grid_y_to_row(grid%,mouse_y_left_down(grid%))
  if trim$(grid_read$(grid%,lg%,1))="" then return
  gridlig% = lg%
  text eNom%,grid_read$(grid%,lg%,1)
  text eID%,grid_read$(grid%,lg%,2)
  text eAdresse%,grid_read$(grid%,lg%,3)
  return
  
addrec:
  res% = dll_call0("IsamFileIsOpen")
  if res%<0
    message "Le fichier n'est actuellement pas ouvert !"
    return
  end_if
  sr$ = string$(RecLen%,"*") : ' construire la chaîne de caractères représentant l'enregistrement

  s$ = trim$(text$(eNom%))
  if s$=""
    message "Le nom manque"
    return
  end_if
  sf$ = " "
  res% = dll_call6("FillIsamField",IsamID%,1,0,adr(sr$),adr(s$),adr(sf$))  : ' champ 1

  s$ = trim$(text$(eID%))
  if s$=""
    message "L'identifiant manque"
    return
  end_if
  sf$ = "²"
  res% = dll_call6("FillIsamField",IsamID%,2,1,adr(sr$),adr(s$),adr(sf$))  : ' champ 2

  s$ = trim$(text$(eAdresse%))
  sf$ = " "
  res% = dll_call6("FillIsamField",IsamID%,3,0,adr(sr$),adr(s$),adr(sf$))  : ' champ 3

  res% = dll_call2("AddIsamRecord",IsamID%,adr(sr$)) : ' ajout dans le fichier ISAM
  if res%<0
    err% = dll_call0("GetIsamError")
    message "Erreur en création "+str$(res%)+": "+str$(err%)
    return
  end_if
  res% = dll_call0("GetIsamRecordCount")
  res% = res% - 1 - 2 : ' déduire la définition des champs et la définition des deux clés
  caption aNRec%,str$(res%)
  AfficherTableau()
  return
  
delrec:
  res% = dll_call0("IsamFileIsOpen")
  if res%<0
    message "Le fichier n'est actuellement pas ouvert !"
    return
  end_if
  if gridlig%=0
    message "Aucune ligne n'est sélectionnée."
    return
  end_if
  data$ = string$(reclen%," ")
  key$ = right$(string$(8,"²")+trim$(grid_read$(grid%,gridlig%,2)),8)
  nrec% = dll_call4("ReadIsamRecordByKey",IsamID%,adr(data$),2,adr(key$))
  res% = dll_call0("GetIsamOk")
  if res%=0
    res% = dll_call4("CreateIsamKey",IsamID%,adr(data$),2,adr(key$))
    if message_confirmation_yes_no("Vraiment supprimer "+trim$(grid_read$(grid%,gridlig%,1))+" ?")<>1 then return
    res% = dll_call3("DeleteIsamRecord",IsamID%,adr(data$),nrec%)
    AfficherTableau()
    res% = dll_call0("GetIsamRecordCount")
    res% = res% - 1 - 2 : ' déduire la définition des champs et la définition des deux clés
    caption aNRec%,str$(res%)
    gridlig% = 0
  end_if
  return
  
chgnam:
  res% = dll_call0("IsamFileIsOpen")
  if res%<0
    message "Le fichier n'est actuellement pas ouvert !"
    return
  end_if
  if gridlig%=0
    message "Aucune ligne n'est sélectionnée."
    return
  end_if
  data$ = string$(reclen%," ")
  key$ = right$(string$(8,"²")+trim$(grid_read$(grid%,gridlig%,2)),8)
  nrec% = dll_call4("ReadIsamRecordByKey",IsamID%,adr(data$),2,adr(key$))
  res% = dll_call0("GetIsamOk")
  if res%=0
    key1$ = string$(20," ")
    res% = dll_call4("CreateIsamKey",IsamID%,adr(data$),1,adr(key1$))
    s$ = Trim$(text$(eNom%))
    key2$ = Left$(s$+String$(20," "),20)
    res% = dll_call5("ReplaceIsamKey",IsamID%,1,nrec%,adr(key1$),adr(key2$))
    res% = dll_call0("GetIsamOk")
    if res%=0
      sf$ = ""
      res% = dll_call6("FillIsamField",IsamID%,1,0,adr(data$),adr(key2$),adr(sf$))
      res% = dll_call3("UpdateIsamRecord",IsamID%,adr(data$),nrec%)
      grid_write grid%,gridlig%,1,trim$(key2$)
      AfficherTableau()
    else
      res% = dll_call0("GetIsamError")
      if res%=10230
        message "Mise à jour impossible - double clé"
      else
        message "Erreur en mise à jour: "+str$(res%)
      end_if
    end_if
  end_if
  return

chgid:
  res% = dll_call0("IsamFileIsOpen")
  if res%<0
    message "Le fichier n'est actuellement pas ouvert !"
    return
  end_if
  if gridlig%=0
    message "Aucune ligne n'est sélectionnée."
    return
  end_if
  data$ = string$(reclen%," ")
  key$ = right$(string$(8,"²")+trim$(grid_read$(grid%,gridlig%,2)),8)
  nrec% = dll_call4("ReadIsamRecordByKey",IsamID%,adr(data$),2,adr(key$))
  res% = dll_call0("GetIsamOk")
  if res%=0
    s$ = Trim$(text$(eID%))
    key2$ = Right$(String$(8,"²")+s$,8)
    res% = dll_call5("ReplaceIsamKey",IsamID%,2,nrec%,adr(key$),adr(key2$))
    res% = dll_call0("GetIsamOk")
    if res%=0
      sf$ = "²"
      res% = dll_call6("FillIsamField",IsamID%,2,1,adr(data$),adr(key2$),adr(sf$))
      res% = dll_call3("UpdateIsamRecord",IsamID%,adr(data$),nrec%)
      grid_write grid%,gridlig%,2,trim$(text$(eID%))
    else
      res% = dll_call0("GetIsamError")
      if res%=10230
        message "Mise à jour impossible - double clé"
      else
        message "Erreur en mise à jour: "+str$(res%)
      end_if
    end_if
  end_if


  return

chgadr:
  res% = dll_call0("IsamFileIsOpen")
  if res%<0
    message "Le fichier n'est actuellement pas ouvert !"
    return
  end_if
  if gridlig%=0
    message "Aucune ligne n'est sélectionnée."
    return
  end_if
  data$ = string$(reclen%," ")
  key$ = right$(string$(8,"²")+trim$(grid_read$(grid%,gridlig%,2)),8)
  nrec% = dll_call4("ReadIsamRecordByKey",IsamID%,adr(data$),2,adr(key$))
  res% = dll_call0("GetIsamOk")
  if res%=0
    s$ = Left$(Trim$(text$(eAdresse%))+string$(40," "),40)
    sf$ = " "
    res% = dll_call6("FillIsamField",IsamID%,3,0,adr(data$),adr(s$),adr(sf$))
    res% = dll_call3("UpdateIsamRecord",IsamID%,adr(data$),nrec%)
    res% = dll_call0("GetIsamOk")
    if res%=0
      grid_write grid%,gridlig%,3,trim$(s$)
    else
      res% = dll_call0("GetIsamError")
      message "Erreur en écriture: "+str$(res%)
    end_if
  else
    res% = dll_call0("GetIsamError")
    message "Erreur en lecture: "+str$(res%)
  end_if
  return
  
sub CreateIdentifier()
  dim_local n%, i%, def$
  n% = dll_call0("GetIsamIdentifierSize")
  Isam$ = string$(n%," ")
  IsamID% = dll_call1("CreateIsamIdentifier",adr(Isam$))
  exit_sub
  
  for i%=0 to 3
    poke adr(IsamID%)+i%,peek(adr(Isam$+i%))
  next i%
  for i%=0 to n%-1
    poke IsamID%+i%,0
  next i%
end_sub

sub InitContext()
  dim_local def$
  def$ = "3,20,8,40"
  res% = dll_call2("SetIsamFields",IsamID%,adr(def$))    : ' définir les champs
  res% = dll_call0("GetIsamOk")
  if res%<0
    res% = dll_call0("GetIsamError")
    message "Erreur en définition des champs: "+str$(err%)
  end_if
  def$ = "1,0,1"                                            : ' clé 1: champ 1
  res% = dll_call2("SetIsamKeyFields",IsamID%,adr(def$)) : ' autoriser doublons
  res% = dll_call0("GetIsamOk")
  if res%<0
    res% = dll_call0("GetIsamError")
    message "Erreur en définition de clé 1: "+str$(err%)
  end_if
  def$ = "2,1,2"                                            : '  clé 2: champ 2
  res% = dll_call2("SetIsamKeyFields",IsamID%,adr(def$)) : ' interdire doublons
  res% = dll_call0("GetIsamOk")
  if res%<0
    res% = dll_call0("GetIsamError")
    message "Erreur en définition d clé 2: "+str$(err%)
  end_if
end_sub

sub AfficherEtat()
  res% = dll_call0("GetIsamRecordLength")
  caption aRecLen%,str$(res%)
  RecLen% = res%
  res% = dll_call0("GetIsamFieldCount")
  caption aNFields%,str$(res%)
  res% = dll_call0("GetIsamKeyCount")
  caption aNKeys%,str$(res%)
  res% = dll_call0("GetIsamRecordCount")
  res% = res% - 1 - 2 : ' déduire la définition des champs et la définition des deux clés
  caption aNRec%,str$(res%)
end_sub

sub EffacerTableau()
  dim_local l%, c%
  l% = 1
  while l%<500
    l% = l% + 1
    if trim$(grid_read$(grid%,l%,1))="" then exit_while
    grid_write grid%,l%,1,""
    grid_write grid%,l%,2,""
    grid_write grid%,l%,3,""
  end_while
  text eNom%,""
  text eID%,""
  text eAdresse%,""
end_sub

sub AfficherTableau()
  dim_local r%, ref%, key$, data$, field$, fill$
  EffacerTableau()
  r% = 2
  ref% = 0
  if inverser%=1
    key$ = string$(20,chr$(255))
  else
    key$ = string$(20," ")
  end_if
  data$ = string$(RecLen%," ")
  if inverser%=1
    res% = dll_call3("ResetIsamKey",IsamID%,1,1)
  else
    res% = dll_call3("ResetIsamKey",IsamID%,1,0)
  end_if
  
  while dll_call0("GetIsamOk")=0
    if inverser%=1
      res% = dll_call4("ReadPreviousIsamRecord",IsamID%,adr(data$),1,adr(key$))
    else
      res% = dll_call4("ReadNextIsamRecord",IsamID%,adr(data$),1,adr(key$))
    end_if
    res% = dll_call0("GetIsamOk")
    if res%=0
      if Left$(Key$,1)="²"
      else
        field$ = String$(20," ")
        fill$ = " "
        res% = dll_call5("ExtractIsamField",IsamID%,1,adr(data$),adr(field$),adr(fill$))
        key$ = field$
        grid_write grid%,r%,1,trim$(field$)

        field$ = String$(8," ")
        fill$ = "²"
        res% = dll_call5("ExtractIsamField",IsamID%,2,adr(data$),adr(field$),adr(fill$))
        grid_write grid%,r%,2,trim$(field$)

        field$ = String$(40," ")
        fill$ = " "
        res% = dll_call5("ExtractIsamField",IsamID%,3,adr(data$),adr(field$),adr(fill$))
        grid_write grid%,r%,3,trim$(field$)

        r% = r% + 1
        if r%>500 then exit_while
      end_if
    else
      res% = dll_call0("GetIsamError")
      if (res%<>10250) and (res%<>10260) then message "IsamError="+s$tr(res%)
      exit_while
    end_if
  end_while
  
end_sub

Une fois le tableau chargé, vous verrez qu'un clic sur la case  cocher "Ordre inverse" affiche le tableau dans le sens inverse, en parcourant la clé d'accès au fichier (le nom du contact) à l'envers. Ce n'est pas un tri !
Revenir en haut Aller en bas
http://klauspanoramic.comxa.com/index.html
Minibug

Minibug


Nombre de messages : 4570
Age : 58
Localisation : Vienne (86)
Date d'inscription : 09/02/2012

KGF_dll - nouvelles versions - Page 31 Empty
MessageSujet: Re: KGF_dll - nouvelles versions   KGF_dll - nouvelles versions - Page 31 EmptySam 18 Juil 2015 - 9:47

Super Klaus !

Je vais tacher de regarder ça dans le WE. Wink
Revenir en haut Aller en bas
http://gpp.panoramic.free.fr
Klaus

Klaus


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

KGF_dll - nouvelles versions - Page 31 Empty
MessageSujet: Re: KGF_dll - nouvelles versions   KGF_dll - nouvelles versions - Page 31 EmptySam 18 Juil 2015 - 14:46

Nouvelle version:
KGF.dll V4.84 du 18/07/2015

Nouveautés:
- correction d'un bug dans OpenIsamFile
- ajout d'une information dans la documentation générale du module ISAM


Modules modifiés:
KGF.dll
KGF.chm


La doc et l'aide en ligne sont à jour. Les sources sont à jour également.
Revenir en haut Aller en bas
http://klauspanoramic.comxa.com/index.html
Contenu sponsorisé





KGF_dll - nouvelles versions - Page 31 Empty
MessageSujet: Re: KGF_dll - nouvelles versions   KGF_dll - nouvelles versions - Page 31 Empty

Revenir en haut Aller en bas
 
KGF_dll - nouvelles versions
Revenir en haut 
Page 31 sur 40Aller à la page : Précédent  1 ... 17 ... 30, 31, 32 ... 35 ... 40  Suivant
 Sujets similaires
-
» KGF_dll - nouvelles versions
» Nouvelles versions
» Synedit_Editor - nouvelles versions
» KGF_dll - nouvelles versions
» KGF_dll - nouvelles versions

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: