Seite 1 von 2

Überschreibemodus einstellen für Editorgadget

Verfasst: 24.01.2013 13:21
von dysti
Habe schon tagelang gegoogelt. Möchte gerne den Überschreibemodus für das Editorgadget einstellen.
Auch die API-Funktionen durchgeschaut. Aber nichts gefunden.
Ich hoffe, ihr könnt mir ein Hinweis geben.

Re: Überschreibemodus einstellen für Editorgadget

Verfasst: 24.01.2013 13:32
von RSBasic
Du könnest einfach den Fokus auf dein EditorGadget legen und die Einfg-Taste simulieren.
Eine #EM-Konstante fürs Überschreiben weiß ich spontan leider nicht, aber du kannst ja mal auf folgender Seite unter "Messages" schauen: http://msdn.microsoft.com/en-us/library ... 85%29.aspx

Re: Überschreibemodus einstellen für Editorgadget

Verfasst: 24.01.2013 13:44
von ts-soft
Das RTF-Control unterstützt IMHO keinen Überschreibmodus, musst Du also selber simulieren.

Re: Überschreibemodus einstellen für Editorgadget

Verfasst: 24.01.2013 13:51
von RSBasic
Hier mal ein Beispielcode, um die Einfg-Taste zu simulieren:

Code: Alles auswählen

