Gadget bewegen per Maus

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
Neptunar
Beiträge: 24
Registriert: 10.05.2005 16:46
Wohnort: Hmmm.... wenn ich das wüsste

Gadget bewegen per Maus

Beitrag von Neptunar »

Hallö,

meine wenigkeit hat mal wieder ein kleins problem, hab ein paar sachen versucht, doch die funktionieren nicht...

ich möchte ein Gadget mit der maus bewegen, nun könnte ich das mit #WM_MOUSEMOVE machen, aber ich will dass, das Gadget nur sich nach den x und y positionen der maus richtet wenn die linke bzw. primäre maustaste gedrückt wird... ich komm da irgendwie net weiter ;(

mfg Neptunar :)
Benutzeravatar
Hroudtwolf
Beiträge: 1416
Registriert: 30.10.2004 23:33
Kontaktdaten:

Beitrag von Hroudtwolf »

Code: Alles auswählen

;Hroudtwolf 2005(c)

If OpenWindow(0, 0, 0, 1024, 740,#PB_Window_SystemMenu | #PB_Window_ScreenCentered , "Move Gadgets")

 
  If CreateGadgetList(WindowID())
    TextGadget (201,100,100,80,20,"test",#pb_text_border)
  EndIf

  Repeat
   
    EventID = WaitWindowEvent()
       
    Select EventID


                         
      Case #PB_EventGadget       
         
        Select EventGadgetID()
       
        EndSelect
                   
    
                 
      Case #WM_LButtonDown
        Left_Button = #TRUE     
                         
      Case #WM_LButtonUp
        Left_Button = #FALSE
               
    
      Case #WM_MOUSEMOVE
        If Left_Button = #TRUE
      

          TextGadget (201,WindowMouseX(),WindowMouseY(),80,20,"test",#pb_text_border)
        EndIf
     
      Case #PB_EventCloseWindow  
        Quit = 1
       
    EndSelect
     
   

   
  Until Quit = 1
 
EndIf

End   
Benutzeravatar
Neptunar
Beiträge: 24
Registriert: 10.05.2005 16:46
Wohnort: Hmmm.... wenn ich das wüsste

Beitrag von Neptunar »

jo,

so hab ich mir das vorgestellt, ich hatte es einmal mit einer AND verknüpfung versucht aber das funktionierte nicht.

Danke für die schnelle Hilfe.

Aber noch etwas: Wie bekomm ich das flimmern weg o_O

mfg Neptunar :)
Benutzeravatar
bluejoke
Beiträge: 1244
Registriert: 08.09.2004 16:33
Kontaktdaten:

Beitrag von bluejoke »

Hi!

Also die Bedingung

Code: Alles auswählen

#WM_LButtonDown AND #WM_MOUSEMOVE
kann natürlich nicht so ganz funzen, aber das müsste doch gehen:

Code: Alles auswählen

#WM_MOUSEMOVE AND Left_Button
bluejoke

EDIT: bezieht sich auf den Code vom Wolf!
Ich bin Ausländer - fast überall
Windows XP Pro SP2 - PB 4.00
Benutzeravatar
Neptunar
Beiträge: 24
Registriert: 10.05.2005 16:46
Wohnort: Hmmm.... wenn ich das wüsste

Beitrag von Neptunar »

bluejoke hat geschrieben: Also die Bedingung

Code: Alles auswählen

#WM_LButtonDown AND #WM_MOUSEMOVE
kann natürlich nicht so ganz funzen, aber das müsste doch gehen:

Code: Alles auswählen

#WM_MOUSEMOVE AND Left_Button
Also, das geht bei mir irgendwie auch nicht ;)
Benutzeravatar
Ynnus
Beiträge: 855
Registriert: 29.08.2004 01:37
Kontaktdaten:

Beitrag von Ynnus »

Anstatt den Butten jedesmal neu zu Erstellen (was intern Speicher freigeben, Speicher neu reservieren bedeutet) solltest du lieber das vorhandene Gadget verschieben. Entweder mit resizegadget() oder movewindow_().
Dann sollte auch das Flimmern weg sein.
#WM_MOUSEMOVE AND Left_Button
Kann natürlich nicht gehen, denn die Message lautet schließlich nur WM_MOUSEMOVE. In einem Select Case ist da eine AND-Verknüpfung nicht machbar, würd ich mal sagen. Wie soll die Message auch den Wert WM_MOUSEMOVE und gleichzeitig den wert Left_Button annehmen, wenn diese nicht identisch sind?
Benutzeravatar
Hroudtwolf
Beiträge: 1416
Registriert: 30.10.2004 23:33
Kontaktdaten:

Beitrag von Hroudtwolf »

Hat zwar bissl gedauert... Aber hier bitte schön...

Code: Alles auswählen

;Hroudtwolf 2005(c)
;Move Gadgets
If OpenWindow(0, 0, 0, 800, 600,#PB_Window_SystemMenu | #PB_Window_ScreenCentered , "Move Gadgets")

If OpenWindow(1, 10, 10, 80, 80, #pb_window_borderless|#PB_Window_Invisible|#WS_CHILD|#WS_CLIPCHILDREN, "") 
SetParent_(WindowID(1),WindowID(0)) 
SetWindowLong_(WindowID(),#GWL_EXSTYLE,#WS_EX_TOOLWINDOW)   
ShowWindow_(WindowID(),#SW_SHOW) 
  If CreateGadgetList(WindowID(1))
    TextGadget (1,0,0,80,80,"test",#pb_text_border)
  EndIf
EndIf  
  Repeat
   
    EventID = WaitWindowEvent()
       



                         
 
         
Select eventid

  Case #PB_EventCloseWindow 
    Quit = 1
  Case #wm_lbuttondown
     If EventWindowID() =1
           ReleaseCapture_() 
           SendMessage_(WindowID(1), #WM_SYSCOMMAND, #SC_MOVE + #HTCAPTION, 0) 
     EndIf 
EndSelect 

     
   

   
  Until Quit = 1
  
  EndIf 
Benutzeravatar
Neptunar
Beiträge: 24
Registriert: 10.05.2005 16:46
Wohnort: Hmmm.... wenn ich das wüsste

Beitrag von Neptunar »

Ich resize das Gadget (habe es vorher schon so gemacht) und das flimmern geht nicht weg ;(

mfg Neptunar
Benutzeravatar
Hroudtwolf
Beiträge: 1416
Registriert: 30.10.2004 23:33
Kontaktdaten:

Beitrag von Hroudtwolf »

Nimm doch denn code den ich dir eben gegeben hab.
Da flimmert nix mehr.
Benutzeravatar
Neptunar
Beiträge: 24
Registriert: 10.05.2005 16:46
Wohnort: Hmmm.... wenn ich das wüsste

Beitrag von Neptunar »

sorry, hab dein zweiten code net gesehen

aber so geht es! thx!!! :)
Antworten