Nochmals das leidige #EM_SETSEL - Problem

Windowsspezifisches Forum , API ,..
Beiträge, die plattformübergreifend sind, gehören ins 'Allgemein'-Forum.
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Re: Nochmals das leidige #EM_SETSEL - Problem

Beitrag 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.
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Benutzeravatar
Daffy0815
Beiträge: 390
Registriert: 15.06.2005 00:44
Wohnort: 65719 Hofheim
Kontaktdaten:

Re: Nochmals das leidige #EM_SETSEL - Problem

Beitrag 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
Wir sind LINUX
Widerstand ist zwecklos - Sie werden emuliert
Christian+
Beiträge: 213
Registriert: 13.07.2008 10:05
Computerausstattung: Windows 8.1 Pro
AMD Phenom II X4 955 @ 3.2 GHz
4GB RAM
NVIDIA GeForce GTX 660

Re: Nochmals das leidige #EM_SETSEL - Problem

Beitrag 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.
Windows 8.1 Pro 64Bit | AMD Phenom II X4 955 @ 3.2 GHz | 4GB RAM | NVIDIA GeForce GTX 660
Benutzeravatar
Daffy0815
Beiträge: 390
Registriert: 15.06.2005 00:44
Wohnort: 65719 Hofheim
Kontaktdaten:

Re: Nochmals das leidige #EM_SETSEL - Problem

Beitrag 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
Wir sind LINUX
Widerstand ist zwecklos - Sie werden emuliert
Christian+
Beiträge: 213
Registriert: 13.07.2008 10:05
Computerausstattung: Windows 8.1 Pro
AMD Phenom II X4 955 @ 3.2 GHz
4GB RAM
NVIDIA GeForce GTX 660

Re: Nochmals das leidige #EM_SETSEL - Problem

Beitrag 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
Windows 8.1 Pro 64Bit | AMD Phenom II X4 955 @ 3.2 GHz | 4GB RAM | NVIDIA GeForce GTX 660
Benutzeravatar
Daffy0815
Beiträge: 390
Registriert: 15.06.2005 00:44
Wohnort: 65719 Hofheim
Kontaktdaten:

Re: Nochmals das leidige #EM_SETSEL - Problem

Beitrag 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!
Wir sind LINUX
Widerstand ist zwecklos - Sie werden emuliert
Antworten