Fragen zum Editor Gadget

Für allgemeine Fragen zur Programmierung mit PureBasic.
Benutzeravatar
Scarabol
Beiträge: 1427
Registriert: 30.11.2005 21:00

Fragen zum Editor Gadget

Beitrag von Scarabol »

Hallo Leute,

ich hab mir nen eigenen Editor geschrieben ähnlich dem von Windows also sehr schlicht und nichts aufregendes. Den Kern bildet der Editorgadget in dem man erfreulicherweise schon die Tastenkürzel wie Strg+Z usw. benutzen kann. Ich frage mich aber nun wie ich denn dem Menüpunkt "Rückgänig" die Funktion dieses Tastenkürzels zuweisen kann. Währe ja sonst Schwachsinn wenn ich nochmal sonne Funktion programmieren würde.

Gruß
Scarabol

PS Wie kann ich den Editor gadget an die Größe des Fensters anpassen nachdem sie durch den Benutzer geändert wurde.
Abgeschlossen Projekte:
Schreibmaschine, Bildschirmlupe, Wings3DtoOgreMeshConverter
Watch: PureArea

PB-V: 4
WinXP
Benutzeravatar
AND51
Beiträge: 5220
Registriert: 01.10.2005 13:15

Beitrag von AND51 »

Es gibt eine Funktion, die gibt beim drücken von Strg+Z dasselbe menuID() zurück, wie ein "echter" Menüeintrag.
Diese beiden Sachen dürfen / müssen sogar dieselbe MenuID zugewiesen bekommen, um sie später wieder zurückgeben zu können.

Sry, mir fällt grad der Name nicht ein, von der Funktion, die diese Hotkeys erstellt.
PB 4.30

Code: Alles auswählen

Macro Happy
 ;-)
EndMacro

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

Beitrag von Kiffi »

AND51 hat geschrieben:Sry, mir fällt grad der Name nicht ein, von der Funktion, die diese Hotkeys erstellt.
AddKeyboardShortcut()


@Scarabol:
Scarabol hat geschrieben:PS Wie kann ich den Editor gadget an die Größe des
Fensters anpassen nachdem sie durch den Benutzer geändert wurde.
Mit ResizeGadget().

Grüße ... Kiffi
a²+b²=mc²
Benutzeravatar
Scarabol
Beiträge: 1427
Registriert: 30.11.2005 21:00

Beitrag von Scarabol »

ich glaub du meinst die addkeyboardshortcut funktion die kenne ich bereits ich will aber genau das gegenteil haben damit das Menu die gleiche ID hat wie der shortcut
Abgeschlossen Projekte:
Schreibmaschine, Bildschirmlupe, Wings3DtoOgreMeshConverter
Watch: PureArea

PB-V: 4
WinXP
Benutzeravatar
AND51
Beiträge: 5220
Registriert: 01.10.2005 13:15

Beitrag von AND51 »

Fenau den befehl meine ich.
Den machst du und sagt, er soll bei gedrückten tasten die ID 1 zurückgeben.

Dann erstellst du ein Menu und dann ein Menuitem, das auch die ID eins hat.
MenuID() wird dann immer 1 zurückgeben, nach einem WindowEvent(), egal ob die Tasten der der Eintrag ausgewählt wurden; das macht Sinn. Wolltest du das nicht so haben?
PB 4.30

Code: Alles auswählen

Macro Happy
 ;-)
EndMacro

Happy End
Benutzeravatar
Scarabol
Beiträge: 1427
Registriert: 30.11.2005 21:00

Beitrag von Scarabol »

Nicht ganz aber ich geb zu es ist nicht ganz einfach.
Wenn ich deine Idee befolge dann löst egal ob Tasten oder Menu immer ein und dieselbe Aktion aus. Das ist auch soweit ganz gut aber leider nicht für meine Zwecke zu gebrauchen, da ich die Aktion die ausgelöst würde selber programmieren müsste. Das heißt wiederum ich müsste eine eigene "Rückgänig" Funktion programmieren und darauf habe ich ehrlich gesagt keine Lust zumal der Editor Gadget bereits diese Funktion hat ich leider nur nicht weiß wie ich diese über das Menü aktivieren kann.
Abgeschlossen Projekte:
Schreibmaschine, Bildschirmlupe, Wings3DtoOgreMeshConverter
Watch: PureArea

