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!