Nochmals das leidige #EM_SETSEL - Problem

Windowsspezifisches Forum , API ,..
Beiträge, die plattformübergreifend sind, gehören ins 'Allgemein'-Forum.
Benutzeravatar
Daffy0815
Beiträge: 390
Registriert: 15.06.2005 00:44
Wohnort: 65719 Hofheim
Kontaktdaten:

Nochmals das leidige #EM_SETSEL - Problem

Beitrag von Daffy0815 »

Hallo Leute,

leider habe ich immer noch keine brauchbare Lösung für das VOLLSTÄNDIGE Markieren eines Stringgadgets gefunden.

Die Anweisung "SendMessage_(GadgetID(NumGadget.i), #EM_SETSEL, 0, -1)" im Falle von "#PB_EventType_Focus" ist nur die
"halbe Miete"!

Sie funktioniert ausschließlich bei Bedienung mit "TAB" bzw. "Shift-TAB".

Wird jedoch mit der Maus in das Stringgadget "geklickt" dann wird abhängig von der Position des Mauskursors beim "Klick" nur ein Teil des Stringgadgets markiert!

Was man brauchen würde wäre der "Event" "Linksklick in Stringgadget", dann die Funktion "Kursor ganz nach rechts" und dann das "#EM_SETSEL"

Weis da jemand Rat?


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+ »

Ein Quellcode zum Testen wäre sinnvoll. Ich würde es mal damit probieren.

Code: Alles auswählen

SendMessage_(GadgetID(NumGadget), #EM_SETSEL, 0, Len(GetGadgetText(NumGadget)))
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 »

@Cristian+

Habe es getestet.
Funktioniert NICHT!

Ist irgendwie auch logisch denn wenn mit 0, -1 der gesamte markiert werden soll dann ist 0, Stringlänge doch auch nichts anderes.

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+ »

Ok hätte ja sein können das sich nur das -1 das Problem macht wenn man eine bestimmte länge an gibt sollte ja eigentlich auch diese beachtet werden. Mein Problem ist allerdings das ich nicht herausfinde was du meinst hast du vielleicht einen Testquellcode? Ich habe mal versucht aus deinen Infos dazu was zu machen aber mir ist es nicht gelungen das Problem damit nachzustellen.

Code: Alles auswählen

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")

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, Len(GetGadgetText(1)))
        EndIf
    EndSelect
    
  EndIf
  
Until Event = #PB_Event_CloseWindow 
Edit:
Zu deiner Funktion Cursor ganz nach rechts das sollte eigentlich auch gehen läuft das bei dir auch nicht?

Code: Alles auswählen

SendMessage_(GadgetID(NumGadget), #EM_SETSEL, Len(GetGadgetText(NumGadget)), Len(GetGadgetText(NumGadget)))
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+

Habe dein Beispiel getestet und das verhält sich doch genau so wie beschrieben!

Klick mal ein paar mal zwischen "String" und "Gadget" und Du wirst sehen das plötzlich nur "String" markiert ist.

Gruß

Daffy


PS.

Das mit dem LEN(....) funktioniert garnicht.
Wir sind LINUX
Widerstand ist zwecklos - Sie werden emuliert
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 »

Daffy0815 hat geschrieben:Klick mal ein paar mal zwischen "String" und "Gadget" und Du wirst sehen das plötzlich nur "String" markiert ist.
Doppelklick = Word selektieren, das ist so standard!
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 »

@ts-soft

Unter "Klick mal ein paar mal..." verstehe ich NATÜRLICH KEINEN Doppelklick.

(Den kann mein Touchscreen auch garnicht erzeugen)

Gruß

Daffy
Wir sind LINUX
Widerstand ist zwecklos - Sie werden emuliert
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 »

Dann passiert das von Dir beschriebene aber nicht, jedenfalls nicht bei mir.
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 »

@ts-soft

Habe das gerade mit dem Beispiel von Christian+ nochmal getestet.

Das hat offenbar etwas mit der Dauer des "Links-Klicks" zu tun!

Wenn ich die Maustaste nur "ultrakurz" klicke dann wird alles markiert und der Kursor befindet sich ganz rechts.
Halte ich länger (>=0,75 Sekunden) die Taste dann wird der Kursor auf die Klickposition gesetzt und nur der Teil links vom Kursor markiert.

Gruß

Daffy
Wir sind LINUX
Widerstand ist zwecklos - Sie werden emuliert
Benutzeravatar
Falko
Admin
Beiträge: 3535
Registriert: 29.08.2004 11:27
Computerausstattung: PC: MSI-Z590-GC; 32GB-DDR4, ICore9; 2TB M2 + 2x3TB-SATA2 HDD; Intel ICore9 @ 3600MHZ (Win11 Pro. 64-Bit),
Acer Aspire E15 (Win11 Home X64). Purebasic LTS 6.11b1
HP255G8 Notebook @AMD Ryzen 5 5500U with Radeon Graphics 2.10 GHz 3.4GHz, 32GB_RAM, 3TB_SSD (Win11 Pro 64-Bit)
Kontaktdaten:

Re: Nochmals das leidige #EM_SETSEL - Problem

Beitrag von Falko »

Daffy0815 hat geschrieben:@ts-soft

Habe das gerade mit dem Beispiel von Christian+ nochmal getestet.

Das hat offenbar etwas mit der Dauer des "Links-Klicks" zu tun!

Wenn ich die Maustaste nur "ultrakurz" klicke dann wird alles markiert und der Kursor befindet sich ganz rechts.
Halte ich länger (>=0,75 Sekunden) die Taste dann wird der Kursor auf die Klickposition gesetzt und nur der Teil links vom Kursor markiert.

Gruß

Daffy
Das liegt nicht an der Zeit wie lange du die Maustaste fest hältst, sondern daran, das sich deine Maus dabei etwas
bewegt und dann bis zum Cursor die Selektierung rechts abgeschnitten wird.

Gruß Falko
Bild
Win11 Pro 64-Bit, PB_6.11b1
Antworten