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 SetWindowButtons | |
| | Auteur | Message |
---|
Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Nouvelle DLL SetWindowButtons Lun 3 Jan 2011 - 19:06 | |
| J'ai trouvé le moyen absolu d'empêcher la fermeture d'une fenêtre !
Et j'ai rendu cela acessible via une fonction dans ma nouvelle DLL SetWindowButtons.dll:
res% = dll_call2("SetCloseBox",hnd%,mode%)
hnd% est le handle de la form choisie, et mode% détermine le mode d'action: 0 supprime la croix rouge, 1 restitue la croix rouge !
Dans la même veine, j'ai paramétré les boutons Reduire et Agrandir:
res% = dll_call2("SetMinimizeMaximize",hnd%,mode%)
avec les mêmes paramètres !
Ainsi, une form sur laquelle on appelle les deux routines avec mode%=0, n'a aucun de ces boutons, mais garde son aspect normal par ailleurs.
Et on ne peut plus arrêter cette form par ma croix rouge, et ceci SANS on_close !
Et c'est dans DLLs divers, bien sûr !
| |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: Nouvelle DLL SetWindowButtons Jeu 6 Jan 2011 - 0:31 | |
| Dans la même DLL, j'ai rajouté une fonction qui permet de régler le degré de transparence d'une form !
i% = dll_call2("WindowTransparency",hnd%,trans%)
avec hnd% = handle de la form, et trans% le degré de transparence, entre 0=invisible et 255=opaque
Le programme de démo est "test Boutons de form.bas".
| |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: Nouvelle DLL SetWindowButtons Sam 8 Jan 2011 - 3:03 | |
| Le programme de démonstration pour cette DLL contient maintenant un bouton "Form évanescente". Un click sur ce bouton fait apparaître une form qui s'évanouit progressivement, puis réapparaît tout aussi progressivement, en jouant sur la transparence de cette form.
On peut utiliser cela en créant deux forms sans bord aux mêmes coordonnées d'écran - elles se superposent donc. Si l'on donne la transparence 255 (défaut - opaque) à l'une et 0 (transparent) à l'autre, on n'en voit qu'une. On place maintenant un objet picture sur chacune de ces forms de manière à remplir l'espace visuel total de la form. En chargeant une image *.bmp dans une des forms et une autre dans l'autre, et en effectuant une variation de la transparence de la première form de 255 à 0 et de la seconde de 0 à 255, mais de façon synchrone (+1 et -1 simultanément sur les forms concernées), on obtient un fondu-enchâiné impeccable comme effet de transition entre deux images successives ! | |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: Nouvelle DLL SetWindowButtons Lun 10 Jan 2011 - 2:27 | |
| A titre d'exemple, j'ai fait un petit programme qui montre la transition entre deux photos en fondu-enchaîné. Les noms des deux images sont à mettre en ligne 12 et 15, dans la commande file_load. La vitesse du fondu-enchainé se règle par l'intervalle du timer en ligne 24 (20 milli-secondes actuellement) et par l'incrément de transparence en ligne 30 et 31 (valeur 1 actuellement). Il suffit de mettre deux images personnelles. Bien sûr, adapter comme d'habitude, la taille des forms 10 et 20 et des picture 11 et 21 pour s'adapter à vos images ! Voici le code: - Code:
-
' FonduEnchaine.bas - exemple de transition douce entre 2 images
label tim
dim hnd10%, hnd20%, trans10%, trans20%, delta%, i%
dll_on "SetWindowButtons.dll"
form 10 : border_hide 10 : top 10,40 : left 10,40 : hnd10% = handle(10) : hide 10 width 10,400 : height 10,300 picture 11 : parent 11,10 : top 11,0 : left 11,0 : width 11,390 : height 11,270 stretch_on 11 : file_load 11,"radarfixe.jpg" form 20 : border_hide 20 : top 20,40 : left 20,40 : hnd20% = handle(20) : hide 20 picture 21 : parent 21,20 : top 21,0 : left 21,0 : width 21,390 : height 21,270 stretch_on 21 : file_load 21,"apprenants.jpg"
trans10% = 255 : trans20% = 0 : delta% = 1
i% = dll_call2("WindowTranparency",hnd10%,trans10%) i% = dll_call2("WindowTranparency",hnd20%,trans20%)
show 10 : show 20
timer 30 : timer_interval 30,20 : on_timer 30,tim : timer_on 30
end
tim: timer_off 30 : trans10% = trans10% - delta% : trans20% = trans20% + delta% if trans20%=0 then delta% = 1 if trans20% = 255 then delta% = -1 i% = dll_call2("WindowTranparency",hnd10%,trans10%) i% = dll_call2("WindowTranparency",hnd20%,trans20%) timer_on 30 return
| |
| | | Yannick
Nombre de messages : 8635 Age : 53 Localisation : Bretagne Date d'inscription : 15/02/2010
| Sujet: ? Possibilité de la dll Mar 11 Jan 2011 - 13:48 | |
| Salut Klaus,
Ton dernier ajout pour la transparence s'applique-t-il à tous les objets ? Dans mon cas je m'intéresse à container.
Et oui... absent du forum depuis un moment, mais toujours actif sur Panoramic et toujours plein de question ennuyeuses.
| |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: Nouvelle DLL SetWindowButtons Mar 11 Jan 2011 - 14:53 | |
| Pour les objets autres que les form, c'est un problème beaucoup plus ardu. Et cela vient de Windows. En effet, la transparence par canal alpha n'est possible que pour une fenêtre "top level" qui n'est pas une fenêtre fille. Et les objets tels que bouton, edit etc sont des fenêtres fille pour lesquelles ce n'est pas appliquable techniquement.
Pour le moment, je transforme une form "fille" en forme "indépendante" et lui applique la transparence. Ca marche bien, mais cela implique la form complète. Et c'est ainsi que j'ai réalisé le fondu-enchaîné entre deux images: j'ai créé deux forms sans bord, chacune remplie entièrement par un objet picture. Et ce sont les forms que j'adapte en leur appliquant la transparence, et automatiquement, le picture devient tranparent aussi. Et cela peut être utilisé avec d'autres objets que des picture, comme par exemple des container.
Bon, il y a des inconvénients à cette technique. D'une part, la transparence s'applique à la form entière, en englobant tous les objets qui y sont déposés. C'est pourquoi je ne pense pas que cela soit la solution que tu recherches. Et d'autre part, comme la form est indépendante, elle pourrait être cachée en cliquant sur une autre form (la form 0 par exemple). Il faut la déclarer "topmost" avec la fonction correspondante de KGF.dll. Et même dans ce cas, toujours comme elle est indépendante, elle n'est pas "collée" à la form 0. Si tu déplaces la form 0, la form transparente ne suivra pas, et elle sera donc déplacée relativement par rapport à son origine.
Je suis en train chercher une solution pour simuler la transparence sur d'autres objets que les forms, mais je n'en suis pas encore au bout. J'arrive à rendre un objet transparent, mais je n'arrive pas à le recoller dans la form. Patience...
Une autre piste que je poursuis: pouvoir intercepter l'évènement indiquant qu'une form a été déplacée. Si j'ai cela, je peux décaler une form transparente un un objet transparent de façon synchronisée avec la form qui a bougé. C'est difficile, mais je ne jette pas l'éponge. Cela fait bien un an environ que je cherche la solution pour maîtriser le bouton de fermeture, et j'ai fini par trouver, et maîtriser "Minimiser" et "Maximiser" en même temps, alors... | |
| | | Yannick
Nombre de messages : 8635 Age : 53 Localisation : Bretagne Date d'inscription : 15/02/2010
| Sujet: snif... Mar 11 Jan 2011 - 15:04 | |
| Bon ben tant pis, mais tant qu'il y a de la vie, il y a de l'espoir et mes compétences sont largement dépassées en ce qui concerne la conception d'outils et manipulation de windows lui même. Comme j'suis un gars patient......
Merci tout de même d'avoir répondu aussi vite. | |
| | | Contenu sponsorisé
| Sujet: Re: Nouvelle DLL SetWindowButtons | |
| |
| | | | Nouvelle DLL SetWindowButtons | |
|
Sujets similaires | |
|
| Permission de ce forum: | Vous ne pouvez pas répondre aux sujets dans ce forum
| |
| |
| |