Novembre 2024 | Lun | Mar | Mer | Jeu | Ven | Sam | Dim |
---|
| | | | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | | Calendrier |
|
|
| KGF_dll - nouvelles versions | |
|
+12JL35 Oscaribout bignono Pedro pascal10000 silverman Jicehel papydall Minibug Marc Yannick Klaus 16 participants | |
Auteur | Message |
---|
Minibug
Nombre de messages : 4570 Age : 58 Localisation : Vienne (86) Date d'inscription : 09/02/2012
| Sujet: Re: KGF_dll - nouvelles versions Lun 17 Aoû 2020 - 19:17 | |
| Salut Yannick, Content de te voir ! Pour l'inspiration ça reviendra bien un jour ou l'autre... | |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: KGF_dll - nouvelles versions Mer 19 Aoû 2020 - 15:07 | |
| KGF.dll V9.27 du 18/08/2020Nouveautés: - nouvel objet: PlayerControl - nouvelles fonctions: CreateMultiPlayerControl, DeleteMultiPlayerControl, SetMultiPlayerControlIndex - MultiPlayer: gérer PlayerControl si type VLC et PlayerControl est affecté au player - KGF.ilb: nouvelles icônes 371 à 381 (pour PlayerControl)Modules modifiés: KGF.dll KGF.chmLa doc est à jour. Ce nouvel objet PlayerControl est un "complément" pour l'objet MediaPlayer en mode MultiPlayer, si le type VLC est choisi. Le type WindowsMediaPlayer affiche des commandes de contrôle (start/stop, volume, chargement video, ..). Par contre, le type VLC n'affiche que la partie visualisation, mais il n'y a aucun contrôle. C'est là que le nouvel objet intervient. Il crée une barre d'outils avec tout ce qu'il faut pour exploiter le player. Cet objet est étroitement associé à un player VLC lorsz de sa créationet s'affiche toujours juste en-dessous de la fenêtre de visualisation du player, quelque soit sa taille ou sa position. Voici l'aspect visuel: Toutes les actions sont gérées en interne par la DLL - plus aucune interaction avec Panoramic n'est nécessaire. Les icônes utilisées par défaut proviennent de la librairie interne (KGF.ilb), à laquelle j'ai ajouté les icônes nécessaires (de 371 à 381 (11 nouvelles icônes). Bien sûr, chaque bouton séparément peut recevoir une ic$one personnalisée provenant d'une autre ImageLibrary fournie par le programme. Voici une démo: - Code:
-
' test_PlayerControl.bas
label close0, zoom, move
dim res%, MP%, MPC%
dll_on "KGF.dll"
width 0,800 : height 0,600 button 1 : top 1,10 : left 1,10 : caption 1,"Agrandir" : on_click 1,zoom button 2 : top 2,10 : left 2,left(1)+width(1) : caption 2,"Déplacer" : on_click 2,move
on_close 0,close0
res% = dll_call1("SelectMultiPlayerType",2) MP% = dll_call5("CreateMultiPlayer",handle(0),100,250,300,200) ' MPC% = dll_call3("CreateMultiPlayerControl",MP%,handle(0),0-1) MPC% = dll_call2("CreateMultiPlayerControl",MP%,0-1)
end
close0: ' détruire simplement le MultiPlayerControm ' MPC% = dll_call1("DeleteMultiPlayerControl",MPC%) ' détruire le MultiPlayer VLC détruit AUTOMATIQUEMENT le MultiPlayerControl associé ! res% = dll_call1("DeleteMultiPlayer",MP%) return
zoom: res% = dll_call5("ResizeMultiPlayer",MP%,40,10,600,400) return move: res% = dll_call3("MoveMultiPlayer",MP%,40,40) return
| |
| | | Marc
Nombre de messages : 2466 Age : 63 Localisation : TOURS (37) Date d'inscription : 17/03/2014
| Sujet: Re: KGF_dll - nouvelles versions Mer 19 Aoû 2020 - 16:55 | |
| Bonjour Klaus ! Je suis désolé, je n’ai pas réussi à faire fonctionner la fonction CreateMultiPlayerControl. J’ai un message d’erreur (voir copie d’écran ci-dessus) avec ton source de démonstration. Mes essais ont été faits sous Windows 10 64 bits et Windows 7 64 bits. SelectMultiPlayerType est bien en type 2Pour MP%, la fonction me renvoie bien une valeur : 62924604. Quand le programme arrive sur la fonction CreateMultiPlayerControl, un message d'erreur s'affiche. - Copie d'écran:
| |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: KGF_dll - nouvelles versions Mer 19 Aoû 2020 - 17:15 | |
| On dirait que tu as encore la version précédente de la DLL. Fais marcher ceci: - Code:
-
dim res%, vers$ vers$ = string$(25," ") dll_on "KGF.dll" res% = DLL_call1("KGFdllVersion",adr(version$)) message version$ end
Chez moi, ça donne ceci: EDIT Oups... je viens de me rendre compte que le upload vers mon site n'a pas marché. Je le refais en ce moment. Sur mon Webdav, dossier "KGF DLL", la DLL est à jour... | |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: KGF_dll - nouvelles versions Mer 19 Aoû 2020 - 17:29 | |
| C'est fait. Sur mon site, KGF.dll est à jour. Désolé pour ce décalage. | |
| | | Marc
Nombre de messages : 2466 Age : 63 Localisation : TOURS (37) Date d'inscription : 17/03/2014
| Sujet: Re: KGF_dll - nouvelles versions Mer 19 Aoû 2020 - 18:54 | |
| Merci Klaus, c’est téléchargé ! Maintenant j’ai la version KGF : Plus de message d’erreur mais la fonction CreateMultiPlayerControl n’affiche pas le nouveau playeurControl pour un type 2. Il y a probablement quelque chose que je n’ai pas compris. Voici une copie d’écran obtenue en exécutant ton source de démonstration seul (WMP et VLC inactifs): - Spoiler:
| |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: KGF_dll - nouvelles versions Mer 19 Aoû 2020 - 21:07 | |
| Là, tu es en type 1, clairement. C'est le WindowsWebBrowser qui s'affiche ainsi.
Est-ce que tu as l'application VLC ? Si ce n'est pas le cas, pas la peine d'aller plus loin...
Il faut que tgu aies quelque part libvlc.dll installé - c'est la DLL qui contient le coeur du player VLC.exe. C'est cette DLL qui est utilisée par KGF.dll pour le MediaPlayer en type 2, et elle vient avec l'installation de VLC 'Video Lan Player). C'est un freeware, largement utilisé. | |
| | | Marc
Nombre de messages : 2466 Age : 63 Localisation : TOURS (37) Date d'inscription : 17/03/2014
| Sujet: Re: KGF_dll - nouvelles versions Mer 19 Aoû 2020 - 22:27 | |
| - Klaus a écrit:
- Là, tu es en type 1, clairement. C'est le WindowsWebBrowser qui s'affiche ainsi.
Oui, tout à fait d'accord avec toi, mais c'est bien le type 2 qui est passé en paramètre à la fonction SelectMultiPlayerType. - Klaus a écrit:
- Est-ce que tu as l'application VLC ?
Oui, bien sûr ! Quant à la DLL libvlc.dll, elle est dans le répertoire d’installation de VLC 64 bits, donc dans Programmes et non pas Program Files : Je vais faire un essai avec une version 32 bits... et je reviens te donner le résultat. EDIT : avec VLC en 32 bits, ça fonctionne !Donc : avec VLC 32 bits => OK ! avec VLC 64 bits => pas bon | |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: KGF_dll - nouvelles versions Mer 19 Aoû 2020 - 23:24 | |
| - Citation :
- avec VLC 32 bits => OK !Very Happy
avec VLC 64 bits => pas bon Eh oui - Panoramic est en mode 32 bits. Et donc, KGF.dll est nécessairement en 32 bis également, et ne peut utiliser que les DLLs en 32 bits. Impossible, techniquement, de mélanger 32 et 64 bits. C'est ce que MicroSoft appelle le "bitness" - le nombre de bits doit être identique à travers tous les compsants d'un projet. C'est bien la raison pour laquelle Windows a une double arborescence pour les programmes, mais également pour les DLLs. J'aurais dû y penser - désolé. Mais enfin, je suis content que ça tourne, et merci pour tes efforts ! | |
| | | Marc
Nombre de messages : 2466 Age : 63 Localisation : TOURS (37) Date d'inscription : 17/03/2014
| Sujet: Re: KGF_dll - nouvelles versions Mer 19 Aoû 2020 - 23:35 | |
| Ah, mince ! Il reste la possibilité d’installer VLC en 32 bits sur Windows 64 bits.
En tout cas, merci pour tout, ta générosité et ton dévouement ! Bonne continuation !
| |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: KGF_dll - nouvelles versions Mer 19 Aoû 2020 - 23:47 | |
| - Citation :
- Il reste la possibilité d’installer VLC en 32 bits sur Windows 64 bits.
Oui, ça marche sans problèmes. C'est ce que j'ai fait chez moi. Je suis en W10 64 bits aussi. En fait, cela donne deux possibilités: - avec PlayerControl, tu as un video player puissant, réalisable en quelques lignes Panoramic - sans PlayerControl, tu as un visualiseur de vidéos dans lequel tu charges une vidéo à l'aide des fonctions KGF.dll, mais sur laquelle l'utilisateur ne peut pas intervenir (sauf su tu prévois en Panoramic des boutons et réglages pour gérer le visualiseur). C'est un moyen idéal de visualiser des publicités, des clips d'information ou tout autre document video qui doit s'afficher automatiquement alors que l'application elle-même traite autre chose. Des tutoriels, par exemple. | |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: KGF_dll - nouvelles versions Sam 31 Oct 2020 - 10:21 | |
| KGF.dll V9.28 du 31/10/2020Nouveautés: - nouvelle fonction: IsUniqueInstance - WB_CopyToMemo: actuellement il y a un bug - NE PAS UTILISER !Modules modifiés: KGF.dll KGF.chmLa doc est à jour. La fonction est documentée dans la section "Fonctions diverses" (dernière fonction de la liste). La nouvelle fonction IsUniqueInstance permet de s'assurer qu'on programme n'est pas lancé en double. Ekke retourne la valeur 1 si aucune autre instance n'est active, ou 0 s'il y a déjà au moins une instance active du même programme. Après avoir réçu un résultat 1, toute nouvelle instance du même programme obtiendra une valeur de 0 et devrait donc impératiement s'arrêter, comme dans la démo ci-après: - Code:
-
' test-IsUniqueInstance.bas
dim res%
dll_on "KGF.dll"
res% = dll_call0("IsUniqueInstance") if res%=1 message "On est seul" else message "On n'est pas seul" terminate end_if
end Pour tester, il faut faire ceci: - créer l'exécutable de ce code (menu Fichiers de l'éditeur) - lancer ce code dans l'éditeur (par Run ou l'icône éclair) ==> on obtient le message "On est seul" - puis lancer l'exécutable généré en double-cliquant sur le fichier dans l'explorateur ==> on obtient le messane "On n'est pas seul", puis le programme se termine - arrêter le programme lancé par l'éditeur - relancer l'exécutable généré en double-cliquant sur le fichier dans l'explorateur ==> on obtient le messane "On est pas seul" | |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: KGF_dll - nouvelles versions Dim 1 Nov 2020 - 12:50 | |
| KGF.dll V9.29 du 01/01/11/2020
Nouveautés: - nouvelle fonction: RightClickForIconListBox
Modules modifiés: KGF.dll KGF.chm
La doc est à jour.
Cette fonction permet d'interdire ou d'autoriser le clic droit dans un objet IconListBox. Par défaut, le clic droit est refusé. | |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: KGF_dll - nouvelles versions Mar 3 Nov 2020 - 1:56 | |
| KGF.dll V9.30 du 03/01/11/2020Nouveautés: - nouvelle fonction: UnblockIconListBoxModules modifiés: KGF.dll KGF.chmLa doc est à jour. Utilisation: Juste avant le RETURN de la routine USER_EVENT d'une IconListBox, ajouter la ligne suivante: - Code:
-
res% = sll_call1("UnblockIconListBox",ILB%) où ILB% représente l'identifiant de l'objet IconListBox. | |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: KGF_dll - nouvelles versions Mer 4 Nov 2020 - 17:05 | |
| KGF.dll V9.31 du 04/01/11/2020Nouveautés: - nouveau module: gestion de DLLs de ressourcesModules modifiés: KGF.dll KGF.chmLa doc est à jour. Une DLL de ressource est une DLL ne cotenant que des ressources (fichiers suelconues: exécutables, DLLs, textes, images, videos, fichiers de données, ...). Elle n'a pas besoin d'être montée par DLL_ON pour pouvoir l'utiliser, mais est gérée directement par KGF.dll. Voici un utiltaire de création/maintenance des DLLs de ressoures: - Code:
-
' Gerer_ApplicationHost.bas
label creervide, connecter, deconnecter, lister, changeapp, Chercherfichier, ajouterapp label supprimerapp, extraireapp, choisirfichier, Chercherdll label help0, help12, help13, help14, help15, help16, help21 label help31, help33, help34, help35, help36, help38, help39, help40 label help101
dim res%, host$, applic$, fichier$, caret%, appcars$, s$, crlf$
full_space 0 caption 0,"Gestionnaire des DLLs de ressources"
alpha 11 : top 11,95 : left 11,220 : caption 11,"DLL de ressources:" edit 12 : top 12,110 : left 12,220 : width 12,600 button 13 : top 13,110 : left 13,820 : width 13,30 : caption 13,"..." : on_click 13,Chercherdll
button 14 : top 14,110 : left 14,850 : width 14,200 : caption 14,"Créer une DLL vide" : on_click 14,creervide button 15 : top 15,140 : left 15,850 : width 15,200 : caption 15,"Connecter à la DLL" : on_click 15,connecter
button 16 : top 16,210 : left 16,220 : width 16,200 : caption 16,"Déconnecter la DLL" : on_click 16,deconnecter button 21 : top 21,240 : left 21,220 : width 21,200 : caption 21,"Liste des ressources" : on_click 21,lister
alpha 30 : top 30,290 : left 30,220 : caption 30,"Ressource:" edit 31 : top 31,310 : left 31,220 : width 31,200 : on_change 31,changeapp alpha 32 : top 32,290 : left 32,430 : caption 32,"Fichier EXE:" edit 33 : top 33,310 : left 33,430 : width 33,600 button 34 : top 34,310 : left 34,1030 : width 34,30 : caption 34,"..." : on_click 34,Chercherfichier button 35 : top 35,310 : left 35,1060 : width 35,200 : caption 35,"Ajouter la ressource" : on_click 35,ajouterapp
button 36 : top 36,350 : left 36,220 : width 36,200 : caption 36,"Supprimer la ressource sélectonnée" : on_click 36,supprimerapp
alpha 37 : top 37,390 : left 37,220 : caption 37,"Fichier EXE:" edit 38 : top 38,410 : left 38,220 : width 38,600 button 39 : top 39,410 : left 39,820 : width 39,30 : caption 39,"..." : on_click 39,choisirfichier button 40 : top 40,410 : left 40,850 : width 40,200 : caption 40,"Extraire la ressource sélectonnée" : on_click 40,extraireapp
alpha 100 : top 100,55 : left 100,10 : caption 100,"Ressources disponibles:" ' memo 101 : top 101,70 : left 101,10 : width 101,200 : height 101,400 : bar_both 101 list 101 : top 101,70 : left 101,10 : width 101,200 : height 101,400
alpha 200 : top 200,460 : left 200,220 : font_size 200,16 on_mouse_move 0,help0 on_mouse_move 12,help12 on_mouse_move 13,help13 on_mouse_move 14,help14 on_mouse_move 15,help15 on_mouse_move 16,help16 on_mouse_move 21,help21 on_mouse_move 31,help31 on_mouse_move 33,help33 on_mouse_move 34,help34 on_mouse_move 35,help35 on_mouse_move 36,help36 on_mouse_move 38,help38 on_mouse_move 39,help39 on_mouse_move 40,help40 on_mouse_move 101,help101
open_dialog 300 : filter 300,"Fichiers DLL|*.dll" open_dialog 301
dll_on "KGF.dll" appcars$ = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ_" host$ = "ResourceHost.dll" crlf$ = chr$(13) + chr$(10) text 12,host$ res% = dll_call2("GetFullResourceHostName",handle(12),adr(host$)) end
creervide: if text$(12)="" message "Erreur: le nom de la DLL ressources manque" return end_if host$ = text$(12) : ' "ResourceHost.dll" if file_exists(host$)=1 then file_delete host$ res% = dll_call1("CreateNewResourceHost",adr(host$)) if res%=0 clear 101 message "Ok" else message "Erreur" end_if return
connecter: host$ = text$(12) : ' "ResourceHost.dll" res% = dll_call1("ConnectResourceHost",adr(host$)) if res%=0 res% = dll_call1("GetResourceListFromHost",handle(101)) message "Ok" else clear 101 message "Erreur" end_if return
deconnecter: res% = dll_call0("DisconnectResourceHost") if res%=0 clear 101 message "Ok" else message "Erreur" end_if return lister: res% = dll_call1("GetResourceListFromHost",handle(101)) if res%>=0 message "Ok: "+str$(res%)+" ressources trouvées" else message "Erreur" end_if return changeapp: caret% = caret_position(31) off_change 31 s$ = text$(31) if s$<>"" if instr(appcars$,mid$(s$,caret%,1))=0 if caret%<=1 s$ = mid$(s$,caret%+1,400) else s$ = left$(s$,caret%-1)+mid$(s$,caret%+1,400) end_if if caret%>0 then caret% = caret% - 1 end_if end_if text 31,upper$(s$) caret_position 31,caret% on_change 31,changeapp return
chercherfichier: fichier$ = file_name$(301) if fichier$="_" then return if file_exists(fichier$)=0 message "Erreur: fichier inexistant" return end_if text 33,fichier$ return choisirfichier: fichier$ = file_name$(301) if fichier$="_" then return if file_exists(fichier$)=1 if message_confirmation_yes_no("Fichier existant. Voulez_vous le remplacer ?")<>1 then return end_if text 38,fichier$ return Chercherdll: fichier$ = file_name$(300) if fichier$="_" then return text 12,fichier$ host$ = fichier$ return ajouterapp: applic$ = text$(31) fichier$ = text$(33) if applic$="" message "Erreur: le nom de la ressource manque" return end_if if fichier$="" message "Erreur: le nom du fichier de la ressource manque" return end_if res% = dll_call2("AddResourceToHost",adr(applic$),adr(fichier$)) if res%>=0 res% = dll_call1("GetResourceListFromHost",handle(101)) message "Ok" else message "Erreur" end_if return supprimerapp: if item_index(101)=0 message "Erreur: aucune ressource n'est sélectionnée" return end_if s$ = item_index$(101) res% = dll_call1("RemoveResourceFromHost",adr(s$)) if res%=0 res% = dll_call1("GetResourceListFromHost",handle(101)) message "Ok" else message "Erreur" end_if return extraireapp: if item_index(101)=0 message "Erreur: aucune ressource n'est sélectionnée" return end_if s$ = item_index$(101) fichier$ = text$(38) if file_exists(fichier$) then file_delete fichier$ res% = dll_call2("ExtractResourceFromHost",adr(s$),adr(fichier$)) if res%=0 message "Ok" else message "Erreur" end_if return help0: caption 200,"" return help12: s$ = "Nom et chemin complet de la DLL de ressources."+crlf$+crlf$+"Utiliser le bouton <...> pour choisir la DLL."+crlf$ s$ = s$ + "Le contenu de ce champ sera utilisé pour créer une nouvelle DLL ou connecter une DLL existante." caption 200,s$ return help13: caption 200,"Choisir un fichier DLL existant ou l'emplacement d'une DLL à créer." return help14: s$ = "Créer une nouvelle DLL de resources vide (sans ressources)"+crlf$ s$ = s$ + "Le nom et l'emplacement de la DLL à créer sont dans le champ à gauche de ce bouton." caption 200,s$ return help15: s$ = "Connecter une DLL de resources existante."+crlf$ s$ = s$ + "Le nom et l'emplacement de la DLL à connecter sont dans le champ à gauche de ce bouton." caption 200,s$ return help16: caption 200,"Déconnecter la DLL actuellement connectée." return help21: caption 200,"Afficher la liste des ressources disponibles dans la DLL actuellement connectée." return help31: s$ = "Nom de la ressource."+crlf$+crlf$+"Ce nom sert à identifier la ressource."+crlf$ s$ = s$ + "Seules les lettres majuscules et minuscules sont autorisées, ainsi que le signe <_>." caption 200,s$ return help33: s$ = "Nom et chemin complet du fichuer à ajouter en tant que ressources."+crlf$+crlf$ s$ = s$ + "Utiliser le bouton <...> pour choisir le fichier."+crlf$ s$ = s$ + "Le contenu de ce champ désigne le fichier qui sera utilisé pour l'ajout."+crlf$+crlf$ s$ = s$ + "Si la ressource n'existe pas encore dans la DLL, elle sera ajoutée."+crlf$ s$ = s$ + "Si la ressource existe déjà dans la DLL, elle sera remplacée." caption 200,s$ return help34: caption 200,"Choisir un fichier existant à utiliser en tant que ressoure." return help35: s$ = "Ajouter un fichier e tant que ressource."+crlf$+crlf$ s$ = s$ + "Le contenu du champ à gauche désigne le fichier qui sera utilisé pour l'ajout."+crlf$+crlf$ s$ = s$ + "Si la ressource n'existe pas encore dans la DLL, elle sera ajoutée."+crlf$ s$ = s$ + "Si la ressource existe déjà dans la DLL, elle sera remplacée." caption 200,s$ return help36: caption 200,"Supprimer la ressource sélectionnée dans la liste des ressources." return help38: s$ = "Nom et chemin du fichier pour l'extraction d'une ressource."+crlf$+crlf$ s$ = s$ + "Utiliser le bouton <...> pour choisir le fichier."+crlf$ s$ = s$ + "La ressource sélectionnée dans la liste des ressources sera extraite dans ce fichier."+crlf$ caption 200,s$ return help39: caption 200,"Choisir le nom et l'emplacement du fichier dans lequel la ressource sélectionnée sera extraite." return help40: s$ = "Extraire une ressource dans un fichier."+crlf$+crlf$ s$ = s$ + "La ressource extraite est celle qui est sélectionnée dans la liste des ressources."+crlf$ s$ = s$ + "ATTENTION: il faut veiller à donner la bonne extension au fichier, sinon il ne sera pas utilisable !" caption 200,s$ return help101: caption 200,"Liste des ressources disponibles."+crlf$+crlf$+"Un clic dans cette liste sélectionne la ressource pour extraction ou suppression." return
Déplacez le curseur dans la fenêtre. Chaque objet affiche alors automatqiuement un texte d'aide. | |
| | | Minibug
Nombre de messages : 4570 Age : 58 Localisation : Vienne (86) Date d'inscription : 09/02/2012
| Sujet: Re: KGF_dll - nouvelles versions Mer 4 Nov 2020 - 20:22 | |
| C'est un peu trop abstrait pour moi les DLLs de ressources. Est ce que tu pourrais expliquer un peu plus ou donner des exemples pour mieux comprendre... J'avoue que là, j'ai bien essayé ton programme mais je n'ai pas trop su quoi faire ! | |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: KGF_dll - nouvelles versions Jeu 5 Nov 2020 - 0:58 | |
| C'est un des multiples moyens de regrouper un un seul fichier, tous les fichiers d'une application.
Par exemple, pour faire une installation un peu complexe: On place tous les fichiers dans une DLL de ressources, y compris l'exécutable de l'application, mais PAS KGF.dll. Puis on fait un petit programme Panoramic ui n'a qu'un seul objectif: créer éventuellement les dossiers et sous-dossiers nécessaires, puis extraire chaque ressource directement dans le dossier approprié. Installation automatique et sans faille.
Un autre exemple: créer un moyen de sauvegarde des fichiers de données d'une application ayant de multiples fichiers: On place tous ces fichiers dans une DLL de ressources. A chaque sauvegarde, par la fonction AddResourceToHost, les fichiers actuels emplacent automatiquement la version plus ancienne contenue dans la DLL. La restauration est possible bien sûr en block, mais également fichier par fichier, ce qui est moins évident avec d'autres moyens de sauvgarde tels que ZIP, par exemple.
Un dernier exemple: créer une journalisation, comme l'archivation de versions différentes d'un programme: Chaque version est placée dans la DLL de ressources avec un nom différant. On pourra alors à tout moment extraireune version spécifique.
Bref, dans tous les cas où de multiples fichiers de toute nature doivent être archivés mais être accessibles individuellement, à tout moment. Je pense que ça pourrait être particulièrement intéressant pour GPP: imagine une seule DLL de ressources par "projet": à l'ouverture, on extait tout, à la fermeture, on sauvegarde tout et on "purge" la place sur disque... un seul fichier à trimbaler par projet.
Bien sûr, il y a un "hic": les noms des ressources sont composés de lettres majuscules et minuscules et le caractère "_". Pas de caractères spéciaux, donc. Mais il est aisé d'imaginer un fichier texte "index" (qui pourrait se nommer index.txt par exemple) et qui serait systématiquement inclus comme première ressource dans chacune de ces DLLs. Chaque ligne pourrait être conçue comme suit: NomDeLa Ressource=...chemin..._NomDuFichier.extention permettant ainsi de savoir exactement où les fichiers sont à placer. En chargeant cette ressource au début dans un LIST ou un DLIST, on l'aura toujours sous la main...
L'idée général est d'avoir un contenant unique facile à manipuler (copier, transporter, iinstaller, ...) mais PAS accessible en lecture par le premier fouineur venu. Il faut en effet avoir certaines connaissances comme l'usage d'outils comme ResHacker par exemple pour lire ce qu'il y a dedans. Et encore... | |
| | | Oscaribout
Nombre de messages : 471 Date d'inscription : 29/12/2016
| Sujet: Re: KGF_dll - nouvelles versions Jeu 5 Nov 2020 - 1:05 | |
| C'est formidable le génie que tu as. Je me demande si tu ne serais pas avec JJN4, mais peut-être pas sur Mars, mais sur Venus! | |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: KGF_dll - nouvelles versions Jeu 5 Nov 2020 - 1:07 | |
| Oups... j'ai oublié qu'un nom de ressource peut également contenir des chiffres ! Voici la version adapté de l'outil de maintenance des DLLs de ressources: - Code:
-
' Gerer_ApplicationHost.bas
label creervide, connecter, deconnecter, lister, changeapp, Chercherfichier, ajouterapp label supprimerapp, extraireapp, choisirfichier, Chercherdll label help0, help12, help13, help14, help15, help16, help21 label help31, help33, help34, help35, help36, help38, help39, help40 label help101
dim res%, host$, applic$, fichier$, caret%, appcars$, s$, crlf$
full_space 0 caption 0,"Gestionnaire des DLLs de ressources"
alpha 11 : top 11,95 : left 11,220 : caption 11,"DLL de ressources:" edit 12 : top 12,110 : left 12,220 : width 12,600 button 13 : top 13,110 : left 13,820 : width 13,30 : caption 13,"..." : on_click 13,Chercherdll
button 14 : top 14,110 : left 14,850 : width 14,200 : caption 14,"Créer une DLL vide" : on_click 14,creervide button 15 : top 15,140 : left 15,850 : width 15,200 : caption 15,"Connecter à la DLL" : on_click 15,connecter
button 16 : top 16,210 : left 16,220 : width 16,200 : caption 16,"Déconnecter la DLL" : on_click 16,deconnecter button 21 : top 21,240 : left 21,220 : width 21,200 : caption 21,"Liste des ressources" : on_click 21,lister
alpha 30 : top 30,290 : left 30,220 : caption 30,"Ressource:" edit 31 : top 31,310 : left 31,220 : width 31,200 : on_change 31,changeapp alpha 32 : top 32,290 : left 32,430 : caption 32,"Fichier EXE:" edit 33 : top 33,310 : left 33,430 : width 33,600 button 34 : top 34,310 : left 34,1030 : width 34,30 : caption 34,"..." : on_click 34,Chercherfichier button 35 : top 35,310 : left 35,1060 : width 35,200 : caption 35,"Ajouter la ressource" : on_click 35,ajouterapp
button 36 : top 36,350 : left 36,220 : width 36,200 : caption 36,"Supprimer la ressource sélectonnée" : on_click 36,supprimerapp
alpha 37 : top 37,390 : left 37,220 : caption 37,"Fichier EXE:" edit 38 : top 38,410 : left 38,220 : width 38,600 button 39 : top 39,410 : left 39,820 : width 39,30 : caption 39,"..." : on_click 39,choisirfichier button 40 : top 40,410 : left 40,850 : width 40,200 : caption 40,"Extraire la ressource sélectonnée" : on_click 40,extraireapp
alpha 100 : top 100,55 : left 100,10 : caption 100,"Ressources disponibles:" ' memo 101 : top 101,70 : left 101,10 : width 101,200 : height 101,400 : bar_both 101 list 101 : top 101,70 : left 101,10 : width 101,200 : height 101,400
alpha 200 : top 200,460 : left 200,220 : font_size 200,16 on_mouse_move 0,help0 on_mouse_move 12,help12 on_mouse_move 13,help13 on_mouse_move 14,help14 on_mouse_move 15,help15 on_mouse_move 16,help16 on_mouse_move 21,help21 on_mouse_move 31,help31 on_mouse_move 33,help33 on_mouse_move 34,help34 on_mouse_move 35,help35 on_mouse_move 36,help36 on_mouse_move 38,help38 on_mouse_move 39,help39 on_mouse_move 40,help40 on_mouse_move 101,help101
open_dialog 300 : filter 300,"Fichiers DLL|*.dll" open_dialog 301
dll_on "KGF.dll" appcars$ = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ_0123456789" host$ = "ResourceHost.dll" crlf$ = chr$(13) + chr$(10) text 12,host$ res% = dll_call2("GetFullResourceHostName",handle(12),adr(host$)) end
creervide: if text$(12)="" message "Erreur: le nom de la DLL ressources manque" return end_if host$ = text$(12) : ' "ResourceHost.dll" if file_exists(host$)=1 then file_delete host$ res% = dll_call1("CreateNewResourceHost",adr(host$)) if res%=0 clear 101 message "Ok" else message "Erreur" end_if return
connecter: host$ = text$(12) : ' "ResourceHost.dll" res% = dll_call1("ConnectResourceHost",adr(host$)) if res%=0 res% = dll_call1("GetResourceListFromHost",handle(101)) message "Ok" else clear 101 message "Erreur" end_if return
deconnecter: res% = dll_call0("DisconnectResourceHost") if res%=0 clear 101 message "Ok" else message "Erreur" end_if return lister: res% = dll_call1("GetResourceListFromHost",handle(101)) if res%>=0 message "Ok: "+str$(res%)+" ressources trouvées" else message "Erreur" end_if return changeapp: caret% = caret_position(31) off_change 31 s$ = text$(31) if s$<>"" if instr(appcars$,mid$(s$,caret%,1))=0 if caret%<=1 s$ = mid$(s$,caret%+1,400) else s$ = left$(s$,caret%-1)+mid$(s$,caret%+1,400) end_if if caret%>0 then caret% = caret% - 1 end_if end_if text 31,upper$(s$) caret_position 31,caret% on_change 31,changeapp return
chercherfichier: fichier$ = file_name$(301) if fichier$="_" then return if file_exists(fichier$)=0 message "Erreur: fichier inexistant" return end_if text 33,fichier$ return choisirfichier: fichier$ = file_name$(301) if fichier$="_" then return if file_exists(fichier$)=1 if message_confirmation_yes_no("Fichier existant. Voulez_vous le remplacer ?")<>1 then return end_if text 38,fichier$ return Chercherdll: fichier$ = file_name$(300) if fichier$="_" then return text 12,fichier$ host$ = fichier$ return ajouterapp: applic$ = text$(31) fichier$ = text$(33) if applic$="" message "Erreur: le nom de la ressource manque" return end_if if fichier$="" message "Erreur: le nom du fichier de la ressource manque" return end_if res% = dll_call2("AddResourceToHost",adr(applic$),adr(fichier$)) if res%>=0 res% = dll_call1("GetResourceListFromHost",handle(101)) message "Ok" else message "Erreur" end_if return supprimerapp: if item_index(101)=0 message "Erreur: aucune ressource n'est sélectionnée" return end_if s$ = item_index$(101) res% = dll_call1("RemoveResourceFromHost",adr(s$)) if res%=0 res% = dll_call1("GetResourceListFromHost",handle(101)) message "Ok" else message "Erreur" end_if return extraireapp: if item_index(101)=0 message "Erreur: aucune ressource n'est sélectionnée" return end_if s$ = item_index$(101) fichier$ = text$(38) if file_exists(fichier$) then file_delete fichier$ res% = dll_call2("ExtractResourceFromHost",adr(s$),adr(fichier$)) if res%=0 message "Ok" else message "Erreur" end_if return help0: caption 200,"" return help12: s$ = "Nom et chemin complet de la DLL de ressources."+crlf$+crlf$+"Utiliser le bouton <...> pour choisir la DLL."+crlf$ s$ = s$ + "Le contenu de ce champ sera utilisé pour créer une nouvelle DLL ou connecter une DLL existante." caption 200,s$ return help13: caption 200,"Choisir un fichier DLL existant ou l'emplacement d'une DLL à créer." return help14: s$ = "Créer une nouvelle DLL de resources vide (sans ressources)"+crlf$ s$ = s$ + "Le nom et l'emplacement de la DLL à créer sont dans le champ à gauche de ce bouton." caption 200,s$ return help15: s$ = "Connecter une DLL de resources existante."+crlf$ s$ = s$ + "Le nom et l'emplacement de la DLL à connecter sont dans le champ à gauche de ce bouton." caption 200,s$ return help16: caption 200,"Déconnecter la DLL actuellement connectée." return help21: caption 200,"Afficher la liste des ressources disponibles dans la DLL actuellement connectée." return help31: s$ = "Nom de la ressource."+crlf$+crlf$+"Ce nom sert à identifier la ressource."+crlf$ s$ = s$ + "Seules les lettres majuscules et minuscules sont autorisées, ainsi que le signe <_>." caption 200,s$ return help33: s$ = "Nom et chemin complet du fichuer à ajouter en tant que ressources."+crlf$+crlf$ s$ = s$ + "Utiliser le bouton <...> pour choisir le fichier."+crlf$ s$ = s$ + "Le contenu de ce champ désigne le fichier qui sera utilisé pour l'ajout."+crlf$+crlf$ s$ = s$ + "Si la ressource n'existe pas encore dans la DLL, elle sera ajoutée."+crlf$ s$ = s$ + "Si la ressource existe déjà dans la DLL, elle sera remplacée." caption 200,s$ return help34: caption 200,"Choisir un fichier existant à utiliser en tant que ressoure." return help35: s$ = "Ajouter un fichier e tant que ressource."+crlf$+crlf$ s$ = s$ + "Le contenu du champ à gauche désigne le fichier qui sera utilisé pour l'ajout."+crlf$+crlf$ s$ = s$ + "Si la ressource n'existe pas encore dans la DLL, elle sera ajoutée."+crlf$ s$ = s$ + "Si la ressource existe déjà dans la DLL, elle sera remplacée." caption 200,s$ return help36: caption 200,"Supprimer la ressource sélectionnée dans la liste des ressources." return help38: s$ = "Nom et chemin du fichier pour l'extraction d'une ressource."+crlf$+crlf$ s$ = s$ + "Utiliser le bouton <...> pour choisir le fichier."+crlf$ s$ = s$ + "La ressource sélectionnée dans la liste des ressources sera extraite dans ce fichier."+crlf$ caption 200,s$ return help39: caption 200,"Choisir le nom et l'emplacement du fichier dans lequel la ressource sélectionnée sera extraite." return help40: s$ = "Extraire une ressource dans un fichier."+crlf$+crlf$ s$ = s$ + "La ressource extraite est celle qui est sélectionnée dans la liste des ressources."+crlf$ s$ = s$ + "ATTENTION: il faut veiller à donner la bonne extension au fichier, sinon il ne sera pas utilisable !" caption 200,s$ return help101: caption 200,"Liste des ressources disponibles."+crlf$+crlf$+"Un clic dans cette liste sélectionne la ressource pour extraction ou suppression." return
P.S. Mars, Venus ??? Trop hostile, tout ça ! Moi, je suis comme Colluche: je me sens bien quand mes pieds touchent bien par terre ! | |
| | | Minibug
Nombre de messages : 4570 Age : 58 Localisation : Vienne (86) Date d'inscription : 09/02/2012
| Sujet: Re: KGF_dll - nouvelles versions Jeu 5 Nov 2020 - 7:04 | |
| Bonjour Klaus, Merci pour toutes ces explications. J'avais bien saisie l'idée générale du truc mais là c'est beaucoup plus clair. Maintenant il ne reste plus qu'a tester la mise en place de ces fonctions... Concernant les fichiers du projet dans GPP j'utilise les fonctions ARCHIVE pour le moment. Peut être que je modifierai tout cela par la suite. Je pense plutôt l'utiliser dans l'installation du programme. Pour le moment, j'essaie d'avancer pour proposer une version fonctionnelle de GPP2 en mode éditeur. Encore merci pour toutes ces précisions Klaus ! | |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: KGF_dll - nouvelles versions Sam 7 Nov 2020 - 2:26 | |
| KGF.dll V9.32 du 06/01/11/2020Nouveautés: - nouveau module: imprimer directement dans un fichier PDFModules modifiés: KGF.dll KGF.chmLa doc est à jour. On peut maintenant créer des éditions directement dans un fichier PDF. c=Cela se fait par un script passé à une seule fonction qui s'occupe de tout. Et comme le script est dans un mémo ou un list, il peut provenir d'un fichier préenregistré, mais il peut également être créé directement per un programme Panoramic. Et j'ai mis à disposition un moyen de passer UN NOMBRE NON LIMITE de paramères texte et des valeurs entières et flottantes. Et on peut utiliser une large gamme de formats pour la mise en page de ces valeurs. On peut dessiner des formes, des lignes dans tous les sens, inclure des images, avoir une image de fond - bref, remplir un formulaire prédéfini contenu dans un fichier JPG scanné par exemple devient très facile ! Voici une brève démo: - Code:
-
' test_PDF.bas
label go dim res%, WB%, url$, PDF$ dim TxtPars$(100), IntPars%(100), FloatPars(100)
dll_on "KGF.dll" full_space 0
button 1 : top 1,10 : left 1,330 : caption 1,"Go !" : on_click 1,go
memo 100 : top 1,10 : left 100,10 : width 100,300 : height 100,500 : bar_both 100 ' item_add 100,"Background,.\Icones 16x16\Passiflore.jpg" : ' Background,nom affichage d'une image de fond sur toute la page ' item_add 100,"Background,#0" : ' Background,nom affichage d'une image de fond sur toute la page item_add 100,"Font,Arial,96,BI,0,1" : ' Font,n,t,a,c,b choisir une police par son nom, la taille, les attributs et sa couleur, le style du fond item_add 100,"Pen,0,0,3,0" : ' Pen,s,m,w,c choisir une plume avec son style, mode, l'épaisseur et la couleur item_add 100,"Text,300,600,Mon texte est ici" : ' Text,x,y,txt,f afficher la valeur texte indice n #n=indice n sans #: txt=valeur string directe item_add 100,"Integer,300,900,317,Entier: %d" : ' Integer,x,y,n,f afficher la valeur entière indice n format f #n=indice n sans #: n=valeur entière directe item_add 100,"Float,300,1200,3.14159,Flottant money: %m" : ' Float,x,y,v,f afficher la valeur flottante indice n #n=indice n sans #: f=valeur flottante directe item_add 100,"Image,300,1500,1200,800,#0" : ' Image,x,y,w,h,nom afficher une image #n=indice sans #: nom=nom du fichier TxtPars$(0) = ".\Icones 16x16\Passiflore.jpg" PDF$ = "testPDF.pdf"
end
go: res% = dll_call5("PrintFormattedPDF",handle(100),adr(TxtPars$),adr(Intpars%),adr(FloatPars),adr(PDF$)) message "res%="+str$(res%) execute PDF$ return
En commentaires, il y a le code pour afficher une image de fond. Et, bien entendu, il faut adapter les chemins ves les fichiers image selon votre configuration. Aucune DLL externe, pas de contrôle active-x - rien que du pur code Delphi dans KGF.dll, sans ressources externes. | |
| | | Oscaribout
Nombre de messages : 471 Date d'inscription : 29/12/2016
| Sujet: Re: KGF_dll - nouvelles versions Sam 7 Nov 2020 - 3:29 | |
| Bravo Klaus, je prends. Merci | |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: KGF_dll - nouvelles versions Sam 7 Nov 2020 - 11:23 | |
| Merci, Oscaribout ! Voici une application concrète de l'impression dans un PDF: le remplissage du formulaire dérogatoire COVID-19Voici le formulaire vierge, scanné en JPG: https://klauspanoramic.000webhostapp.com/attestation-de-deplacement-derogatoire.jpgEt voici le code diu programme (faudra adapter les données personnelles, bien sûr !): - Code:
-
' FormulaireCivid_PDF.bas
label go dim res%, PDF$, s$ dim TxtPars$(100), IntPars%(100), FloatPars(100) dim i%
dll_on "KGF.dll" full_space 0
alpha 1 : top 1,10 : left 1,10 : caption 1,"Choix de la personne:" combo 2 : top 2,30 : left 2,10 : width 2,300 item_add 2,"Dupond, Martin" item_add 2,"Dupond, Françoise" item_select 2,1 button 10 : top 10,100 : left 10,10 : caption 10,"Go !" : on_click 10,go
memo 100 : top 100,10 : left 100,500 : width 100,300 : height 100,500 : bar_both 100 ' item_add 100,"Background,.\Icones 16x16\Passiflore.jpg" : ' Background,nom affichage d'une image de fond sur toute la page ' item_add 100,"Background,#0" : ' Background,nom affichage d'une image de fond sur toute la page ' item_add 100,"Font,Arial,96,BI,0,1" : ' Font,n,t,a,c,b choisir une police par son nom, la taille, les attributs et sa couleur, le style du fond ' item_add 100,"Pen,0,0,3,0" : ' Pen,s,m,w,c choisir une plume avec son style, mode, l'épaisseur et la couleur ' item_add 100,"Text,300,600,Mon texte est ici" : ' Text,x,y,txt,f afficher la valeur texte indice n #n=indice n sans #: txt=valeur string directe ' item_add 100,"Integer,300,900,317,Entier: %d" : ' Integer,x,y,n,f afficher la valeur entière indice n format f #n=indice n sans #: n=valeur entière directe ' item_add 100,"Float,300,1200,3.14159,Flottant money: %m" : ' Float,x,y,v,f afficher la valeur flottante indice n #n=indice n sans #: f=valeur flottante directe ' item_add 100,"Image,300,1500,1200,800,#0" : ' Image,x,y,w,h,nom afficher une image #n=indice sans #: nom=nom du fichier ' TxtPars$(0) = ".\Icones 16x16\Passiflore.jpg"
end
go: i% = item_index(2) select i% case 1: Script_1() case 2: Script_2() end_select res% = dll_call5("PrintFormattedPDF",handle(100),adr(TxtPars$),adr(Intpars%),adr(FloatPars),adr(PDF$)) execute PDF$ return sub Script_1() PDF$ = "Formulaire_0.pdf" TxtPars$(0) = "attestation-de-deplacement-derogatoire.jpg" TxtPars$(1) = item_index$(2) TxtPars$(2) = "23/04/1956" TxtPars$(3) = "Melun (77)" TxtPars$(4) = "82 rue de la République, 91000 Evry" TxtPars$(5) = "Belfort" TxtPars$(6) = date$ txtpars$(7) = time$ commun() end_sub
sub Script_2() PDF$ = "Formulaire_1.pdf" TxtPars$(0) = "attestation-de-deplacement-derogatoire.jpg" TxtPars$(1) = item_index$(2) TxtPars$(2) = "17/11/1962" TxtPars$(3) = "Belfort (90)" TxtPars$(4) = "82 rue de la République, 91000 Evry" TxtPars$(5) = "Belfort" TxtPars$(6) = date$ txtpars$(7) = time$ commun() end_sub
sub commun() clear 100 TxtPars$(1) = item_index$(2) item_add 100,"Background,#0" : ' formulaire vide item_add 100,"Font,Arial,96,BI,0,1" item_add 100,"Pen,0,0,3,0" item_add 100,"Text,1300,1050,#1" : ' nom, prénom item_add 100,"Text,1300,1250,#2" : ' date de naissance item_add 100,"Text,2550,1250,#3" : ' lieu de naissance item_add 100,"Text,1300,1420,#4" : ' adresse item_add 100,"Text,1300,5160,#5" : ' lieu item_add 100,"Text,1300,5360,#6" : ' date item_add 100,"Text,2350,5360,#7" : ' heure end_sub
Dernière édition par Klaus le Sam 7 Nov 2020 - 18:01, édité 1 fois | |
| | | Marc
Nombre de messages : 2466 Age : 63 Localisation : TOURS (37) Date d'inscription : 17/03/2014
| Sujet: Re: KGF_dll - nouvelles versions Sam 7 Nov 2020 - 12:33 | |
| Encore et toujours Bravo et Merci Klaus ! - Oscaribout a écrit:
- ...je prends.
Je me suis servi aussi ! J’ai fait quelques premiers tests avec succès ! Voilà qui ouvre une grande porte vers le monde de l’impression. Ton lien ci-dessus ne fonctionne pas pour nous, j’ai donc pris provisoirement ce lien : https://klauspanoramic.000webhostapp.com/attestation-de-deplacement-derogatoire.jpg- Spoiler:
Voici le rendu d'un de mes essais : - Spoiler:
Bonne continuation ! | |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: KGF_dll - nouvelles versions Sam 7 Nov 2020 - 13:08 | |
| Tu peux même scanner ta signature sur un document quelconque, avec un logiciel comme photofiltre, tu extraits l'image de la signature et la déposes dans un fichier du genre MaSignature.jpg. Ensuite, tu peux l'inclure dans ton édition PDF via la commande script - Code:
-
Image,x,y,w,h,nom avec x,y=coordonnées du coin en haut à gauche de l'image dans le PDF w,h=dmensions du rectangle visé dans le PDF nom=chaîne de caractères avec le nom relatif ou absolu, ou #n avec n=iindice dans le tableau des chaînes de caractères. | |
| | | Contenu sponsorisé
| Sujet: Re: KGF_dll - nouvelles versions | |
| |
| | | | KGF_dll - nouvelles versions | |
|
Sujets similaires | |
|
| Permission de ce forum: | Vous ne pouvez pas répondre aux sujets dans ce forum
| |
| |
| |