FORUM DE DISCUSSION SUR LE LANGAGE PANORAMIC

Développement d'applications avec le langage Panoramic
 
AccueilAccueil  FAQFAQ  RechercherRechercher  S'enregistrerS'enregistrer  MembresMembres  GroupesGroupes  Connexion  
Derniers sujets
» KGF.dll - demandes ou suggestions de modifications ou ajouts
par Klaus Aujourd'hui à 19:48

» KGF_dll - nouvelles versions
par pascal10000 Aujourd'hui à 17:27

» Mah-Jong européen new-look
par Minibug Hier à 22:31

» track_bar circulaire
par Klaus Hier à 13:54

» API Windows
par Klaus Hier à 3:21

» Cartes de voeux, menus, etc.
par JL35 Lun 11 Déc 2017 - 17:48

» a l'aide klaus
par Minibug Lun 11 Déc 2017 - 11:42

» bug SYNEDIT_TARGET_IS_OBJECT
par Jack Lun 11 Déc 2017 - 0:16

» Jukebox : Serge Reggiani
par papydall Sam 9 Déc 2017 - 5:58

» Ecouter la radio fm sur votre pc
par pascal10000 Sam 9 Déc 2017 - 3:42

» anomalie
par Klaus Sam 9 Déc 2017 - 3:21

» hommage
par Jicehel Ven 8 Déc 2017 - 11:29

» Logiciel de soutien scolaire en langues.
par Pedro Alvarez Ven 8 Déc 2017 - 10:43

» carte son
par Klaus Ven 8 Déc 2017 - 2:37

» mise a jour calculatrice
par joeeee2017 Mer 6 Déc 2017 - 22:19

Navigation
 Portail
 Index
 Membres
 Profil
 FAQ
 Rechercher
Rechercher
 
 

Résultats par :
 
Rechercher Recherche avancée
Décembre 2017
LunMarMerJeuVenSamDim
    123
45678910
11121314151617
18192021222324
25262728293031
CalendrierCalendrier

Partagez | 
 

 Comment faire un picture de n'importe quelle forme ?

Voir le sujet précédent Voir le sujet suivant Aller en bas 
AuteurMessage
Klaus

avatar

Nombre de messages : 10257
Age : 68
Localisation : Ile de France
Date d'inscription : 29/12/2009

MessageSujet: Comment faire un picture de n'importe quelle forme ?   Dim 8 Nov 2015 - 4: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
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://klauspanoramic.comxa.com/index.html
Jicehel

avatar

Nombre de messages : 5863
Age : 45
Localisation : 77500
Date d'inscription : 19/04/2011

MessageSujet: Re: Comment faire un picture de n'importe quelle forme ?   Dim 8 Nov 2015 - 11: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é)
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
JL35



Nombre de messages : 6018
Localisation : 77
Date d'inscription : 29/11/2007

MessageSujet: Re: Comment faire un picture de n'importe quelle forme ?   Dim 8 Nov 2015 - 13: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...)
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Jicehel

avatar

Nombre de messages : 5863
Age : 45
Localisation : 77500
Date d'inscription : 19/04/2011

MessageSujet: Re: Comment faire un picture de n'importe quelle forme ?   Dim 8 Nov 2015 - 13: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 Wink )
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Minibug

avatar

Nombre de messages : 2410
Age : 51
Localisation : Vienne (86)
Date d'inscription : 10/02/2012

MessageSujet: Re: Comment faire un picture de n'importe quelle forme ?   Dim 8 Nov 2015 - 14:31

Merci klaus !

Très intéressant, il ne nous reste plus qu'a le mettre en pratique... drunken
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://gpp.panoramic.free.fr
papydall

avatar

Nombre de messages : 5613
Age : 67
Localisation : Moknine (Tunisie) Entre la chaise et le clavier
Date d'inscription : 03/03/2012

