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 |
|
|
| Comment faire un picture de n'importe quelle forme ? | |
| | Auteur | Message |
---|
Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Comment faire un picture de n'importe quelle forme ? Dim 8 Nov 2015 - 2:14 | |
| Vous avez déjà voulu faire un picture sous forme de cercle ? Pas dessiner un cercle dans un picture, mais afficher une photo un peu comme dans un médaillon, sans que le rectangle englobant le cercle n'occulte le fond qui est derrière ? Les fonctions de gestion de fenêtres de KGF.dll permettent de faire cela ! En fait, on peut composer n'importe quelle forme, en accumulant des régions rectangulaires et/ou elliptiques, pour former une seule région qui représentera le picture. Et ces "briques" de composition n'ont même pas besoin de se toucher - elles peuvent parfaitement être disjointes... Pour la démonstration, je fais un simple cercle, placé par-dessus un mémo, pour bien montrer l'effet visuel. Au début, le cercle s'affiche avec une couleur unié, et un bouton permet de charger n'importe quelle image BMP (photo, clip-art, ...). Techniquement, il y a une astuce. En effet, ces fonctions ont toutes besoin d'un handle de l'objet à manipuler. Or, un objet picture de Panoramic n'a pas de handle ! Donc, je crée un objet panel (lui, il a un handle !), puis le place un picture full_space dans le panel. Et j'applique les fonctions sur le handle du panel pour obtenuir l'effet escompte: - Code:
-
' picture_en_forme_libre.bas
label img dim res%, region1%, region2%, f$
memo 10 : left 10,100 : height 10,420 font_names_load 10 panel 1 : top 1,50 : left 1,50 : width 1,300 : height 1,300 picture 2 : parent 2,1 : full_space 2 : color 2,255,200,200
open_dialog 3 : filter 3,"Images|*.bmp" button 4 : caption 4,"Image" : on_click 4,img
dll_on "KGF.dll" region2% = DLL_call5("WindowAddEllipticRegion",adr(region1%),0,0,300,300) res% = DLL_call2("WindowRegionAsWindow",handle(1),adr(region1%)) ' ici, on pourrait construire une région quelconque, ' par combinaisons de régions réctangles et/ou elliptiques ' (tête de Mickey, par exemple...), et appliquer cette région à un PANEL. ' Ainsi, le picture contenu dans le panel sera automatiquement "rogné" ' selon les limites du panel.
end
' On va charger une image dans le picture: img: f$ = file_name$(3) if f$="_" then return if lower$(right$(f$,4))<>".bmp" then f$ = f$ + ".bmp" if file_exists(f$)=0 then return file_load 2,f$ return
| |
| | | Jicehel
Nombre de messages : 5947 Age : 52 Localisation : 77500 Date d'inscription : 18/04/2011
| Sujet: Re: Comment faire un picture de n'importe quelle forme ? Dim 8 Nov 2015 - 9:28 | |
| C'est clairement une fonction très utile. Vu la limitation par rapport aux clics sur les sprites. Ce pseudo objets permet de les remplacer assez facilement à condition d'avoir des sprites de formes assez simples (idéalement réctangulaires ou circulaires pour des raisons de simplicité) | |
| | | JL35
Nombre de messages : 7112 Localisation : 77 Date d'inscription : 29/11/2007
| Sujet: Re: Comment faire un picture de n'importe quelle forme ? Dim 8 Nov 2015 - 11:30 | |
| Ça c'est carrément génial ! ça ouvre de sacrés horizons pour de l'incrustation photo par exemple... Je vais essayer ça illico, merci Klaus ! (dommage, j'ai du monde aujourd'hui, pas beaucoup le temps de faire joujou...) | |
| | | Jicehel
Nombre de messages : 5947 Age : 52 Localisation : 77500 Date d'inscription : 18/04/2011
| Sujet: Re: Comment faire un picture de n'importe quelle forme ? Dim 8 Nov 2015 - 11:42 | |
| Tant que la possibilité est là, après pour la mise en application, ce n'est qu'une question de temps et personne n'est pressé (enfin je crois ) | |
| | | Minibug
Nombre de messages : 4570 Age : 58 Localisation : Vienne (86) Date d'inscription : 09/02/2012
| Sujet: Re: Comment faire un picture de n'importe quelle forme ? Dim 8 Nov 2015 - 12:31 | |
| Merci klaus ! Très intéressant, il ne nous reste plus qu'a le mettre en pratique... | |
| | | papydall
Nombre de messages : 7017 Age : 74 Localisation : Moknine (Tunisie) Entre la chaise et le clavier Date d'inscription : 03/03/2012
| Sujet: Re: Comment faire un picture de n'importe quelle forme ? Dim 8 Nov 2015 - 15:53 | |
| Tout ça est beau. J’ai voulu faire deux (voire plus) PICTUREs de forme circulaire pour y charger des images, mais ne n’y arrive pas : seul un seul PICTURE peut être vu à la fois. Mettre en REM la ligne 15 ou 16, permet d’avoir l’une ou l’autre image dans le cercle - Spoiler:
Voici mon code: - Code:
-
dim res%, region1%, region2%,f$,hnd%
width 0,700 : height 0,500 panel 1 : top 1,50 : left 1,50 : width 1,300 : height 1,300 picture 2 : parent 2,1 : full_space 2 : color 2,255,200,200
panel 10 : top 10,50 : left 10,370 : width 10,300 : height 10,300 picture 20 : parent 20,10 : full_space 20 : color 20,255,200,200
f$ = "c:\users\acer\desktop" dll_on "KGF.dll"
region2% = DLL_call5("WindowAddEllipticRegion",adr(region1%),0,0,300,300) ' Mettre en REM l'une ou l'autre de deux lignes suivantes res% = DLL_call2("WindowRegionAsWindow",handle(1),adr(region1%)) res% = DLL_call2("WindowRegionAsWindow",handle(10),adr(region1%))
file_load 02,f$ + "Klaus.bmp" : stretch_on 02 file_load 20,f$ + "Papydall.bmp" : stretch_on 20
| |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: Comment faire un picture de n'importe quelle forme ? Dim 8 Nov 2015 - 16:07 | |
| Et si tu utilisais des variables region3% et region4% pour la deuxième image, de sorte à avoir un jeu de variables indépendantes ? | |
| | | silverman
Nombre de messages : 970 Age : 52 Localisation : Picardie Date d'inscription : 18/03/2015
| Sujet: Re: Comment faire un picture de n'importe quelle forme ? Dim 8 Nov 2015 - 16:19 | |
| Bonjour à tous,
@klaus La fonction handle_canvas(n) retourne le handle de la zone graphique d'un objet système, ça ne conviendrait pas? | |
| | | papydall
Nombre de messages : 7017 Age : 74 Localisation : Moknine (Tunisie) Entre la chaise et le clavier Date d'inscription : 03/03/2012
| Sujet: Re: Comment faire un picture de n'importe quelle forme ? Dim 8 Nov 2015 - 16:31 | |
| ça marche , merci klaus - Spoiler:
| |
| | | Marc
Nombre de messages : 2466 Age : 63 Localisation : TOURS (37) Date d'inscription : 17/03/2014
| Sujet: Re: Comment faire un picture de n'importe quelle forme ? Dim 8 Nov 2015 - 16:50 | |
| | |
| | | Jicehel
Nombre de messages : 5947 Age : 52 Localisation : 77500 Date d'inscription : 18/04/2011
| Sujet: Re: Comment faire un picture de n'importe quelle forme ? Dim 8 Nov 2015 - 17:09 | |
| Pour faire des pions cliquables sur une image (un damier ou un plateau de jeu par exemple), c'est très pratique | |
| | | papydall
Nombre de messages : 7017 Age : 74 Localisation : Moknine (Tunisie) Entre la chaise et le clavier Date d'inscription : 03/03/2012
| Sujet: Re: Comment faire un picture de n'importe quelle forme ? Dim 8 Nov 2015 - 17:24 | |
| - Code:
-
dim res%, region1%, region2%,region3%,region4%,f$,hnd% ,i
width 0,700 : height 0,500 caption 0,"<ESC> pour terminer ... " panel 1 : top 1,50 : left 1,50 : width 1,300 : height 1,300 picture 2 : parent 2,1 : full_space 2 : color 2,255,200,200
panel 10 : top 10,50 : left 10,370 : width 10,300 : height 10,300 picture 20 : parent 20,10 : full_space 20 : color 20,255,200,200
f$ = "c:\users\acer\desktop"+chr$(92) dll_on "KGF.dll"
region2% = DLL_call5("WindowAddEllipticRegion",adr(region1%),0,0,300,300) region4% = DLL_call5("WindowAddEllipticRegion",adr(region3%),0,0,300,300)
res% = DLL_call2("WindowRegionAsWindow",handle(1),adr(region1%)) res% = DLL_call2("WindowRegionAsWindow",handle(10),adr(region3%))
file_load 02,f$ + "Klaus.bmp" : stretch_on 02 : ' A adapter ... file_load 20,f$ + "Papydall.bmp" : stretch_on 20 : ' ... selon les cas repeat for i = 300 to 0 step -20 : left 2,i : top 20,i : pause 200 : next i for i = 0 to 300 step 20 : left 2,i : top 20,i : pause 200 : next i until scancode = 27 terminate
| |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: Comment faire un picture de n'importe quelle forme ? Dim 8 Nov 2015 - 18:11 | |
| @Silverman: - Citation :
- La fonction handle_canvas(n) retourne le handle de la zone graphique d'un objet système, ça ne conviendrait pas
Ce n'est pas la même chose. Pour 2 raisons: 1. le canvas d'un picture est géré par Panoramic. Si je commence à triturer le canvas de mon côté, Panoramic n'en sait rien, et au prochain réaffichage de l'image (ce qui est fréquent, sous Windows !), les modifications que j'y aurais apportées seraient perdues 2. même si je modifiais le canvas de sorte à n'afficher qu'un cercle, un ellipse ou n'importe quelle autre forme, l'objet picture en tant que tel n'est pas modifié. Il prend toujours le même espace dans le rectangle qui lui est alloué. Et en cliquant en-dehors du cercle affiché, mais à l'intérieur du rectangle du picture, le clic va au picture et non aux objets placés en-dessous. Or, dans le code que j'ai proposé, essaie de cliquer juste en-dehors du cercle, dans le mémo qui est en-dessous. Tu verras que le clic va dans le mémo - le reste du picture n'est pas devenu "transparent", il est carrément coupé ! | |
| | | JL35
Nombre de messages : 7112 Localisation : 77 Date d'inscription : 29/11/2007
| Sujet: Re: Comment faire un picture de n'importe quelle forme ? Dim 8 Nov 2015 - 20:00 | |
| Klaus, je suis en train de bricoler avec ces fonctions très intéressantes... Une fois le panel incrusté sur l'arrière-plan (ton exemple), on peut le déplacer sans problème en faisant varier le Top et le Left du panel, ça suit. Mais est-il possible de faire varier dynamiquement ses dimensions ? j'ai beau changer le Width et le Height du panel, ça ne change rien...
PS j'ai trouvé une solution: il faut remettre region1%=0 pour la recréer, et là ça marche. | |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: Comment faire un picture de n'importe quelle forme ? Lun 9 Nov 2015 - 3:44 | |
| Bravo ! Tu as trouvé !
En fait, la fonction qui affecte la région elliptique à un objet, crée une "vue" dans l'objet, un peu comme si l'on regardait cet objet par une longue-vue. Et les dimensions de cette vue ne changent pas si tu changes les dimensions de l'objet. Il faut bel et bien refaire une autre vue si nécessaire. | |
| | | Contenu sponsorisé
| Sujet: Re: Comment faire un picture de n'importe quelle forme ? | |
| |
| | | | Comment faire un picture de n'importe quelle forme ? | |
|
Sujets similaires | |
|
| Permission de ce forum: | Vous ne pouvez pas répondre aux sujets dans ce forum
| |
| |
| |