PB-V: 4
WinXP
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

Beitrag von ts-soft »

Hier mal ein paar entsprechende Proceduren:

Code: Alles auswählen

Procedure Editor_CanUndo(Gadget)
  ProcedureReturn SendMessage_(GadgetID(Gadget), #EM_CANUNDO, #Null, #Null)
EndProcedure
Procedure Editor_Undo(Gadget)
  ProcedureReturn SendMessage_(GadgetID(Gadget), #EM_UNDO, #Null, #Null)
EndProcedure
Procedure Editor_CanRedo(Gadget)
  ProcedureReturn SendMessage_(GadgetID(Gadget), $0454, #Null, #Null)
EndProcedure
Procedure Editor_Redo(Gadget)
  ProcedureReturn SendMessage_(GadgetID(Gadget), $0455, #Null, #Null)
EndProcedure
Im CodeArchiv wirste auch fündig :wink:
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
Scarabol
Beiträge: 1427
Registriert: 30.11.2005 21:00

Beitrag von Scarabol »

kann man nicht einfach mit getkeyboardshortcut oder sowas die ID die der Shortcut zurückgibt herausfinden.
Weil wie gesagt keinen Bock nochmal alles zu programmieren.
Abgeschlossen Projekte:
Schreibmaschine, Bildschirmlupe, Wings3DtoOgreMeshConverter
Watch: PureArea

PB-V: 4
WinXP
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

Beitrag von ts-soft »

Du nimmst obige Prozeduren und rufst diese per Menü und
AddKeyBoardShortcut mit derselben ID auf. Anders wird es wohl nur schwer
gehen.
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
edel
Beiträge: 3667
Registriert: 28.07.2005 12:39
Computerausstattung: GameBoy
Kontaktdaten:

Beitrag von edel »

Code: Alles auswählen

  ;///////////////////////////
  ;/ Enables the explicit mode
  EnableExplicit
  
  ;///////////////////////////
  ;/ Declare variables  
  Define   WindowTitle.s = "Test"
  Define   CX.l          = 500
  Define   CY.l          = 500
  
  Define  *hWindow.long
  Define   WindowEvent.l
  Define  *hmenu.long
  Define  *editor.long
  
  #editor_undo = 1
  #editor_redo = 2
  
  ;///////////////////////////
  ;/ Open window
  *hWindow = OpenWindow(#PB_Any,#PB_Ignore,#PB_Ignore,CX,CY,WindowTitle)
  
  *hmenu = CreateMenu(#pb_any,*hWindow\l)
  MenuTitle("Bearbeiten")
  MenuItem(#editor_undo, "Undo"   +Chr(9)+"Ctrl+Z")
  MenuItem(#editor_redo, "Redo"   +Chr(9)+"Ctrl+Y")
  
  ;///////////////////////////
  ;/ Gadgets
  CreateGadgetList(*hWindow\l)
  *editor = EditorGadget(#pb_any,0,0,CX,CY-MenuHeight())
  
  AddKeyboardShortcut(*hWindow,#pb_key_z|#PB_Shortcut_Control,#editor_undo)
  AddKeyboardShortcut(*hWindow,#pb_key_y|#PB_Shortcut_Control,#editor_redo)

  ;///////////////////////////
  ;/ Window eventloop
  Repeat
    WindowEvent = WaitWindowEvent()  
    
    if WindowEvent = #PB_Event_Menu
      
      if EventMenu() = #editor_undo
        sendmessage_(*editor\l,#EM_UNDO,0,0)
      endif 
      
      if EventMenu() = #editor_redo
        sendmessage_(*editor\l,#EM_REDO,0,0)
      endif       
      
    endif 
    
    
    
  Until WindowEvent = #WM_CLOSE
  
  ;///////////////////////////
  ;/ Exit application
  End

edit : zu lahm :-)
Antworten