MessageSujet: Re: Comment faire un picture de n'importe quelle forme ?   Dim 8 Nov 2015 - 17: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


Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://papydall-panoramic.forumarabia.com/
Klaus

avatar

Nombre de messages : 10257
Age : 68
Localisation : Ile de France
Date d'inscription : 29/12/2009

MessageSujet: Re: Comment faire un picture de n'importe quelle forme ?   Dim 8 Nov 2015 - 18:07

Et si tu utilisais des variables region3% et region4% pour la deuxième image, de sorte à avoir un jeu de variables indépendantes ?
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://klauspanoramic.comxa.com/index.html
silverman

avatar

Nombre de messages : 475
Age : 45
Localisation : Picardie
Date d'inscription : 19/03/2015

MessageSujet: Re: Comment faire un picture de n'importe quelle forme ?   Dim 8 Nov 2015 - 18: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?
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
papydall

avatar

Nombre de messages : 5613
Age : 67
Localisation : Moknine (Tunisie) Entre la chaise et le clavier
Date d'inscription : 03/03/2012

MessageSujet: Re: Comment faire un picture de n'importe quelle forme ?   Dim 8 Nov 2015 - 18:31

ça marche  , merci klaus

Spoiler:
 
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://papydall-panoramic.forumarabia.com/
Marc



Nombre de messages : 549
Age : 56
Localisation : TOURS
Date d'inscription : 18/03/2014

MessageSujet: Re: Comment faire un picture de n'importe quelle forme ?   Dim 8 Nov 2015 - 18:50

Trop cool !
MERCI !
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Jicehel

avatar

Nombre de messages : 5863
Age : 45
Localisation : 77500
Date d'inscription : 19/04/2011

MessageSujet: Re: Comment faire un picture de n'importe quelle forme ?   Dim 8 Nov 2015 - 19:09

Pour faire des pions cliquables sur une image (un damier ou un plateau de jeu par exemple), c'est très pratique Wink
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
papydall

avatar

Nombre de messages : 5613
Age : 67
Localisation : Moknine (Tunisie) Entre la chaise et le clavier
Date d'inscription : 03/03/2012

MessageSujet: Re: Comment faire un picture de n'importe quelle forme ?   Dim 8 Nov 2015 - 19: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
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://papydall-panoramic.forumarabia.com/
Klaus

avatar

Nombre de messages : 10257
Age : 68
Localisation : Ile de France
Date d'inscription : 29/12/2009

MessageSujet: Re: Comment faire un picture de n'importe quelle forme ?   Dim 8 Nov 2015 - 20: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é !
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://klauspanoramic.comxa.com/index.html
JL35



Nombre de messages : 6018
Localisation : 77
Date d'inscription : 29/11/2007

MessageSujet: Re: Comment faire un picture de n'importe quelle forme ?   Dim 8 Nov 2015 - 22: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.
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Klaus

avatar

Nombre de messages : 10257
Age : 68
Localisation : Ile de France
Date d'inscription : 29/12/2009

MessageSujet: Re: Comment faire un picture de n'importe quelle forme ?   Lun 9 Nov 2015 - 5: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.
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://klauspanoramic.comxa.com/index.html
Contenu sponsorisé




MessageSujet: Re: Comment faire un picture de n'importe quelle forme ?   

Revenir en haut Aller en bas
 
Comment faire un picture de n'importe quelle forme ?
Voir le sujet précédent Voir le sujet suivant Revenir en haut 
Page 1 sur 1
 Sujets similaires
-
» Comment faire un lien vers une autre page du site ?
» Résolu => Comment faire disparaitre la souris?
» Comment faire un genre de lotto
» comment faire un roll over "musical"
» comment faire clic droit et mon pseudo apparait

Permission de ce forum:Vous ne pouvez pas répondre aux sujets dans ce forum
FORUM DE DISCUSSION SUR LE LANGAGE PANORAMIC :: PANORAMIC :: Vos sources, vos utilitaires à partager-
Sauter vers: