Seite 2 von 2

Re: Nochmals das leidige #EM_SETSEL - Problem

Verfasst: 07.08.2011 18:55
von ts-soft
Tja, ich kann die Maustaste auch eine Minute festhalten ohne Änderungen. Liegt vielleicht an Deinem
Touchpad, vielleicht testest Du mal mit einer Maus.

Re: Nochmals das leidige #EM_SETSEL - Problem

Verfasst: 07.08.2011 19:02
von Daffy0815
@Falko

Mag sein, nur jetzt nochmals die Frage:

Wie erreicht man das sich das "Reinklicken" in ein Stringgadget mit der Maus (in meinem Fall ist es das Berühren des Stringgadget mit dem Fingernagel auf einem Touchscreen) EXAKT GENAUSO VERHÄLT als hätte man im Beispiel die TAB-Taste gedrückt?

Gruß

Daffy

Re: Nochmals das leidige #EM_SETSEL - Problem

Verfasst: 07.08.2011 19:05
von Christian+
Dann musst du die #WM_MOUSEMOVE, #WM_LBUTTONDBLCLK und #WM_LBUTTONDOWN Events verwerfen die für dieses Gadget auftreten nachdem das Gadget bereits den Fokus hat.

Re: Nochmals das leidige #EM_SETSEL - Problem

Verfasst: 07.08.2011 20:06
von Daffy0815
@Christian+

Christian+ hat geschrieben:Dann musst du die #WM_MOUSEMOVE, #WM_LBUTTONDBLCLK und #WM_LBUTTONDOWN Events verwerfen die für dieses Gadget auftreten nachdem das Gadget bereits den Fokus hat.
Das ist leicht gesagt!

Die einzigen (dokumentierten) Eventtypen beim Stringgadget sind Change, Focus und LostFocus.
Darüber hinaus sehe ich noch "256" und "512" was auch immer die bedeuten sollen?

Gruß

Daffy

Re: Nochmals das leidige #EM_SETSEL - Problem

Verfasst: 07.08.2011 20:12
von Christian+
Also so was habe ich auch noch nicht gemacht gibt deswegen sicher welche die sich da viel besser auskennen. Ich habe mal kurz gesucht was man dazu umbauen könnte und denke so sollte es gehen:

Code: Alles auswählen

Global lpPrevFunc

Procedure StringGadgetCallBack(hWnd, uMsg, wParam, lParam)
  If uMsg = #WM_MOUSEMOVE Or uMsg = #WM_LBUTTONDBLCLK Or uMsg = #WM_LBUTTONDOWN
    Protected Gadget = GetActiveGadget()
    If Gadget <> -1 And GadgetID(Gadget) = hWnd
      ProcedureReturn
    EndIf
  EndIf
  ProcedureReturn CallWindowProc_(lpPrevFunc, hWnd, uMsg, wParam, lParam)
EndProcedure

OpenWindow(0, 0, 0, 300, 200, "StringGadget", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)

StringGadget(0, 10,  10, 250, 20, "String Gadget 0")

StringGadget(1, 10,  40, 250, 20, "String Gadget 1")

lpPrevFunc = SetWindowLongPtr_(GadgetID(0), #GWL_WNDPROC, @StringGadgetCallBack())

Define Event.i

Repeat
  
  Event = WaitWindowEvent()
  
  If Event = #PB_Event_Gadget
    
    Select EventGadget()
      Case 0
        If EventType() = #PB_EventType_Focus
          SendMessage_(GadgetID(0), #EM_SETSEL, 0, -1)
        EndIf
      Case 1
        If EventType() = #PB_EventType_Focus
          SendMessage_(GadgetID(1), #EM_SETSEL, 0, -1)
        EndIf
    EndSelect
    
  EndIf
  
Until Event = #PB_Event_CloseWindow

Re: Nochmals das leidige #EM_SETSEL - Problem

Verfasst: 07.08.2011 20:23
von Daffy0815
@Christian+

Bei Gadget(0) funtioniert es!

Sehe ich das richtig das nun für jedes Stringgadget die Zeile

"lpPrevFunc = SetWindowLongPtr_(GadgetID(X), #GWL_WNDPROC, @StringGadgetCallBack())"

eingetragen werden muss?

Und falls ja, können diese Zeilen innerhalb der Prozedur stehen in der die Stringgadgets erzeugt werden?

Kann die Zeile auch in einer For-Next-Schleife stehen?

Gruß

Daffy



PS. Habe die Fragen getestet. Ist möglich!