Macro pourri ou bien est ce un bug ?

Sujets variés concernant le développement en PureBasic
Avatar de l’utilisateur
falsam
Messages : 7324
Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :

Macro pourri ou bien est ce un bug ?

Message par falsam »

Code : Tout sélectionner

Macro GadgetHoverCheck(x, y, Gadget)
  (((Not x<GadgetX(Gadget)) & (Not y<GadgetY(Gadget))) & (Not x>=(GadgetX(Gadget)+GadgetWidth(Gadget))) & (Not y>=(GadgetY(Gadget)+GadgetHeight(gadget))))
EndMacro
Cette macro me permettait de détecter si un gadget était survolé.
Elle fonctionne très bien avec la version 4.51 mais provoque une erreur de compilation avec la version 4.60 RC1.

Était elle pourri à la base ? ou bien est ce un bug ?

Bien entendu je peux faire autrement :)
Dernière modification par falsam le jeu. 29/sept./2011 8:17, modifié 2 fois.
Configuration : Windows 11 Famille 64-bit - PB 6.20 x64 - AMD Ryzen 7 - 16 GO RAM
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Guimauve
Messages : 1015
Inscription : mer. 11/févr./2004 0:32
Localisation : Québec, Canada

Re: Macro pourri ou bien est ce un bug ?

Message par Guimauve »

Et bien moi sous Linux Mint 11 x64 avec PB 4.60 RC 1 elle fonctionne cette macro

Code : Tout sélectionner

Macro GadgetHoverCheck(x, y, Gadget)
  (((Not x<GadgetX(Gadget)) & (Not y<GadgetY(Gadget))) & (Not x>=(GadgetX(Gadget)+GadgetWidth(Gadget))) & (Not y>=(GadgetY(Gadget)+GadgetHeight(gadget))))
EndMacro

