Überschreibemodus einstellen für Editorgadget

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
dysti
Beiträge: 656
Registriert: 10.02.2006 18:34
Wohnort: Schlicktown

Überschreibemodus einstellen für Editorgadget

Beitrag 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.
PB5 / Spiderbasic / WB14 / Win7 / Win8.1 / Win10 / Debian 9
Benutzeravatar
RSBasic
Admin
Beiträge: 8047
Registriert: 05.10.2006 18:55
Wohnort: Gernsbach
Kontaktdaten:

Re: Überschreibemodus einstellen für Editorgadget

Beitrag 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
Aus privaten Gründen habe ich leider nicht mehr so viel Zeit wie früher. Bitte habt Verständnis dafür.
Bild
Bild
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: Überschreibemodus einstellen für Editorgadget

Beitrag von ts-soft »

Das RTF-Control unterstützt IMHO keinen Überschreibmodus, musst Du also selber simulieren.
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
RSBasic
Admin
Beiträge: 8047
Registriert: 05.10.2006 18:55
Wohnort: Gernsbach
Kontaktdaten:

Re: Überschreibemodus einstellen für Editorgadget

Beitrag 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.
Aus privaten Gründen habe ich leider nicht mehr so viel Zeit wie früher. Bitte habt Verständnis dafür.
Bild
Bild
Benutzeravatar
dysti
Beiträge: 656
Registriert: 10.02.2006 18:34
Wohnort: Schlicktown

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

Beitrag 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.
Zuletzt geändert von dysti am 24.01.2013 15:43, insgesamt 1-mal geändert.
PB5 / Spiderbasic / WB14 / Win7 / Win8.1 / Win10 / Debian 9
Benutzeravatar
dysti
Beiträge: 656
Registriert: 10.02.2006 18:34
Wohnort: Schlicktown

Re: Überschreibemodus einstellen für Editorgadget

Beitrag von dysti »

Hallo RSBASIC,
wie würde der Befehl aussehen, wenn man z. B. STRG + C simulieren wollte?
PB5 / Spiderbasic / WB14 / Win7 / Win8.1 / Win10 / Debian 9
Benutzeravatar
RSBasic
Admin
Beiträge: 8047
Registriert: 05.10.2006 18:55
Wohnort: Gernsbach
Kontaktdaten:

Re: Überschreibemodus einstellen für Editorgadget

Beitrag 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)
Aus privaten Gründen habe ich leider nicht mehr so viel Zeit wie früher. Bitte habt Verständnis dafür.
Bild
Bild
Benutzeravatar
bobobo
jaAdmin
Beiträge: 3873
Registriert: 13.09.2004 17:48
Kontaktdaten:

Re: Überschreibemodus einstellen für Editorgadget

Beitrag 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
‮pb aktuel 6.2 windoof aktuell und sowas von 10
Ich hab Tinnitus im Auge. Ich seh nur Pfeifen.
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: Überschreibemodus einstellen für Editorgadget

Beitrag 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
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
dysti
Beiträge: 656
Registriert: 10.02.2006 18:34
Wohnort: Schlicktown

Re: Überschreibemodus einstellen für Editorgadget

Beitrag 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
PB5 / Spiderbasic / WB14 / Win7 / Win8.1 / Win10 / Debian 9
Antworten