Splittergadget und seine Events

Hier könnt Ihr gute, von Euch geschriebene Codes posten. Sie müssen auf jeden Fall funktionieren und sollten möglichst effizient, elegant und beispielhaft oder einfach nur cool sein.
Benutzeravatar
nicolaus
Moderator
Beiträge: 1175
Registriert: 11.09.2004 13:09
Kontaktdaten:

Splittergadget und seine Events

Beitrag von nicolaus »

Da ich gerade selber das prob hatte mit den Events des Splittergadgets und daraufhin auch mal im englsichen Forum geschaut habe obs ne lösung gibt habe ich das hier gefunden:

Code: Alles auswählen

;Original bye "tinman" 

Global hSplitterGadget.l 
Global old_func.l 

#Button1  = 0 
#Button2  = 1 
#Splitter = 2 

Procedure.l foo(WindowID, Message, wParam, lParam) 
    Static state 
    
    result.l = CallWindowProc_(old_func, WindowID, Message, wParam, lParam) 
    Select Message 
        Case #WM_LBUTTONDOWN 
            state = 1 
            Debug "pressed" 
            
        Case #WM_MOUSEMOVE 
            If state = 1 
                Debug "resizing" 
            EndIf 
            
        Case #WM_LBUTTONUP 
            state = 0 
            Debug "released" 
    EndSelect 
    ProcedureReturn result 
EndProcedure 


  If OpenWindow(0, 0, 0, 230, 180, #PB_Window_SystemMenu|#PB_Window_ScreenCentered, "SplitterGadget") 
    If CreateGadgetList(WindowID(0)) 
      hButtonGadget1 = ButtonGadget(#Button1,0, 0, 0, 0, "Button 1") ; No need to specify size or coordiantes 
      hButtonGadget2 = ButtonGadget(#Button2,0, 0, 0, 0, "Button 2") ; as they will be sized automatically 
      hSplitterGadget = SplitterGadget(#Splitter, 5, 5, 220, 120, #Button1, #Button2, #PB_Splitter_Separator) 
      hSplitterGadget = GadgetID(#Splitter) 

      old_func.l = GetWindowLong_(hSplitterGadget, #GWL_WNDPROC) 
      If old_func = 0 
        old_func = GetClassLong_(hSplitterGadget, #GCL_WNDPROC) 
      EndIf 
      SetWindowLong_(hSplitterGadget, #GWL_WNDPROC, @foo()) 


      SetGadgetAttribute(#Splitter, #PB_Splitter_FirstMinimumSize, 20) 
      SetGadgetAttribute(#Splitter, #PB_Splitter_SecondMinimumSize, 20) 
      hTextGadget = TextGadget(3, 10, 135, 210, 40, "Above GUI part shows two automatically resizing buttons inside the 230x130 SplitterGadget area.",#PB_Text_Center ) 

      Repeat 
        ev = WaitWindowEvent() 
        Select ev 
            Case #PB_Event_CloseWindow : quit =1 
            Case #PB_Event_Gadget 
              EventGadgetID = EventGadgetID() 
              Debug "Gadget# = " + Str(EventGadgetID) + " Gadget handle = " + Str(GadgetID(EventGadgetID)) 
        EndSelect 
      Until quit=1 
    EndIf 
  EndIf 
  
  SetWindowLong_(hSplitterGadget, #GWL_WNDPROC, old_func) 
End
Hoffe das es euch mal so viel hilft wie mir :D

MfG Nico
Benutzeravatar
hjbremer
Beiträge: 822
Registriert: 27.02.2006 22:30
Computerausstattung: von gestern
Wohnort: Neumünster

Re: Splittergadget und seine Events

Beitrag von hjbremer »

lang ist es her, aber hat mir geholfen

mit etwas umbauen, kann ich nun das verschieben unterbinden, da ich ein Splittergadget im Splittergadget habe :allright:
Purebasic 5.70 x86 5.72 X 64 - Windows 10

Der Computer hat dem menschlichen Gehirn gegenüber nur einen Vorteil: Er wird benutzt
grüße hjbremer
Antworten