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 |
|
|
| quel objet choisir? | |
| | |
Auteur | Message |
---|
jpcr
Nombre de messages : 276 Age : 57 Localisation : Val de Marne (94) Date d'inscription : 06/05/2011
| Sujet: Re: quel objet choisir? Dim 6 Sep 2015 - 16:53 | |
| haha , tu es formidable. je te met un zip a ton nom dans mon webdav d'ici 15 minutes.
je veut un fond et une image par dessus avec transparence et je veut pouvoir cliquer sur cette image pour déclencher un événement.
jp
ps : je t’ai ajouté un fichier Jicehel.zip contenant tout | |
| | | Jicehel
Nombre de messages : 5947 Age : 52 Localisation : 77500 Date d'inscription : 18/04/2011
| Sujet: Re: quel objet choisir? Dim 6 Sep 2015 - 19:42 | |
| Je t'ais modifié le code vite fait. Pour ce que tu veux, il y a des tas de façon de faire. En supposant que tu acceptes le clic sur le carré correspondant à l'étoile, tu dois te faire une picture à la taille de ton étoile pour ne prendre en compte que le clic sur cette étoile. Après tu aurais d'autre moyen comme faire comme tu as fait, la détection sur l'image de fond et testé la couleur du pixel qui s'y trouve, tu pourrais alors dire que l'utilisateur à cliqué sur l'étoile si le pixel correspondant au clic est de couleur jaune. Voici le programme modifié pour la détection du clic dans le carré encadrant l'image par la détection de clic. Encore une fois, il y a des tas d'autres moyens d'obtenir la même chose, comme détecté la position du clic et voir s'il est dans le carré encadrant cette image et si tel est le cas, tu peux faire un test de couleur si tu ne veut que les clics exactement sur cette étoile jaune. Le source est: - Code:
-
' Démo_superposition_images.bas
dim res%
label clic, clic_100, fin : ' on crée une marque (un "label" en anglais)
' Modification de la forme principale width 0,1024 : height 0,750 : hide 0
' Création du picture visible picture 100 : top 100,10 : left 100,10 width 100,900 : height 100,544 : hide 100
' Création de l'image cliquable picture 102 : width 102,100 : height 102,100: top 102, 120 : left 102, 50
' création d'un picture pour les incrustations picture 101 : hide 101 : width 101,100 : height 101,100
KGF_initialize("KGF.dll")
' -------------------------------------------- ' on charge l'image de fond ' -------------------------------------------- ' file_load 100,"Fond2.bmp" ' on la place dans le presse-papier clipboard_copy 100 ' on charge cette image dans l'image interne LoadPicture()
' -------------------------------------------------- ' on charge l'image de la bande 1 à incruster dessus ' -------------------------------------------------- ' on charge une image à incruster dansl'image de fond file_load 101,"etoile.bmp" ' on la place dans le presse-papier clipboard_copy 101 ' incuster cette image dans l'image de fond ' elle sera placée à partir de (0,106) de l'image de fond ' ==== res% = dll_call6("ModifyPicture",x%,y%,T%,R%,G%,B%) ' avec un taux de transparence de 50% (0%: invisible et 100% = opaque) ' et la couleur noire (0,0,0) est considérée comme transparente ModifyPicture(0,0,100,0,0,0) : ' On place l'image ' récupérer l'image interne vers le presse-papier savePicture() ' et copier le résultat dans le picture d'affichage: clipboard_paste 102
show 0 : show 100 : show 102 : on_close 0,fin on_click 102,clic : ' à chaque clic sur lobjet 1 on exécute à partir de "clique" on_click 100,clic_100 : ' à chaque clic sur lobjet 1 on exécute à partir de "clique"
' et voilà, le tour est joué !
end
#INCLUDE "KGF_SUB.bas"
clic: caption 0 , "on a cliqué sur etoile " : ' on affiche un texte dans le bandeau de la fenêtre return : ' fin du sous-programme de traitement du clic sur l'étoile
clic_100: caption 0 , "---" : ' on affiche un texte dans le bandeau de la fenêtre return : ' fin du sous-programme de traitement du clic sur l'image
fin: res% = dll_call1("KillProcessByHandle",handle(0)) dll_off Si ça ne correspond pas exactement à ce que tu veux, c'est que j'ai mal compris, mais n'hésites pas à demander et je corrigerais. | |
| | | jpcr
Nombre de messages : 276 Age : 57 Localisation : Val de Marne (94) Date d'inscription : 06/05/2011
| Sujet: Re: quel objet choisir? Lun 7 Sep 2015 - 8:48 | |
| merci, ça marche bien !!!
un peu dommage d'avoir a gérer 2 images pour 1 click, mais bon , ça marche.
je vais pouvoir m'amuser maintenant...
jp | |
| | | Jicehel
Nombre de messages : 5947 Age : 52 Localisation : 77500 Date d'inscription : 18/04/2011
| Sujet: Re: quel objet choisir? Lun 7 Sep 2015 - 9:00 | |
| Tu peux ne pas faire d'objet et géré le clic sur l'image de fond comme tu as fait dans ton programme Dans ce cas là, par contre, tu dois géré les coordonnées de la souris au moment du clic et faire une test de collision entre ce point et le rectangle AABB encadrant ton étoile (tu peux regarder le tuto n°1 sur les collision pour avoir la procédure toute faite). C'est vraiment un choix d'organisation de ton programme. En tout cas, tu peux t'amuser | |
| | | jpcr
Nombre de messages : 276 Age : 57 Localisation : Val de Marne (94) Date d'inscription : 06/05/2011
| Sujet: Re: quel objet choisir? Lun 28 Sep 2015 - 11:42 | |
| bon , je suis un peu mais ce code si simple ne fonctionne pas, c’est a dire que le fond de l’étoile n'est pas transparent. je ne comprends pas pourquoi. le code est dans "jp hog.rar" sur mon webdav. mille merci jp | |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: quel objet choisir? Lun 28 Sep 2015 - 16:11 | |
| Petite réflexion sur la transparence sous Windows: Sous Windows, seule une fenêtre sans parent peut avoir une gestion de transparence par canal alpha. Une fenêtre sans parent est une fenêtre non modale, appartenant directement au bureau et non à une application. Or, toutes les fenêtres que tu peux créer en Panoramic, sont des fenêtres "filles" de la form 0 qui est leur parent. Donc, aucune gestion de transparence pour ces fenêtres. Mais ça va plus loin. Presque tous les objets visibles sous Windows sont réalisés sous forme de fenêtre Windows, dont le parent est un des objets de la fenêtre principale de l'application. Automatiquement, tu ne peux en aucun cas avoir une transparence quelconque pour un objet visible de Panoramic, que ce soit picture, memo, button etc. Maintenant, comme toujours, il y a des moyens de contourner, ou de réduire, les contraintes imposées par Windows. Et c'est la notion de région. Chaque fenêtre Windows (et donc chaque objet visible) est affichée dans une zone à l'écran nommée région. Initialement, et par défaut, cette zone est rectangulaire et est identique aux dimensions extérieures de l'objet. Mais on peut manipuler une région. On peut lui donner n'importe quelle forme: coins arronis, ovale, polygone, un ensemble de formes irrégulières non contigues etc. Le tout est de définir correctement la région et de l'imposer à l'objet vise. Il y a une série de fonctions dans KGF.dll qui font exactement cela. Si par exemple tu veux afficher une étoile par-dessus une image ou une fenêtre quelconque, tu procèdes ainsi: 1. tu crées une form de la taille approximative de ton étoile (ou tout autre objet pouvant afficher une image de fond, mais PAS un picture !). 2. tu charges l'image dans l'objet créé 3. tu crées une bitmap en pixels noirs et blans uniquement, pour "masquer" l'étoile. 4. tu crées une région correspondant aux pixels masquant l'étoile 5. tu imposes cette région à l'objet affichant l'étoilre Et comme par magie, ton étoile apparaît sans le fond, comme si le fond était réellement transparent ! Mieux: si un objet Panoramic est partiellement caché par l'étoile, tu peux quand-même cliquer sur l'objet, à travers de ce qui devrait être le fond de l'image. Le fond n'existe plus, tout simplement. Par contre, il est impossible, même avec une région, d'imposer un dégré de transparence à l'étoile, comme si elle était translucide. Rappelle-toi: ceci n'est possible que pour les fenêtres sans parent, ce qui n'est pas le cas ici.
Voilà. Tu vois qu'il s'agit de considérations générales de Windows, et c'est totalement indépendant de Panoramic. Le seul moyen d'aller plus loin dans ce domaine, ce serait de créer une fenêtre sans parent directement à partir d'une API de Windows (CreateWindow ou CreateWindow Ex), de manipuler la région de cette fenêtre (facile, puisqu'on aura le handle) et ensuite de lui imposer la valeur choisie entre 0 et 255 du canal alpha. | |
| | | jpcr
Nombre de messages : 276 Age : 57 Localisation : Val de Marne (94) Date d'inscription : 06/05/2011
| Sujet: Re: quel objet choisir? Lun 28 Sep 2015 - 17:04 | |
| wow, merci, Klaus, de cette réponse longue et détaillée.
donc en imaginant que je veuille faire un petit jeu avec 10 objet caché , je devrai avoir 11 form ?
jp | |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: quel objet choisir? Lun 28 Sep 2015 - 17:12 | |
| A priori oui. Mais, qu'est-ce que tu appelles "caché" ? La commande HIDE ne fait pas ce que tu veux pour cacher un objet ? Et, en lisant bien mpon post ci-dessus, tu verras qu'un objet Panoramic FORM ne fait pas l'affaire si tu parles de transparence, car c'est un objet avec parent... | |
| | | jpcr
Nombre de messages : 276 Age : 57 Localisation : Val de Marne (94) Date d'inscription : 06/05/2011
| Sujet: Re: quel objet choisir? Lun 28 Sep 2015 - 17:56 | |
| | |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: quel objet choisir? Lun 28 Sep 2015 - 19:21 | |
| Alors, tu peux procéder autrement, à l'aide de KGF.dll !
J'imagine que tu as une image de fon qui est fixe. Tu veux y incruster un objet contenu dans une image. cette image a un fond de couleur unie, distincr des couleurs utilisées dans la partie utile de l'image, comme le noir, par exemple. Et je suppose également que l'incrustation se fait de façon "fixe", de sorte à placer la petite image dans la grande, sans le fond.
Or, c'est exactement le domaine d'application des fonction de gestion d'image de KGF.dll. Tu procédes selon les étapes suivantes: 1. tu charges la grande image dans un picture Panoramic, par la commande FILE_LOAD 2. tu copies cette image dans le presse-papier, par la commande CLIPBOARD_COPY 3. tu charges KGF.dll, si ce n'est pas déjà fait, par la commande DLL_ON 4. tu charges le presse-papier dans l'image interne de la DLL, par la fonction LoadPicture 5. tu passes le traitement des images en mode "immédiat", par la fonction SetImmediateMode 6. tu charges l'image à incruster dans un picture Panoramic par la commande FILE_LOAD 7. tu copies cette image dans le presse-papier, par la commande CLIPBOARD_COPY 8. tu incrustes le contenu du presse-papier dans l'image interne par la fonction ModifyPicture 9. tu récupères l'image interne résultante du presse-papier dans un picture Panoramic par la commande CLIPBOARD_PASTE 10. et tu utilises l'image récupérée à ta guise.
Ton motif est incrusté, absolument sans son fond. Et pour savoir si l'objet a été cliqué, tu exploites des coordonnées retournées par les fonctions MOUSE_X_LEFT_DOWN et MOUSE_Y_LEFT_DOWN, sur la grande image.
Voilà, j'espère avoir apporté d'autres éléments de réflexion. | |
| | | Contenu sponsorisé
| Sujet: Re: quel objet choisir? | |
| |
| | | | quel objet choisir? | |
|
Sujets similaires | |
|
| Permission de ce forum: | Vous ne pouvez pas répondre aux sujets dans ce forum
| |
| |
| |