Mehrzeiligen Text eingeben mit keybd_event_ geht nicht

Anfängerfragen zum Programmieren mit PureBasic.
Fairman68
Beiträge: 12
Registriert: 06.01.2006 20:00
Wohnort: Weiden i. d. Opf.

Mehrzeiligen Text eingeben mit keybd_event_ geht nicht

Beitrag von Fairman68 »

Hallo alle zusammen,

ich versuche seit Tagen fieberhaft einen mehrzeiligen Text per -Button-Klick- in ein StringGadget einzufügen, dazu muss sozusagen die "Return" Taste nach jeder Zeile gedrückt werden. Mein Ziel ist es mit mehreren vordefinierten Textbausteinen zu arbeiten die dann nur auf Klick eingefügt werden.

Soweit funzt alles bis auf die Reihenfolge der Befehle, erst schreibt er die Zeilen alle hintereinander und dann haut er die "Returns" darunter.

Warum? /:->

Ich hoffe doch das ich hier bei den Profis Hilfe finde und bedanke mich jetzt schonmal für die Antworten.

Code: Alles auswählen


If OpenWindow(0, 100, 100, 600, 300, "Eifügen", #PB_Window_SystemMenu | #PB_Window_MinimizeGadget | #PB_Window_MaximizeGadget)

If CreateGadgetList(WindowID(0))
    ButtonGadget (2311, 450 , 30, 120, 35, "Einfügen")
    StringGadget (2305, 20, 30, 400, 200, "",#ES_MULTILINE | #WS_VSCROLL | #WS_HSCROLL)
EndIf

SetActiveGadget(2305)

  Repeat
    EventID = WaitWindowEvent()
      Select EventID
        Case #PB_Event_Gadget 
          Select EventGadget()
            Case 2311
              SendMessage_(GadgetID(2305),#EM_REPLACESEL,0,"Zeile 1"):
              keybd_event_(#VK_RETURN,0,0,0) 
              keybd_event_(#VK_RETURN,0,#KEYEVENTF_KEYUP,0) 
              Delay(60)
              
              SendMessage_(GadgetID(2305),#EM_REPLACESEL,0,"Zeile 2"):
              keybd_event_(#VK_RETURN ,0,0,0)
              
              SendMessage_(GadgetID(2305),#EM_REPLACESEL,0,"Zeile 3"):
              keybd_event_(#VK_RETURN ,0,0,0)
              
              SetActiveGadget(2305)
          EndSelect
        Case #PB_Event_CloseWindow 
          Quit = 1
      EndSelect
      
Until Quit = 1
  
EndIf
End

Benutzeravatar
Kiffi
Beiträge: 10714
Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9

Re: Mehrzeiligen Text eingeben mit keybd_event_ geht nicht

Beitrag von Kiffi »

mh, wieso nicht wie folgt?

Code: Alles auswählen

[...]
Select EventGadget()
  Case 2311
    SendMessage_(GadgetID(2305),#EM_REPLACESEL,0,"Zeile 1" + #CRLF$)
    SendMessage_(GadgetID(2305),#EM_REPLACESEL,0,"Zeile 2" + #CRLF$)
    SendMessage_(GadgetID(2305),#EM_REPLACESEL,0,"Zeile 3" + #CRLF$)
    SetActiveGadget(2305)
EndSelect
[...]
Grüße ... Kiffi

Edit:

oder Du nimmst ein Editorgadget:

Code: Alles auswählen

Case 2311
  AddGadgetItem(2305, -1, "Zeile 1")
  AddGadgetItem(2305, -1, "Zeile 2")
  AddGadgetItem(2305, -1, "Zeile 3")
  SetActiveGadget(2305)
EndSelect
Zuletzt geändert von Kiffi am 04.11.2008 00:02, insgesamt 1-mal geändert.
a²+b²=mc²
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

also, was mir auf die schnelle auffällt...

wenn du auf button 2311 reagierst, hat dieser den focus, nicht das textgadget.
also kommen deine returns da nicht an.


grundsätzlich würde ich diese problemstellung auch eher über ein einfügen in einen string lösen, anstatt tastendrücke zu senden.
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
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:

Beitrag von Falko »

Ich denke mal, wenn du dieses hier vergleichst, siehst du warum
da die Returns mit eingefügt werden.

Code: Alles auswählen

If OpenWindow(0, 100, 100, 600, 300, "Eifügen", #PB_Window_SystemMenu | #PB_Window_MinimizeGadget | #PB_Window_MaximizeGadget)

If CreateGadgetList(WindowID(0))
    ButtonGadget (2311, 450 , 30, 120, 35, "Einfügen")
    StringGadget (2305, 20, 30, 400, 200, "",#ES_MULTILINE | #WS_VSCROLL | #WS_HSCROLL)
EndIf

SetActiveGadget(2305)

  Repeat
    EventID = WaitWindowEvent()
      Select EventID
        Case #PB_Event_Gadget
          Select EventGadget()
            Case 2311
              SendMessage_(GadgetID(2305),#EM_REPLACESEL,0,"Zeile 1"):
              keybd_event_(#VK_RETURN,0,0,0)
              keybd_event_(0,0,#KEYEVENTF_KEYUP,0)
              Delay(60)
             
              SendMessage_(GadgetID(2305),#EM_REPLACESEL,0,"Zeile 2"):
              keybd_event_(0,0,0,0)
             
              SendMessage_(GadgetID(2305),#EM_REPLACESEL,0,"Zeile 3"):
              keybd_event_(0,0,0,0)
             
              SetActiveGadget(2305)
          EndSelect
        Case #PB_Event_CloseWindow
          Quit = 1
      EndSelect
     
Until Quit = 1
 
EndIf
End
[Edit] leider zu spät geantwortet :lol:

Gruß Falko
Bild
Win11 Pro 64-Bit, PB_6.11b1
Fairman68
Beiträge: 12
Registriert: 06.01.2006 20:00
Wohnort: Weiden i. d. Opf.

Vielen vielen Dank.

Beitrag von Fairman68 »

Hallo.
ich wusste zwar das ihr schnell seid, aber das haut mich von den Socken :allright:

Kiffi, das ist genau das was ich suchte.
Vielen vielen dank an euch alle, ihr seid spitze. :)
Antworten