If OpenWindow(0, 0, 0, 200, 200, "Rectangles", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
  If CreateImage(0, 200, 200) And StartDrawing(ImageOutput(0))
    y = 0
    For x = 0 To 95 Step 10
      Box(x, y, 200-2*x, 200-2*y, RGB(Random(255), Random(255), Random(255)))
      y + 10        ; C'est équivalent à 'y = y + 10'
    Next x
    StopDrawing() 
    ImageGadget(0, 0, 0, 200, 200, ImageID(0))
  EndIf
  
  Repeat
    
    Event = WaitWindowEvent()
    
    If GadgetHoverCheck(WindowMouseX(0), WindowMouseY(0), 0)
      Debug "On survol le gadget"
    Else
      Debug "On survol pas le gadget"
    EndIf
    
    Select Event
      Case 0
        
   
    EndSelect
    
    
  Until Event = #PB_Event_CloseWindow
EndIf
Debugger output a écrit :On survol pas le gadget
On survol pas le gadget
On survol pas le gadget
On survol pas le gadget
On survol pas le gadget
On survol pas le gadget
On survol pas le gadget
On survol pas le gadget
On survol pas le gadget
On survol le gadget
On survol le gadget
On survol le gadget
On survol le gadget
On survol le gadget
On survol pas le gadget
On survol pas le gadget
On survol le gadget
On survol le gadget
On survol le gadget
On survol le gadget
On survol le gadget
On survol le gadget
On survol le gadget
On survol le gadget
On survol le gadget
On survol pas le gadget
On survol pas le gadget
On survol pas le gadget
On survol pas le gadget
On survol pas le gadget
On survol pas le gadget
On survol pas le gadget
On survol pas le gadget
On survol pas le gadget
Tu es certain que le problème ne vient pas d’ailleurs ?

A+
Guimauve
Avatar de l’utilisateur
GallyHC
Messages : 1708
Inscription : lun. 17/déc./2007 12:44

Re: Macro pourri ou bien est ce un bug ?

Message par GallyHC »

Bonjour,

Déjà cette macro fonctionne très bien avec le code de Guimauve sur la version 4.60 RC1. Et en plus un grand merci le code est la solution a une chose que je devais faire et maintenant c'est chose faite :).

Merci alors pour cela.

Cordialement,
GallyHC
Configuration : Tower: Windows 10 (Processeur: i7 "x64") (Mémoire: 16Go) (GeForce GTX 760 - 2Go) - PureBasic 5.72 (x86 et x64)
Avatar de l’utilisateur
falsam
Messages : 7324
Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :

Re: Macro pourri ou bien est ce un bug ?

Message par falsam »

Content de t'avoir aider avec cette macro :)

Mes programmes qui utilisent cette macro fonctionnaient bien avec la version 4.51 mais pas avec la vers 4.60 RC1

J'utilisais cette macro dans Tiny Visual Designer accessible sur ce lien.


La compilation de ce la macro seule me provoque une erreur de compilation.

L'exemple de Guimauve plante aussi sous Window 7. mais pas sous Linux Ubuntu.

Tu as testé sous quel OS ?
Configuration : Windows 11 Famille 64-bit - PB 6.20 x64 - AMD Ryzen 7 - 16 GO RAM
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Avatar de l’utilisateur
GallyHC
Messages : 1708
Inscription : lun. 17/déc./2007 12:44

Re: Macro pourri ou bien est ce un bug ?

Message par GallyHC »

J'ai testé sur XP et seven sans aucun problème. je l'utilise pour mon programme "Tomtomax MaxiBox V3" et franchement c'est exactement ce que je voulais :).
Configuration : Tower: Windows 10 (Processeur: i7 "x64") (Mémoire: 16Go) (GeForce GTX 760 - 2Go) - PureBasic 5.72 (x86 et x64)
Avatar de l’utilisateur
falsam
Messages : 7324
Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :

Re: Macro pourri ou bien est ce un bug ?

Message par falsam »

Merci de votre Aide. j'ai installé à nouveau la version 4.60 RC1 et cette macro fonctionne de nouveau normalement. Sujet résolu et content que cette macro te plaise GallyHC.
Configuration : Windows 11 Famille 64-bit - PB 6.20 x64 - AMD Ryzen 7 - 16 GO RAM
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Avatar de l’utilisateur
GeBonet
Messages : 453
Inscription : ven. 29/févr./2008 16:17
Localisation : Belgique

Re: [RESOLU] Macro pourri ou bien est ce un bug ?

Message par GeBonet »

:wink: Bonsoir,
C'est vraiment une bonne macro que j'utilisais depuis pas mal de temps...
Maintenant XP et 7 avec PB 4.6RC1
Pêchée je ne sais plus ou ? Peut être ici :roll: Bref ci après la même de guimauve mais peut-être
plus parlante et non graphique !!!

Code : Tout sélectionner

Enumeration
  #Windows1
  #Bar
  #Gadget1 
  #Gadget2
EndEnumeration
;
Macro GadgetHoverCheck(x, y, Gadget)
	(((Not x<GadgetX(Gadget)) & (Not y<GadgetY(Gadget))) & (Not x>=(GadgetX(Gadget)+GadgetWidth(Gadget))) & (Not y>=(GadgetY(Gadget)+GadgetHeight(gadget))))
EndMacro
;
If OpenWindow(#Windows1, 0, 0, 200, 200, "Rectangles", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
  CreateStatusBar(#Bar,WindowID(#Windows1))
    AddStatusBarField(60)
    AddStatusBarField(60)
    AddStatusBarField(80)
    
    ButtonGadget(#Gadget1,20,20,100,30," Le bouton ")
    
    ButtonGadget(#Gadget2,20,80,100,30,"Autre bouton")

	Repeat
		
        Event = WaitWindowEvent()
		xp=WindowMouseX(0):yp=WindowMouseY(0)
		
		StatusBarText(#Bar,0,"X= "+Str(xp),#PB_StatusBar_Raised)
        StatusBarText(#Bar,1,"Y= "+Str(yp),#PB_StatusBar_Raised)
      
		If GadgetHoverCheck(xp,yp , #Gadget1) Or GadgetHoverCheck(xp,yp , #Gadget2)
		  Debug "On survol un gadget"
		  StatusBarText(#Bar,2,"IN Gadegt",#PB_StatusBar_Raised)
		Else  
		  StatusBarText(#Bar,2,"OUT Gadegt",#PB_StatusBar_Raised)
		EndIf
		
		Select Event
			Case 0
		
		EndSelect
		
	Until Event = #PB_Event_CloseWindow
EndIf
Bonne nuit ! :)
Windows 7 et Windows 8.1 Pb 5.0 jusque 5.24 Lts 64 et 5.3 (64)/b]
“Ceux qui rêvent éveillés ont conscience de mille choses qui échappent à ceux qui ne rêvent qu’endormis.”
-Edgar Allan Poe-
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Re: [RESOLU] Macro pourri ou bien est ce un bug ?

Message par Backup »

GeBonet a écrit ::wink: Bonsoir,
C'est vraiment une bonne macro que j'utilisais depuis pas mal de temps...
Maintenant XP et 7 avec PB 4.6RC1
Pêchée je ne sais plus ou ? Peut être ici :roll: Bref ci après la même de guimauve mais peut-être
plus parlante et non graphique !!!
ben oui mais si c'est pour Copier Guimauve , je vois pas l’intérêt d'ajouter un post :roll:

chez pas moi ; t'aurai pu avoir un peu d'imagination et faire un truc nouveau
meme si je ne l'ai pas testé sous 4.6 ,et qu'il est specifique Windows, cela apporte au moins une nouveauté ...

c'est le problème des dinosaures, les neurones défaillent , ils finissent par manquer d'originalité

un code comme ça par exemple (qui apporte une nouveauté, un nouvel angle , une autre solution ) :

Code : Tout sélectionner

Declare over_by_dobro(x,Y)
Global caption$ = Space(100)
Enumeration
      #wind
      #Button_Load
EndEnumeration


If OpenWindow(#wind, 0, 0, 200, 200, "Rectangles", #PB_Window_SystemMenu | #PB_Window_ScreenCentered) 
      If ButtonGadget(#Button_Load, 0, 6, 80, 30, "test")
      EndIf
      
      Repeat
            x=DesktopMouseX():Y=DesktopMouseY() 
            Event = WaitWindowEvent()
            id= over_by_dobro(x,Y)
            If   id=4
                  Debug "dessus"
            Else
                  Debug "pas dessus"
            EndIf 
            Select Event
                        
            EndSelect
            
            
      Until Event = #PB_Event_CloseWindow
EndIf 

Procedure over_by_dobro(x,Y)
      ; by Dobro
      hW = WindowFromPoint_(x|Y<<32)
      id= GetWindowText_(hW, @caption$, 99)
   ProcedureReturn id 
EndProcedure


je trouve que par apport a la belle époque du Forum (les anciens comprendront)
les "récents" membres , manquent de créativités (ils se reconnaitront :lol: )

si c'est pour singer un code qui viens d'etre posté , mieux vaut faire une petite sieste hein :mrgreen:
Avatar de l’utilisateur
falsam
Messages : 7324
Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :

Re: Macro pourri ou bien est ce un bug ?

Message par falsam »

Bonjour Dobro. +1 avec toi.
J'ai enlevé Résolu car je sens que la discussion va continuer ici :)
Configuration : Windows 11 Famille 64-bit - PB 6.20 x64 - AMD Ryzen 7 - 16 GO RAM
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
dayvid
Messages : 1242
Inscription : mer. 11/nov./2009 18:17
Localisation : Poitiers (Vienne)

Re: Macro pourri ou bien est ce un bug ?

Message par dayvid »

Bonjour !

IsMouseOverGadget()

Marche pas ça ???

Je veux dire, est-il équivalent
Comment tu fais si ya une image sur une image ou un gadget quelconque sur une image ou un autre gadget ?
Ceci détecte t-il bien le gadget au premier plant, et pour ceux en arrière plant ?a
La vie, C'est comme, Une boitte, De startis, On en voie, De toutes, Les couleurs !

Mon forum http://purebasic.forumphp3.com/index.php
Avatar de l’utilisateur
falsam
Messages : 7324
Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :

Re: Macro pourri ou bien est ce un bug ?

Message par falsam »

IsMouseOverGadget() je ne connais pas

Cette macro détecte la totalité des gadgets à partir du moment ou tu identifies chaque gadget dans une structures par exemple.
De plus c'est une solution multiplatform.
Configuration : Windows 11 Famille 64-bit - PB 6.20 x64 - AMD Ryzen 7 - 16 GO RAM
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
dayvid
Messages : 1242
Inscription : mer. 11/nov./2009 18:17
Localisation : Poitiers (Vienne)

Re: Macro pourri ou bien est ce un bug ?

Message par dayvid »

Ba en faite sa teste si le curseur est sur un gadget
je ne sais plus qui me la faite :?: mais je m'en sert fréquemment !
La vie, C'est comme, Une boitte, De startis, On en voie, De toutes, Les couleurs !

Mon forum http://purebasic.forumphp3.com/index.php
Répondre