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 |
|
|
| Nouvelle DLL: ouvrir une fenêtre de messages paramétrable | |
| | Auteur | Message |
---|
Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Nouvelle DLL: ouvrir une fenêtre de messages paramétrable Mer 18 Jan 2012 - 2:19 | |
| Inspiré par un post de Exdragon, j'ai fait une petite DLL contenant pour le moment une seule fonction qui peut ouvrir, en mode modal, une fenêtre avec un libellé (éventuellement multi-ligne) et de 0 à 3 boutons. La présence des boutons est paramétrable, et les textes du titre de la fenêtre, du libellé ainsi que des libellés des 3 boutons sont paramétrables. En retour, la routine indique siu la fenêtre a été fermée par la croix rouge ou par un des trois boutons.
Il s'agit de ShowModal.dll qui se trouve sur mon site dans DLl Divers. La doc a été mise à jour.
| |
| | | exdragon
Nombre de messages : 601 Date d'inscription : 05/01/2012
| Sujet: Re: Nouvelle DLL: ouvrir une fenêtre de messages paramétrable Mer 18 Jan 2012 - 6:47 | |
| Et est-ce qu'on pourra y placer une image de fond et/ou une bordure faite "maison" ?
soit une texture + une bordure soit une image qui fait les deux à la fois
Par exemple la fenetre principale de mon editeur de map j'aimerais bien la personnaliser.
| |
| | | Jicehel
Nombre de messages : 5947 Age : 52 Localisation : 77500 Date d'inscription : 18/04/2011
| Sujet: Re: Nouvelle DLL: ouvrir une fenêtre de messages paramétrable Mer 18 Jan 2012 - 7:24 | |
| | |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: Nouvelle DLL: ouvrir une fenêtre de messages paramétrable Mer 18 Jan 2012 - 9:31 | |
| OK, l'image est parlante, je vais étudier cela. | |
| | | Jicehel
Nombre de messages : 5947 Age : 52 Localisation : 77500 Date d'inscription : 18/04/2011
| Sujet: Re: Nouvelle DLL: ouvrir une fenêtre de messages paramétrable Mer 18 Jan 2012 - 10:45 | |
| Fait attention ca si tu réusii j'ai plein d'idées pour ta DLL (fenêtre explorateur avec en argument un chemin par exemple) ... Bon courage !! | |
| | | Nardo26
Nombre de messages : 2294 Age : 56 Localisation : Valence Date d'inscription : 02/07/2010
| Sujet: Re: Nouvelle DLL: ouvrir une fenêtre de messages paramétrable Mer 18 Jan 2012 - 11:53 | |
| Je ne sais pas exactement ce que tu souhaite faire comme programme, mais à ce stade, pourquoi tu n'écris pas ton applic directement en Delphi ? Si tu fais en sorte d'avoir toute l'interface graphique dans une DLL, il te reste quoi à écrire en Panoramic ? EDIT: L'image que tu donnes en lien, peut être entièrement réalisée en Panoramic (c'est d'ailleurs ce que tu as fait pour ta copie d'écran)... où veux-tu en venir ? | |
| | | Jicehel
Nombre de messages : 5947 Age : 52 Localisation : 77500 Date d'inscription : 18/04/2011
| Sujet: Re: Nouvelle DLL: ouvrir une fenêtre de messages paramétrable Mer 18 Jan 2012 - 14:11 | |
| Ben non, c'est juste les fenêtres standards que l'on utilise fréquement. Comme Klaus a fait une DLL pour afficher les fenêtres messages en modal avec changement de titre et tout, autant aller au bout du sujet et des possibilités pour avoir une DLL qui permette de faire les fonctions standards de manière simple (principe d'utilisation d'objets préexistant). Ca à deux avantages: - d'une part, ça permet de ne pas perdre de temps avec l'interface graphique. La programmation sera propre et lisible. -d'autre part cela permet de s'affranchir des problèmes d'affichage liés à l'OS (dans tous les cas pour le faire, il faudrait utiliser une DLL pour avoir l'info ...) et de permettre de faire des choses que Panoramic ne permet pas. Il faudrait même la fusionner avec ta DLL pour pouvoir jouer sur les boutons et avoir tout dans notre nouvelle FORM.DLL Encore une fois, ce n'est que suite au fait que Klaus est commencé cette DLL puisque jusque là, je faisais ma fenêtre tout seul... | |
| | | Nardo26
Nombre de messages : 2294 Age : 56 Localisation : Valence Date d'inscription : 02/07/2010
| Sujet: Re: Nouvelle DLL: ouvrir une fenêtre de messages paramétrable Mer 18 Jan 2012 - 14:23 | |
| - Citation :
- d'une part, ça permet de ne pas perdre de temps avec l'interface graphique. La programmation sera propre et lisible.
Tu perdras autant de temps à charger la dll et de faire des appels à celle-ci... Si en plus tu veux faire en sorte que tout soit configurable, je ne suis pas sûr que tu gagneras en lisibilites (je ne trouve pas que faire des appels à DLL_CALL# soient plus lisibles) - Citation :
- d'autre part cela permet de s'affranchir des problèmes d'affichage liés à l'OS
ben non, tu auras exactement le même problème...(un gars à des problèmes de vue, il change les caractéristiques d'affichage: t'es marron !) Si tu veux connaitre la largeur des bordures et de la barre de titre, il existe des solutions 100% Panoramic... Quand tu parles de modal, si tu sous-entends : interdire le redimensionement du FORM, tu peux déjà le faire avec la DLL qui tu as cité... Je vois plutot la DLL de Klaus comme étant une extension des commandes : MESSAGE, MESSAGE_CONFIRMATION, etc... Grace à cette DLL on peut changer le titre de la boite de message... | |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: Nouvelle DLL: ouvrir une fenêtre de messages paramétrable Mer 18 Jan 2012 - 16:01 | |
| J'ai remis une version de ma DLL en ligne avec une fonction supplémentaire: res% = dll_call6("ShowMessageModalEX",adr(tit$),adr(txt$),adr(img$),boutons%,nopt%,adr(libs$)) Cette fonction affiche de 0 à trois boutons avec leurs libellés, comme la fonction précédente. Elle permet de gérer le titre de la fenêtre, ainsi qu'un message texte multi-ligne. Elle permet, si img$<>"", d'afficher une image (BMP, JPG, ...) en plus. Et elle permet d'afficher de 0 à 10 options, chacune avec un libellé paramétrable. Les options sont présentées comme des checkbox, et on peut choisir si l'on veut permettre la sélection multiple ou non. Tous les libéllés sont passés par un seul string libs$ dans lesquels les différents libellés sont séparés par des ";". Les libellés des 3 boutons (même si l'on n'utilise qu'un seul !) sont passés au début, suivi de la liste des libellés des options. Un paramètre donne le nombre d'options à utiliser. Zéro veut dire "pas d'options", 1...10 veut dire autant d'options en sélection multiple, et -1...-10 veut dire autant d'options en sélection exclusive. Rapportez-vous à la doc dans Autres DLL.rtf - est est mise à jour. Voici un programme de démo pour générer . ATTENTION ! il y a pour le moment un problème en appelant la DLL si auparavent on a utilisé FILE_NAME$() ! C'est pourquoi j'ai mis les lignes 27 à 30 en commentaire, et j'utilise la variable nom_image$ pour charger le nom d'une image, en ligne 3. Il faut adapter cette ligne à votre configuration, bien sûr. Voici le source: - Code:
-
label montrer, chercher
dim nom_image$ : nom_image$ = "C:\Documents and Settings\Klaus\Mes documents\Mes projets Delphi\WinTextPrint\apprenants_1.jpg"
dim res%, i%, n%, m%, tit$, txt$, boutons%, lib1$, lib2$, lib3$ dim nopt%, img$, libs$, resbtn%, resopt%
width 0,800
alpha 1 : top 1,10 : left 1,10 : caption 1,"Titre:" alpha 2 : top 2,40 : left 2,10 : caption 2,"Message:"
edit 11 : top 11,10 : left 11,100 memo 12 : top 12,40 : left 12,100
alpha 3 : top 3,140 : left 3,10 : caption 3,"Boutons:" check 31 : top 31,140 : left 31,100 : caption 31,"Gauche" check 32 : top 32,170 : left 32,100 : caption 32,"Milieu" check 33 : top 33,200 : left 33,100 : caption 33,"Droit" edit 41 : top 41,140 : left 41,180 edit 42 : top 42,170 : left 42,180 edit 43 : top 43,200 : left 43,180
alpha 4 : top 4,10 : left 4,400 : caption 4,"Image:" edit 21 : top 21,10 : left 21,450 : width 21,200 ' button 22 : top 22,10 : left 22,655 : width 22,30 : caption 22,"..." ' on_click 22,chercher ' open_dialog 23 ' filter 23,"Fichiers image|*.bmp;*.jpg"
alpha 5 : top 5,50 : left 5,400 : caption 5,"Options:" for i%=1 to 10 n% = i% + 50 m% = i% + 60 check n% : top n%, 20+i%*30 : left n%,450 edit m% : top m%, 20+i%*30 : left m%,490 next i% check 75 : top 75,50 : left 75,650 : width 75,140 : caption 75,"Sélections multiples"
button 100 : top 100,380 : left 100,350 : caption 100,"Montrer" on_click 100,montrer
text 21,nom_image$ mark_on 31 mark_on 75 end
chercher: img$ = file_name$(23) if img$="_" then img$ = "" text 21,img$ return
montrer: tit$ = text$(11) txt$ = "" for i%=1 to count(12) txt$ = txt$ + item_read$(12,i%) if i%<count(12) then txt$ = txt$ + chr$(13)+chr$(10) next i% boutons% = checked(31) + 2*checked(32) + 4*checked(33) libs$ = text$(41) + ";" + text$(42) + ";" + text$(43) + ";" nopt% = 0 for i%=1 to 10 if checked(50+i%)=1 nopt% = nopt% + 1 libs$ = libs$ + text$(60+i%) if i%<10 then libs$ = libs$ + ";" end_if next i% if checked(75)=0 then nopt% = 0 - nopt% img$ = text$(21)
dll_on "ShowModal.dll" res% = dll_call6("ShowMessageModalEX",adr(tit$),adr(txt$),adr(img$),boutons%,nopt%,adr(libs$)) dll_off resbtn% = BIN_AND(res%,7) resopt% = INT(res%/8) libs$ = "" n% = 1 m% = 0 for i%=1 to 10 if BIN_AND(resopt%,n%)>0 if m%>0 then libs$ = libs$ + "," m% = m% + 1 libs$ = libs$ + str$(i%) end_if n% = n% * 2 next i% libs$ = " dont choisies: "+str$(m%)+": "+libs$ message "Retour="+str$(res%)+" Bouton="+str$(resbtn%)+" Options="+str$(resopt%)+libs$ return
Ceci dit, j'avais expliqué au début qu'on peut obtenir facilement une fenêtre modale en Panoramic. En voici la preuve. Le programme ci-dessous montre un champ de saisie et un bouton. En cliquant sur le bouton, on affiche une fenêtre paramétrable (titre personnalisé, etc) réalisée entièrement en Panoramic, et en mode modal. on en peut PAS recliquer sur la fenêtre d'origine avant d'avoir fermé la fenêtre de message. Dès qu'on ferme celle-ci, on peut à nouveau travailler avec la fenêtre d'origine. Et on peut renouveller l'expérience à volonté. Voici le source: - Code:
-
label close10, afficher
edit 1 : top 1,10 : left 1,10 button 2 : top 2,40 : left 2,10 : caption 2,"Afficher" on_click 2,afficher
' création de la form de message, immédiatement cachée form 10 : hide 10 : top 10,200 : left 10,200 caption 10,"Ma fenêtre de messages" on_close 10,close10 command_target_is 10 edit 11 : top 11,10 : left 11,10 command_target_is 0
end
close10: ' on réactive la form 0 active 0 return
afficher: ' on bloque form 0 et on affiche la form 10 inactive 0 : show 10 return
| |
| | | Jicehel
Nombre de messages : 5947 Age : 52 Localisation : 77500 Date d'inscription : 18/04/2011
| Sujet: Re: Nouvelle DLL: ouvrir une fenêtre de messages paramétrable Mer 18 Jan 2012 - 16:18 | |
| C'est sûr. Merci Klaus. Bon, je pense que cette fonction couvrira la plupart des besoins Je teste ce soir (en principe, j'espère ne pas m'endormir avant ...) | |
| | | Jicehel
Nombre de messages : 5947 Age : 52 Localisation : 77500 Date d'inscription : 18/04/2011
| Sujet: Re: Nouvelle DLL: ouvrir une fenêtre de messages paramétrable Jeu 19 Jan 2012 - 0:14 | |
| Sans doute un autre Ocx à enregistrer, j'ai encore une erreur à l’exécution.
Pour gagner du temps dans les tests, j'ai repris ton exemple (Excellent d'ailleurs pour tester) avec un programme utilisant des valeurs pré-enregistrée car quand je lance j'ai le message Exception EOleSysError in module Showmodal.dll...
| |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: Nouvelle DLL: ouvrir une fenêtre de messages paramétrable Jeu 19 Jan 2012 - 1:23 | |
| Vérifie si tu as les fichiers suivants dans Windows\system32\: MFCANS32.DLL OC30.DLL stdvcl32.dll VCF132.OCXet éventuellement, fais un REGSVR32 xxx avec ces noms de fichiers, par Démarrer/Exécuter. En attendant, je continue à chercher. EDIT Egalement à vérifier: stdvcl40.dll
C'est probablement lié à stdvcl32.dll. Voici, sur un site décrivant la solution pour des programmes Delphi qui ne s'exécutent pas sur une machine sans Delphi: - Citation :
copy /-Y MFCANS32.DLL "C:\windows\system32\MFCANS32.DLL" copy /-Y OC30.DLL "C:\windows\system32\OC30.DLL" copy /-Y stdvcl32.dll "C:\windows\system32\stdvcl32.dll" copy /-Y VCF132.OCX "C:\windows\system32\VCF132.OCX" regsvr32 /s "C:\windows\system32\oc30.dll" regsvr32 /s "C:\windows\system32\stdvcl32.dll" regsvr32 /s "C:\windows\system32\vcf132.ocx" Les commandes COPY sont juste pour info: c'est prévu après un téléchargement de ces fichiers pour les mettre dans le bon répertoire, avant d'utiliser regsvr32. EDIT Curieusement, j'utilise les mêmes modules dans Print.dll. L'as-tu utilisé ? Si l'une marche, l'autre devrait marcher en toute logique. EDIT Il y a une autre dépendance: OLEPRO32.DLL. Regarde si ce fichier est dans Windows\System32\. Cette DLL devrait être présente, même en Windows 7, et n'a pas besoin d'être enregistrée par REGSVR32. | |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: Nouvelle DLL: ouvrir une fenêtre de messages paramétrable Jeu 19 Jan 2012 - 10:35 | |
| Ci-dessus, j'ai donné plusieurs pistes pour débloquer la situation. Origine du problème: j'ai voulu pouvoir charger tout type d'images: les BMP, mais aussi les JPG, les GIF etc. Et ceci passe par une DLL OLE du système. Je n'y ai vu aucun mal parce que je fais la même chose dans Print.dll et dans WTP.exe (remplaçant de WinTextPrint.exe). Ceci dit, pour ceux qui n'ont pas besoin des autres formats d'image, j'ai fait une version réduite de ShowModal.dll. Ce fichier s'appelle ShowModalBMP.dll. Il est en tout point identique à ShowModal.dll, sauf qu'il ne prend que le format BMP pour la fonction ShowMEssageModalEX. Pour l'utiliser, il suffit de remplacer DLL_ON "ShowModal.dll"par DLL_ON "ShowModalBLP.dll"Voici le programme de démo adapté à cette DLL (mêmes remarques d'utilisation que pour le programme posté antérieurement): - Code:
-
label montrer, chercher
dim nom_image$ : nom_image$ = "C:\Documents and Settings\Klaus\Mes documents\Mes projets Delphi\WinTextPrint\apprenants_1.bmp"
dim res%, i%, n%, m%, tit$, txt$, boutons%, lib1$, lib2$, lib3$ dim nopt%, img$, libs$, resbtn%, resopt%
width 0,800
alpha 1 : top 1,10 : left 1,10 : caption 1,"Titre:" alpha 2 : top 2,40 : left 2,10 : caption 2,"Message:"
edit 11 : top 11,10 : left 11,100 memo 12 : top 12,40 : left 12,100
alpha 3 : top 3,140 : left 3,10 : caption 3,"Boutons:" check 31 : top 31,140 : left 31,100 : caption 31,"Gauche" check 32 : top 32,170 : left 32,100 : caption 32,"Milieu" check 33 : top 33,200 : left 33,100 : caption 33,"Droit" edit 41 : top 41,140 : left 41,180 edit 42 : top 42,170 : left 42,180 edit 43 : top 43,200 : left 43,180
alpha 4 : top 4,10 : left 4,400 : caption 4,"Image:" edit 21 : top 21,10 : left 21,450 : width 21,200 ' button 22 : top 22,10 : left 22,655 : width 22,30 : caption 22,"..." ' on_click 22,chercher ' open_dialog 23 ' filter 23,"Fichiers image|*.bmp;*.jpg"
alpha 5 : top 5,50 : left 5,400 : caption 5,"Options:" for i%=1 to 10 n% = i% + 50 m% = i% + 60 check n% : top n%, 20+i%*30 : left n%,450 edit m% : top m%, 20+i%*30 : left m%,490 next i% check 75 : top 75,50 : left 75,650 : width 75,140 : caption 75,"Sélections multiples"
button 100 : top 100,380 : left 100,350 : caption 100,"Montrer" on_click 100,montrer
text 21,nom_image$ mark_on 31 mark_on 75 end
chercher: img$ = file_name$(23) if img$="_" then img$ = "" text 21,img$ return
montrer: tit$ = text$(11) txt$ = "" for i%=1 to count(12) txt$ = txt$ + item_read$(12,i%) if i%<count(12) then txt$ = txt$ + chr$(13)+chr$(10) next i% boutons% = checked(31) + 2*checked(32) + 4*checked(33) libs$ = text$(41) + ";" + text$(42) + ";" + text$(43) + ";" nopt% = 0 for i%=1 to 10 if checked(50+i%)=1 nopt% = nopt% + 1 libs$ = libs$ + text$(60+i%) if i%<10 then libs$ = libs$ + ";" end_if next i% if checked(75)=0 then nopt% = 0 - nopt% img$ = text$(21)
dll_on "ShowModalBMP.dll" res% = dll_call6("ShowMessageModalEX",adr(tit$),adr(txt$),adr(img$),boutons%,nopt%,adr(libs$)) dll_off resbtn% = BIN_AND(res%,7) resopt% = INT(res%/8) libs$ = "" n% = 1 m% = 0 for i%=1 to 10 if BIN_AND(resopt%,n%)>0 if m%>0 then libs$ = libs$ + "," m% = m% + 1 libs$ = libs$ + str$(i%) end_if n% = n% * 2 next i% libs$ = " dont choisies: "+str$(m%)+": "+libs$ message "Retour="+str$(res%)+" Bouton="+str$(resbtn%)+" Options="+str$(resopt%)+libs$ return
| |
| | | Jicehel
Nombre de messages : 5947 Age : 52 Localisation : 77500 Date d'inscription : 18/04/2011
| Sujet: Re: Nouvelle DLL: ouvrir une fenêtre de messages paramétrable Jeu 19 Jan 2012 - 14:04 | |
| J'essaye ce soir Klaus, je suis au boulot chez un client. (Entre temps, je suis passé de mon portable XP au nouveau portable en Windows 7 ... ) | |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: Nouvelle DLL: ouvrir une fenêtre de messages paramétrable Jeu 19 Jan 2012 - 14:18 | |
| Pour compléter mon post du 18 Janvier à 16:01, voici une version du même programme Panoramic, mais avec une amélioration. Ce programme affiche une fenêtre de message paramétrable en cliquant sur le bouton "Afficher". Cette fenêtre s'affiche en mode modal, on ne peut donc pas cliquer dans la fenêtre d'origine. Maintenant, on peut aussi refuser de la fermer, même par la croix rouge, si le programme détecte que certaines conditions ne sont pas réunies. Dans mon exemple, il faut saisir "fini" dans le champ EDIT de cette fenêtre. Comme on ne peut pas bloquer la croix rouge, j'ai ajouté un test dans la routine on_close qui, en cas de refus de fermeture, lance un timer de 100 millisecondes, qui à son tour réaffiche la fenêtre, avec son contenu évidemment qui n'est pas perdu. Voici le code: - Code:
-
label close10, afficher ' timer pour réactiver la fenêtre de messages timer 20 : timer_off 20 : timer_interval 20,100 on_timer 20,afficher
' création dela form 0 edit 1 : top 1,10 : left 1,10 button 2 : top 2,40 : left 2,10 : caption 2,"Afficher" on_click 2,afficher
' création de la form de message, immédiatement cachée form 10 : hide 10 : top 10,200 : left 10,200 caption 10,"Ma fenêtre de messages" on_close 10,close10 command_target_is 10 edit 11 : top 11,10 : left 11,10 command_target_is 0
end
close10: if text$(11)<>"fini" ' si on n'a pas la bonne valeur, il faut restaurer la fenêtre timer_on 20 return end_if ' on réactive la form 0 active 0 return
afficher: timer_off 20 ' on bloque form 0 et on affiche la form 10 inactive 0 : show 10 return
| |
| | | Jicehel
Nombre de messages : 5947 Age : 52 Localisation : 77500 Date d'inscription : 18/04/2011
| Sujet: Re: Nouvelle DLL: ouvrir une fenêtre de messages paramétrable Jeu 19 Jan 2012 - 15:51 | |
| | |
| | | Contenu sponsorisé
| Sujet: Re: Nouvelle DLL: ouvrir une fenêtre de messages paramétrable | |
| |
| | | | Nouvelle DLL: ouvrir une fenêtre de messages paramétrable | |
|
Sujets similaires | |
|
| Permission de ce forum: | Vous ne pouvez pas répondre aux sujets dans ce forum
| |
| |
| |