If OpenWindow(0, 0, 0, 500, 250, "Window", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
  EditorGadget(1, 10, 10, 480, 230, 0)
  SetActiveGadget(1)
  
  keybd_event_(#VK_INSERT, #Null, #Null, #Null)
  keybd_event_(#VK_INSERT, #Null, #KEYEVENTF_KEYUP, #Null)
  
  Repeat : Until WaitWindowEvent() = #PB_Event_CloseWindow
EndIf
Soweit ich weiß gibt es auch eine API-Funktion, die eine Tastensimulation direkt an einen Control sendet. Ich weiß aber nicht mehr, wie diese heißt.

Re: Überschreibemodus einstellen für Editorgadget (gelöst)

Verfasst: 24.01.2013 14:51
von dysti
Hallo RSBASIC,
ich dachte, ja das ist es. Aber anscheint hat TS-Soft recht.
Mal überschreibt er, dann fügt er ein. Undefinierbar.


Edit: Funktioniert doch.

Re: Überschreibemodus einstellen für Editorgadget

Verfasst: 24.01.2013 15:41
von dysti
Hallo RSBASIC,
wie würde der Befehl aussehen, wenn man z. B. STRG + C simulieren wollte?

Re: Überschreibemodus einstellen für Editorgadget

Verfasst: 24.01.2013 16:10
von RSBasic

Code: Alles auswählen

EnableExplicit

Define EventID
Define Quit

If OpenWindow(0,0,0,500,250,"Window",#PB_Window_SystemMenu|#PB_Window_ScreenCentered)
  EditorGadget(1,10,10,480,200,0)
  ButtonGadget(2,390,220,100,20,"Kopieren",0)
  SetActiveGadget(1)
  
Repeat
  EventID=WaitWindowEvent()
  If EventID=#PB_Event_Gadget
    Select EventGadget()
      Case 2
        SetActiveGadget(1)
        keybd_event_(#VK_LCONTROL, #Null, #Null, #Null)
        keybd_event_(#VK_C, #Null, #Null, #Null)
        keybd_event_(#VK_LCONTROL, #Null, #KEYEVENTF_KEYUP, #Null)
        keybd_event_(#VK_C, #Null, #KEYEVENTF_KEYUP, #Null)
    EndSelect
  EndIf
  If EventID=#PB_Event_CloseWindow
    Quit=1
  EndIf
  Until Quit=1
EndIf
Aber wenn du einfach etwas im Editor kopieren möchtest, kannst du auch damit machen: SendMessage_(GadgetID(1),#WM_COPY,0,0)

Re: Überschreibemodus einstellen für Editorgadget

Verfasst: 24.01.2013 16:45
von bobobo
ts-soft hat geschrieben:Das RTF-Control unterstützt IMHO keinen Überschreibmodus, musst Du also selber simulieren.
Kann ich für XP (32-bitze) so nicht bestätigen

Re: Überschreibemodus einstellen für Editorgadget

Verfasst: 24.01.2013 16:48
von ts-soft
bobobo hat geschrieben:Kann ich für XP (32-bitze) so nicht bestätigen
Dann zeig doch mal die erforderliche Message, weder MSDN noch das ganze Internet liefern hierzu
andere Ergebnisse. Das mit den keyevents ist ja nur eine Simulation, die nichts mit dem RTF zu tun hat.

Wüßte auch nicht, was das jetzt mit XP zu tun haben sollte.

Gruß
Thomas

Re: Überschreibemodus einstellen für Editorgadget

Verfasst: 24.01.2013 17:25
von dysti
Ich habe jetzt mal ein Beispiel. Wenn mit der Bildschirmtastatur eine Zahl eingefügt werden, wandert der Text.
Gebe ich es über der Tastatur ein, dann überschreibt er.
Ich möchte aber gerne, das auch die Bildschirmtastatur den Text überschreibt.

Code: Alles auswählen

; English forum: http://www.purebasic.fr/english/viewtopic.php?t=7030&highlight=
; Author: Kale (updated for PB3.92 by Andre, updated for PB4.00 by blbltheworm)
; Date: 29. July 2003
; OS: Windows
; Demo: No


;-Init Constants 

#WindowIndex    =0 
#GadgetIndex    =0 
#ImageIndex     =0 
#StatusBarIndex =0 
#MenuBarIndex   =0 


;-Window Constants 
Enumeration 
  #WINDOW_MAIN
EndEnumeration


;-Gadget Constants 

;Window_Main 
Enumeration
  #MenuBar_Main 
  #MenuBar_Main_New   
  #MenuBar_Main_Open  
  #MenuBar_Main_Save  
  #MenuBar_Main_Exit  
  #MenuBar_Main_Settings
  #MenuBar_Main_Help   
  #MenuBar_Main_About  
  #MenuBar_1
  #MENU_NEW
  #MENU_OPEN
  #MENU_SAVE
  #MENU_SAVEAS
  #MENU_UNDO 
  #MENU_REDO 
  #MENU_CUT  
  #MENU_COPY 
  #MENU_PASTE
EndEnumeration

Enumeration
  #Gadget_Main_Editor
  #T_1
  #T_2
  #T_3
EndEnumeration

Enumeration
  #StatusBar_Main  
  #StatusBar_Main_Field1
  #StatusBar_Main_Field2
EndEnumeration


Procedure NoTabJump(pGadgetID) 
  ;Needed, because i don't want a jump with tab 
  Style = GetWindowLong_(pGadgetID, #GWL_STYLE) 
  newStyle = Style & (~#WS_TABSTOP) 
  SetWindowLong_(pGadgetID, #GWL_STYLE, newStyle) 
  ProcedureReturn pGadgetID 
EndProcedure 


Procedure.l Window_Main() 
  If OpenWindow(#WINDOW_MAIN,175,0,400,350,"Editor Test",#PB_Window_SystemMenu|#PB_Window_MinimizeGadget|#PB_Window_TitleBar|#PB_Window_ScreenCentered|#PB_Window_Invisible) 
    
    
    
    
    CreateMenu(#MenuBar_Main,WindowID(#WINDOW_MAIN)) 
      MenuTitle("Datei") 
      MenuItem(#MenuBar_Main_New,"Neu") 
      MenuBar() 
      MenuItem(#MenuBar_Main_Open,"Öffnen") 
      MenuItem(#MenuBar_Main_Save,"Speichern") 
      MenuBar() 
      MenuItem(#MenuBar_Main_Exit,"Ende") 
      MenuTitle("Bearbeiten") 
      MenuItem(#MenuBar_Main_Settings,"Einstellungen") 
      MenuTitle("Hilfe") 
      MenuItem(#MenuBar_Main_Help,"Hilfe") 
      MenuBar() 
      MenuItem(#MenuBar_Main_About,"Über") 
      
      If CreateToolBar(10, WindowID(#WINDOW_MAIN)) 
        ToolBarStandardButton(#MENU_NEW, #PB_ToolBarIcon_New) 
        ToolBarToolTip(10,#MENU_NEW, "Neu") 
        ToolBarStandardButton(#MENU_OPEN, #PB_ToolBarIcon_Open) 
        ToolBarToolTip(10,#MENU_OPEN, "Öffnen") 
        ToolBarStandardButton(#MENU_SAVE, #PB_ToolBarIcon_Save) 
        ToolBarToolTip(10,#MENU_SAVE, "Speichern") 
        
        ToolBarSeparator() 
        
        ToolBarStandardButton(#MENU_UNDO, #PB_ToolBarIcon_Undo) 
        ToolBarToolTip(10,#MENU_UNDO, "Rückgängig") 
        ToolBarStandardButton(#MENU_REDO, #PB_ToolBarIcon_Redo) 
        ToolBarToolTip(10,#MENU_REDO, "Wiederholen") 
        ToolBarSeparator() 
        ToolBarStandardButton(#MENU_CUT, #PB_ToolBarIcon_Cut) 
        ToolBarToolTip(10,#MENU_CUT, "Ausschneiden") 
        ToolBarStandardButton(#MENU_COPY, #PB_ToolBarIcon_Copy) 
        ToolBarToolTip(10,#MENU_COPY, "Kopieren") 
        ToolBarStandardButton(#MENU_PASTE, #PB_ToolBarIcon_Paste) 
        ToolBarToolTip(10,#MENU_PASTE, "Einfügen") 
      EndIf 
      
      ButtonGadget(#T_1,10,260,20,20,"1")
      ButtonGadget(#T_2,30,260,20,20,"2")
      ButtonGadget(#T_3,50,260,20,20,"3")
    
      EditorGadget(#Gadget_Main_Editor,0,25,400,233) 
      
      CreateStatusBar(#StatusBar_Main,WindowID(#WINDOW_MAIN)) 
      AddStatusBarField(100) 
      AddStatusBarField(100) 
      HideWindow(#WINDOW_MAIN,0) 
      
      ProcedureReturn WindowID(#WINDOW_MAIN) 
    
  EndIf 
EndProcedure 

Procedure Tastendruck(taste)
  keybd_event_(taste, #Null, #Null, #Null)
  keybd_event_(taste, #Null, #KEYEVENTF_KEYUP, #Null)
EndProcedure



;-Main Loop 
If Window_Main() 

  RemoveKeyboardShortcut(#WINDOW_MAIN, #PB_Shortcut_All) 
  
  text.s="Der Tag ist schön. Das Haus ist groß (vielleicht auch nicht), der Garten ist klein."+#CRLF$+"Auch die Bäume sind groß; Der Himmel ist blau."
 SetGadgetText(#Gadget_Main_Editor,text)
 
 SetActiveGadget(#Gadget_Main_Editor)
 Tastendruck(#VK_INSERT)


  quitMain=0 
  Repeat 
    EventID=WaitWindowEvent() 
    Select EventID 
      
      Case #PB_Event_CloseWindow 
        If EventWindow()=#WINDOW_MAIN 
          quitMain=1 
        EndIf 
        
      Case #PB_Event_Menu 
        Select EventMenu() 
          Case #MenuBar_Main_New 
          Case #MenuBar_Main_Open 
          Case #MenuBar_Main_Save 
          Case #MenuBar_Main_Exit 
            quitMain = 1 
          Case #MenuBar_Main_Settings 
          Case #MenuBar_Main_Help 
          Case #MenuBar_Main_About 
        EndSelect 

      Case #PB_Event_Gadget 
        Select EventGadget() 
          Case #Gadget_Main_Editor 
          Case #T_1
            SendMessage_(GadgetID(#Gadget_Main_Editor), #EM_REPLACESEL, 1, @"1")
          Case #T_2
            SendMessage_(GadgetID(#Gadget_Main_Editor), #EM_REPLACESEL, 1, @"2")
          Case #T_3
            SendMessage_(GadgetID(#Gadget_Main_Editor), #EM_REPLACESEL, 1, @"3"); Text wird eingesetzt
        EndSelect 

    EndSelect 
  Until quitMain 
  CloseWindow(#WINDOW_MAIN) 
EndIf 
End 

; IDE Options = PureBasic v4.00 (Windows - x86)
; Folding = -
; EnableXP
; DisableDebugger

und das ist die Lösung:

Code: Alles auswählen

Case #T_3
            SendMessage_(GadgetID(Gadget),#EM_EXGETSEL,0,Range.CHARRANGE)
            SendMessage_(GadgetID(#Gadget_Main_Editor),#EM_SETSEL,Range\cpMax, Range\cpMax+1)
            SendMessage_(GadgetID(#Gadget_Main_Editor),#WM_CUT,0,0)
            SendMessage_(GadgetID(#Gadget_Main_Editor), #EM_REPLACESEL, 1, @"3"); Text wird eingesetzt