Seite 1 von 1

drag & drop mit buttonimagegadget's

Verfasst: 13.06.2013 20:57
von Rothammel
Hallo Jungs,

ich habe eine Art mini Lagerverwaltung programmiert und sie läuft nun schon seit Jahren in einer zerspanenden Produktivumgebung:

- der Client wird nur mit einem umgebauten USB Joystick Interface oder per Barcodescanner bedient:
Bild

- die Verwaltung kann an jedem anderen Rechner normal genutzt werden:

Bild

nun da alles läuft geht es darum die eine oder andere Zusatzoption hinzuzufügen, derzeit möchte ich in der Verwaltung die Inhalte der buttonimagegadgets gerne per drag & drop verschieben.

in einem schnellen minitest funktioniert es auch gut, wenn auch nicht gerade elegant :lol:
aber das Hauptfenster verliert wärend des verschiebens den Fokus und bei verschiedenen Styles gibt es einen Versatz... daher mein Anliegen, habt ihr noch einen besseren Lösungsansatz?

hier das Archiv:
http://spezialumbauten-zittau.de/sharin ... 20drop.zip
hier der Code:

Code: Alles auswählen

; Zeichenvorlage | +Chr(10)+

ExamineDesktops()
If OpenWindow(0, (DesktopWidth(0)/2)-250, (DesktopHeight(0)/2)-250, 500, 500, "buttonimagegadget verschieben Test")


  If CreateMenu(0, WindowID(0))
    MenuTitle("File")
      ;MenuItem( 1, "&Load...")
      MenuItem( 7, "&Quit")

    MenuTitle("Edition")
      MenuItem( 8, "Cut")
      MenuItem( 9, "Copy")
      MenuItem(10, "Paste")
      
    MenuTitle("?")
      MenuItem(11, "About")
  EndIf
  
  LoadImage(1,"1.bmp")
  LoadImage(2,"2.bmp")
  LoadImage(3,"3.bmp")
  LoadImage(4,"4.bmp")
  
  ButtonImageGadget(1,10,10,100,100,ImageID(1))
  ButtonImageGadget(2,120,10,100,100,ImageID(2))
  ButtonImageGadget(3,230,10,100,100,ImageID(3))
  ButtonImageGadget(4,340,10,100,100,0)
  
  
  
  
  Repeat
    Select WaitWindowEvent()
        

               
              Case #WM_LBUTTONDOWN
                ;Debug "linke Maustaste runter"
                hWnd = WindowID(GetActiveWindow())       
               GetCursorPos_ (@p.POINT)
               wGad = WindowFromPoint_(p\y << 32 + p\x)
               ScreenToClient_ (hWnd, @p)       
               cGad = ChildWindowFromPoint_ (hWnd, p\y<< 32+p\x)
                  wgadget = GetDlgCtrlID_(wGad)
                  cgadget = GetDlgCtrlID_(cGad)
                  If IsGadget(cgadget)
                    If GadgetType(cgadget) = #PB_GadgetType_ButtonImage
                      If cGad = WindowID(0)
                        ;kein Gadget
                      Else
                        ;Maus runter Gadget
                        runter=cgadget
                      EndIf
                    Else
                      ;Debug "Gadget : " + Str(wgadget)
                    EndIf
                  EndIf
                  differenzx=WindowMouseX(0)-GadgetX(cgadget)
                  differenzy=WindowMouseY(0)-GadgetY(cgadget)-50 ;minus halbe Gadgethöhe

                OpenWindow(1,WindowMouseX(0)+WindowX(0)-differenzx,WindowMouseY(0)+WindowY(0)-differenzy,102,100,"",#PB_Window_BorderLess)
                  SetWindowLongPtr_(WindowID(1),#GWL_EXSTYLE,#WS_EX_LAYERED)
                  SetLayeredWindowAttributes_(WindowID(1),0,125,#LWA_ALPHA)
                  ImageGadget(100,8,4,100,100,GetGadgetAttribute(runter,#PB_Button_Image))
                 flagrunter=1
                  
                  
              Case #WM_LBUTTONUP
                CloseWindow(1)
                ;Debug "linke Maustaste hoch"
               hWnd = WindowID(GetActiveWindow())       
               GetCursorPos_ (@p.POINT)
               wGad = WindowFromPoint_(p\y << 32 + p\x)
               ScreenToClient_ (hWnd, @p)       
               cGad = ChildWindowFromPoint_ (hWnd, p\y<< 32+p\x)
                  wgadget = GetDlgCtrlID_(wGad)
                  cgadget = GetDlgCtrlID_(cGad)
                  If IsGadget(cgadget)
                    If GadgetType(cgadget) = #PB_GadgetType_ButtonImage
                      If cGad = WindowID(0)
                        ;kein Gadget
                      Else
                        ;Maus hoch Gadget
                        rauf=cgadget
                      EndIf
                    Else
                      ;Debug "Gadget : " + Str(wgadget)
                    EndIf
                   EndIf
                
                
                
                Debug runter
                Debug rauf
                If runter <>0 And rauf <>0 And runter <> rauf
                SetGadgetAttribute(rauf,#PB_Button_Image,GetGadgetAttribute(runter,#PB_Button_Image))
                SetGadgetAttribute(runter,#PB_Button_Image,0)
                EndIf
                runter=0
                rauf=0
                aktuellueber=0
                flagrunter=0
      Case #PB_Event_Menu

        Select EventMenu()

          Case 11
            MessageRequester("About", "cooles Tool :)", 0)
            
            
          Case 7
            End

        EndSelect
        
      Case #PB_Event_Gadget
        Select EventGadget()
            
          Case 1
        EndSelect

      Case #PB_Event_CloseWindow
        Quit = 1

    EndSelect
    If flagrunter=1
      If WindowMouseX(0)>0     ; Sicherheit wenn Maus über Fensterrand
        If WindowMouseX(0)>0
          ResizeWindow(1,WindowMouseX(0)+WindowX(0)-differenzx,WindowMouseY(0)+WindowY(0)-differenzy,#PB_Ignore,#PB_Ignore)
        EndIf    
      EndIf
    EndIf
  Until Quit = 1

EndIf

End

Re: drag & drop mit buttonimagegadget's

Verfasst: 26.06.2013 03:33
von Rothammel
Rothammel hat geschrieben:Hallo Jungs,

ich habe eine Art mini Lagerverwaltung programmiert und sie läuft nun schon seit Jahren in einer zerspanenden Produktivumgebung:

- der Client wird nur mit einem umgebauten USB Joystick Interface oder per Barcodescanner bedient:
Bild

- die Verwaltung kann an jedem anderen Rechner normal genutzt werden:

Bild

nun da alles läuft geht es darum die eine oder andere Zusatzoption hinzuzufügen, derzeit möchte ich in der Verwaltung die Inhalte der buttonimagegadgets gerne per drag & drop verschieben.

in einem schnellen minitest funktioniert es auch gut, wenn auch nicht gerade elegant :lol:
aber das Hauptfenster verliert wärend des verschiebens den Fokus und bei verschiedenen Styles gibt es einen Versatz... daher mein Anliegen, habt ihr noch einen besseren Lösungsansatz?

hier das Archiv:
http://spezialumbauten-zittau.de/sharin ... 20drop.zip
hier der Code:

Code: Alles auswählen

; Zeichenvorlage | +Chr(10)+

ExamineDesktops()
If OpenWindow(0, (DesktopWidth(0)/2)-250, (DesktopHeight(0)/2)-250, 500, 500, "buttonimagegadget verschieben Test")


  If CreateMenu(0, WindowID(0))
    MenuTitle("File")
      ;MenuItem( 1, "&Load...")
      MenuItem( 7, "&Quit")

    MenuTitle("Edition")
      MenuItem( 8, "Cut")
      MenuItem( 9, "Copy")
      MenuItem(10, "Paste")
      
    MenuTitle("?")
      MenuItem(11, "About")
  EndIf
  
  LoadImage(1,"1.bmp")
  LoadImage(2,"2.bmp")
  LoadImage(3,"3.bmp")
  LoadImage(4,"4.bmp")
  
  ButtonImageGadget(1,10,10,100,100,ImageID(1))
  ButtonImageGadget(2,120,10,100,100,ImageID(2))
  ButtonImageGadget(3,230,10,100,100,ImageID(3))
  ButtonImageGadget(4,340,10,100,100,0)
  
  
  
  
  Repeat
    Select WaitWindowEvent()
        

               
              Case #WM_LBUTTONDOWN
                ;Debug "linke Maustaste runter"
                hWnd = WindowID(GetActiveWindow())       
               GetCursorPos_ (@p.POINT)
               wGad = WindowFromPoint_(p\y << 32 + p\x)
               ScreenToClient_ (hWnd, @p)       
               cGad = ChildWindowFromPoint_ (hWnd, p\y<< 32+p\x)
                  wgadget = GetDlgCtrlID_(wGad)
                  cgadget = GetDlgCtrlID_(cGad)
                  If IsGadget(cgadget)
                    If GadgetType(cgadget) = #PB_GadgetType_ButtonImage
                      If cGad = WindowID(0)
                        ;kein Gadget
                      Else
                        ;Maus runter Gadget
                        runter=cgadget
                      EndIf
                    Else
                      ;Debug "Gadget : " + Str(wgadget)
                    EndIf
                  EndIf
                  differenzx=WindowMouseX(0)-GadgetX(cgadget)
                  differenzy=WindowMouseY(0)-GadgetY(cgadget)-50 ;minus halbe Gadgethöhe

                OpenWindow(1,WindowMouseX(0)+WindowX(0)-differenzx,WindowMouseY(0)+WindowY(0)-differenzy,102,100,"",#PB_Window_BorderLess)
                  SetWindowLongPtr_(WindowID(1),#GWL_EXSTYLE,#WS_EX_LAYERED)
                  SetLayeredWindowAttributes_(WindowID(1),0,125,#LWA_ALPHA)
                  ImageGadget(100,8,4,100,100,GetGadgetAttribute(runter,#PB_Button_Image))
                 flagrunter=1
                  
                  
              Case #WM_LBUTTONUP
                CloseWindow(1)
                ;Debug "linke Maustaste hoch"
               hWnd = WindowID(GetActiveWindow())       
               GetCursorPos_ (@p.POINT)
               wGad = WindowFromPoint_(p\y << 32 + p\x)
               ScreenToClient_ (hWnd, @p)       
               cGad = ChildWindowFromPoint_ (hWnd, p\y<< 32+p\x)
                  wgadget = GetDlgCtrlID_(wGad)
                  cgadget = GetDlgCtrlID_(cGad)
                  If IsGadget(cgadget)
                    If GadgetType(cgadget) = #PB_GadgetType_ButtonImage
                      If cGad = WindowID(0)
                        ;kein Gadget
                      Else
                        ;Maus hoch Gadget
                        rauf=cgadget
                      EndIf
                    Else
                      ;Debug "Gadget : " + Str(wgadget)
                    EndIf
                   EndIf
                
                
                
                Debug runter
                Debug rauf
                If runter <>0 And rauf <>0 And runter <> rauf
                SetGadgetAttribute(rauf,#PB_Button_Image,GetGadgetAttribute(runter,#PB_Button_Image))
                SetGadgetAttribute(runter,#PB_Button_Image,0)
                EndIf
                runter=0
                rauf=0
                aktuellueber=0
                flagrunter=0
      Case #PB_Event_Menu

        Select EventMenu()

          Case 11
            MessageRequester("About", "cooles Tool :)", 0)
            
            
          Case 7
            End

        EndSelect
        
      Case #PB_Event_Gadget
        Select EventGadget()
            
          Case 1
        EndSelect

      Case #PB_Event_CloseWindow
        Quit = 1

    EndSelect
    If flagrunter=1
      If WindowMouseX(0)>0     ; Sicherheit wenn Maus über Fensterrand
        If WindowMouseX(0)>0
          ResizeWindow(1,WindowMouseX(0)+WindowX(0)-differenzx,WindowMouseY(0)+WindowY(0)-differenzy,#PB_Ignore,#PB_Ignore)
        EndIf    
      EndIf
    EndIf
  Until Quit = 1

EndIf

End
uhi, hat noch niemand mit mit drag/drop und verschieben gearbeitet?