Seite 1 von 1

StringGadget - PathRequester(Doppelklick) ?

Verfasst: 07.05.2014 22:40
von Simon74
Hallo,

ich versuche einen PathRequester im StringGadget (zu finden im Preferences Untermenu!) mit #PB_EventType_Focus. (#PB_Event_LeftDoubleClick funktioniert leider gar nicht).
Ich lande dann in einem PathRequester-Loop.
Wie macht manns richtig ?

Code: Alles auswählen

Procedure Preferences()
  If OpenWindow(2, #PB_Ignore, #PB_Ignore, 600, 360," Preferences", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
    AddKeyboardShortcut(2, #PB_Shortcut_Escape, 890)
    If UseGadgetList(WindowID(2)) 
      TextGadget(81, 40, 50, 200, 25,"Path:")
      Text_Path = StringGadget(82, 100, 50, 360, 20,  "")
    EndIf
  EndIf
EndProcedure

If OpenWindow(0, 0, 0, 500, 520, " test", #PB_Window_SystemMenu|#PB_Window_SizeGadget|#PB_Window_ScreenCentered)
  ;Tastaturkeys
  AddKeyboardShortcut(0, #PB_Shortcut_Escape, 130)
  AddKeyboardShortcut(0, #PB_Shortcut_Control | #PB_Shortcut_O, 145)
  AddKeyboardShortcut(0, #PB_Shortcut_Control | #PB_Shortcut_P, 146)
  
  If UseGadgetList(0) ;Buttons und Ausgabefeld
    
   
    If CreateStatusBar(0, WindowID(0))
      AddStatusBarField(#PB_Ignore)
    EndIf

    StatusBarText(0, 0, "", #PB_StatusBar_BorderLess)
    
    If CreateMenu(0, WindowID(0)) ;Menüeinträge
      MenuTitle("Menu")
      MenuItem( 5, "&Preferences" + Chr(9) + "Strg+P")      
      MenuBar()
      MenuItem( 7, "&Exit" + Chr(9) + "Esc")

      
    EndIf
  EndIf    
  
 
  Repeat
    Select WaitWindowEvent()
      Case #PB_Event_CloseWindow
        Quit = 1
        
      Case #PB_Event_Menu ;Tastaturereignisse
        Select EventMenu()
          Case 5,146                   : Preferences()
          Case 7,130                   : Quit = 1
          Case 222,890,891,892         : CloseWindow(2)
          Case 990,991                 : CloseWindow(3)
        EndSelect
        
      Case #PB_Event_Gadget ;Mauseereignisse
        Select EventGadget()
          Case 82
            Select EventType()
              Case #PB_EventType_Focus
                BatchPath$ = PathRequester("Choose a folder.", Path$)
                SetGadgetText(82, BatchPath$)
            EndSelect
        EndSelect
        
    EndSelect
    
  Until Quit = 1
  
EndIf
Danke für Tip !

Re: StringGadget - PathRequester(Doppelklick) ?

Verfasst: 07.05.2014 23:10
von ts-soft
Hinter dem StringGadget für den Pfad, noch einen Button mit "..." oder "browse" anfügen und auf den
Button reagieren.
Wenn Du auf Veränderungen im StringGadget reagieren möchtest, dann nutze das LostFocus event,
oder Poste selber ein Event nach dem Requester.

Re: StringGadget - PathRequester(Doppelklick) ?

Verfasst: 07.05.2014 23:57
von Simon74
Also doch besser Button verwenden.
Vielen Dank

Re: StringGadget - PathRequester(Doppelklick) ?

Verfasst: 08.05.2014 17:34
von edel
Unter Windows wuerde es mit folgendem Code gehen, allerdings ist der Doppelklick in einem Stringgadget fuer das Markieren gedacht.

Code: Alles auswählen

Procedure StringEditCallback(hWnd, Msg, wParam, lParam)
  Protected OldProc = GetProp_(hWnd, "OldProc")
  Protected BatchPath.s
  
  If Msg = #WM_LBUTTONDBLCLK
    BatchPath = PathRequester("Choose a folder.", "")
    SetGadgetText(82, BatchPath)
  EndIf
  
  If Msg = #WM_DESTROY
    RemoveProp_(hWNd, "OldProc")
  EndIf
  
  
  ProcedureReturn CallWindowProc_(OldProc, hWnd, Msg, wParam, lParam)
EndProcedure

Procedure SetGadgetCallback(Gadget, Callback)
  Protected OldProc
  Protected hWnd
  
  hWnd = GadgetID(Gadget)
  
  If hWnd
    OldProc = SetWindowLongPtr_(hWnd, #GWLP_WNDPROC, Callback)
    SetProp_(hWnd, "OldProc", OldProc)
  EndIf
  
  ProcedureReturn 0
EndProcedure

Procedure Preferences()
  If OpenWindow(2, #PB_Ignore, #PB_Ignore, 600, 360," Preferences", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
    AddKeyboardShortcut(2, #PB_Shortcut_Escape, 890)
    If UseGadgetList(WindowID(2)) 
      TextGadget(81, 40, 50, 200, 25,"Path:")
                  
      Text_Path = StringGadget(82, 100, 50, 360, 20,  "")
      SetGadgetCallback(82, @StringEditCallback())
    EndIf
  EndIf
EndProcedure

If OpenWindow(0, 0, 0, 500, 520, " test", #PB_Window_SystemMenu|#PB_Window_SizeGadget|#PB_Window_ScreenCentered)
  ;Tastaturkeys
  AddKeyboardShortcut(0, #PB_Shortcut_Escape, 130)
  AddKeyboardShortcut(0, #PB_Shortcut_Control | #PB_Shortcut_O, 145)
  AddKeyboardShortcut(0, #PB_Shortcut_Control | #PB_Shortcut_P, 146)
  
  If UseGadgetList(0) ;Buttons und Ausgabefeld
    
   
    If CreateStatusBar(0, WindowID(0))
      AddStatusBarField(#PB_Ignore)
    EndIf

    StatusBarText(0, 0, "", #PB_StatusBar_BorderLess)
    
    If CreateMenu(0, WindowID(0)) ;Menüeinträge
      MenuTitle("Menu")
      MenuItem( 5, "&Preferences" + Chr(9) + "Strg+P")      
      MenuBar()
      MenuItem( 7, "&Exit" + Chr(9) + "Esc")

      
    EndIf
  EndIf    
  
 
  Repeat
    Select WaitWindowEvent()
      Case #PB_Event_CloseWindow
        Quit = 1
        
      Case #PB_Event_Menu ;Tastaturereignisse
        Select EventMenu()
          Case 5,146                   : Preferences()
          Case 7,130                   : Quit = 1
          Case 222,890,891,892         : CloseWindow(2)
          Case 990,991                 : CloseWindow(3)
        EndSelect
        
      Case #PB_Event_Gadget ;Mauseereignisse
        Select EventGadget()
          Case 82
            Select EventType()
              Case #PB_EventType_Focus

            EndSelect
        EndSelect
        
    EndSelect
    
  Until Quit = 1
  
EndIf