PureFileMaster ein TotalCMD-Clone Released! (Version 3)

Anwendungen, Tools, Userlibs und anderes nützliches.
Benutzeravatar
Kiffi
Beiträge: 10711
Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9

Beitrag von Kiffi »

Hallo al90,

ich habe mich bei meinem Focus/LostFocus-Tipp auf Deinen Beitrag
bezogen (wenn ich ihn richtig verstanden habe):
al90 hat geschrieben:Ich habe jetzt die CommandLine integriert, aber es gibt probleme.
Und zwar lässt sich die SPACE & CRSR-Tasten nicht nutzen, da diese
bereits belegt sind. [...]
Bau doch einfach ein Flag ein, das Du setzt, wenn Dein CommandLine-
Gadget den Fokus bekommt. Ist dieses Flag gesetzt, dann überspringst Du
einfach die Routinen, die Du sonst ausführst, wenn die SPACE &
CRSR-Tasten gedrückt werden. Tritt ein LostFocus-Event auf dem
CommandLine-Gadget ein, dann kannst Du das Flag ja wieder
zurücksetzen.

Grüße ... Kiffi
a²+b²=mc²
Benutzeravatar
al90
Beiträge: 1101
Registriert: 06.01.2005 23:15
Kontaktdaten:

Beitrag von al90 »

Hallo Kiffi,

Ich glaube hier liegt ein missverständnis vor. Es geht mir nicht darum den
Focus auf das Stringgadget zu halten, (Das habe ich ja bereits mit GetActiveGadget gelöst)
Sondern es geht einfach darum das keine "Spaces" gesetzt werden.
D.H. das der Cursor an Ort und Stelle im CommandLine-Gadget stehen bleibt,
da offensichtlich keine bereits belegten (Shortcut) Tasten gepuffert werden.
Stattdessen wird scheinbar beim Druck auf die SPACE-Taste der Menü-
Eintrag Grösse Ermitteln abgerufen, obwohl das CommanLine-Stringgadget
aktiv bleibt. Irgendwie hat das den eindruck als würde das SPACE dadurch
"verschluckt" werden und es wird kein SPACE im Stringgadget gesetzt,
trotz das der Focus nicht verloren geht. Deswegen meinte ich ja auch
das ich sowas wie ein Disable/EnableKeyShortcut() benötige, sobald das
Stringgadget aktiviert wird. Die einzigste Lösung scheint also in den weiten
der API versteckt zu sein. :roll:
Benutzeravatar
al90
Beiträge: 1101
Registriert: 06.01.2005 23:15
Kontaktdaten:

Beitrag von al90 »

So hab jetzt mal ein Beispiel aus der PB-Hilfe genommen und angepasst.
Ich denke Jetzt kann jeder den Effekt selbst nachvollziehen.

Code: Alles auswählen

If OpenWindow(0, 100, 150, 195, 260, "PureBasic - Menu")
  If CreateMenu(0, WindowID(0))
    MenuTitle("File")
      MenuItem( 1, "&Load..."+Chr(9)+"[Space]")
      MenuItem( 2, "Save")
      MenuItem( 3, "Save As...")
      MenuBar()
      OpenSubMenu("Recents")
        MenuItem( 5, "C:\Autoexec.bat")
        MenuItem( 6, "D:\Test.txt")
        OpenSubMenu("Even more !")
          MenuItem( 12, "Test")
        CloseSubMenu()
        MenuItem( 13, "C:\Ok.bat")
      CloseSubMenu()
      MenuBar()
      MenuItem( 7, "&Quit")

    MenuTitle("Edition")
      MenuItem( 8, "Cut")
      MenuItem( 9, "Copy")
      MenuItem(10, "Paste")
      
    MenuTitle("?")
      MenuItem(11, "About")
  EndIf
  
  DisableMenuItem(0, 3, 1)
  DisableMenuItem(0, 13, 1)
  CreateGadgetList(WindowID(0))
  StringGadget(99,10,30,150,20,"Spaces gehen hier nicht!")
  ListIconGadget(100,10,55,150,80,"ListIcon",80)

  AddKeyboardShortcut(0,#PB_Shortcut_Space,1) ; <--- SPACE-Key auf einem Menüeintrag belegen!
  
  ;
  ; This is the 'event loop'. All the user actions are processed here.
  ; It's very easy to understand: when an action occurs, the EventID
  ; isn't 0 and we just have to see what have happened...
  ;
  
  Repeat

    Select WaitWindowEvent()

      Case #PB_Event_Menu

        Select EventMenu()  ; To see which menu has been selected

          Case 11 ; About
            MessageRequester("About", "Cool Menu example", 0)
            
          Default

            If GetActiveGadget()<>99 ; Focus auf Stringgadget beihalten!
              MessageRequester("Info", "MenuItem: "+Str(EventMenu()), 0)
            EndIf

        EndSelect

      Case #PB_Event_CloseWindow
        Quit = 1

    EndSelect

  Until Quit = 1

EndIf

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

Beitrag von Kiffi »

al90 hat geschrieben:Ich glaube hier liegt ein missverständnis vor. Es geht mir nicht darum den
Focus auf das Stringgadget zu halten,
na, das habe ich ja auch nicht vorgeschlagen. Lies Dir bitte noch einmal
meinen Beitrag durch. Wenn dann noch immer ein Missverständnis vorliegt,
dann sag Bescheid ;-)

Grüße ... Kiffi
a²+b²=mc²
Benutzeravatar
al90
Beiträge: 1101
Registriert: 06.01.2005 23:15
Kontaktdaten:

Beitrag von al90 »

Kiffi hat geschrieben:na, das habe ich ja auch nicht vorgeschlagen.
Ne hast schon recht. :wink:
Aber in der ganzen Diskussion ging es immer nur um den Focus und deren
abfragen. Am besten probierst Du mal mein Beispiel aus. Dann wirst Du sicherlich
sofort ersehen was mein problem ist. :wink:
Benutzeravatar
Kiffi
Beiträge: 10711
Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9

Beitrag von Kiffi »

al90 hat geschrieben:Am besten probierst Du mal mein Beispiel aus. Dann wirst Du sicherlich
sofort ersehen was mein problem ist. :wink:
Dir kann geholfen werden:

Code: Alles auswählen

      [....]
      Case #PB_Event_Gadget
        
        Select EventGadget()
          Case 99
            Select EventType()
              Case #PB_EventType_Focus
                RemoveKeyboardShortcut(0, #PB_Shortcut_Space)
              Case #PB_EventType_LostFocus
                AddKeyboardShortcut(0,#PB_Shortcut_Space,1) 
            EndSelect
        EndSelect
      [....]
Na? Fällt der Groschen? ;-)

Grüße ... Kiffi
a²+b²=mc²
Benutzeravatar
al90
Beiträge: 1101
Registriert: 06.01.2005 23:15
Kontaktdaten:

Beitrag von al90 »

Kiffi hat geschrieben:Dir kann geholfen werden:
Ja das könnte gehen. Ein Disable wäre mir zwar lieber gewesen aber Dein vorschlag sieht auch gut aus. Danke.
Na? Fällt der Groschen? ;-)
Jain. An "RemoveKeyboardShortcut" hatte ich zwar auch schonmal gedacht,
aber ich hoffte immer das jemand eine art Disable dafür kennt, da es
mir eigentlich lieber gewesen wäre als die Keys ständig zu "Mounten" & "UnMounten".
Trotzdem nochmal Danke für deine mühe. :allright:

Ich glaub heute krig ich eh nix mehr auf die reihe, bin einfach zu müde. :lol:

Na denn, noch eine schöne Nacht. :wink:
Benutzeravatar
dige
Beiträge: 1236
Registriert: 08.09.2004 08:53

Beitrag von dige »

@al90: wie siehts aus? bist du noch dran?
"Papa, ich laufe schneller - dann ist es nicht so weit."
Benutzeravatar
al90
Beiträge: 1101
Registriert: 06.01.2005 23:15
Kontaktdaten:

Beitrag von al90 »

Klar ich bin noch da. :wink: Ich suche immernoch nach eine lösung für
das CommandLine-Problem. Der vorschlag von Kiffi war zwar schon recht gut,
aber irgendwie kann ich nicht glauben das es keine anderen lösungen mehr gibt.
Da aber selbst @ts-soft offensichtlich keinen vorschlag hat,
(Ich beziehe mich dabei auf meine anfrage einige postings zurück)
muss ich mich vielleicht doch damit abfinden das es nur die eine von Kiffi
genannte lösung gibt. Ich meine, wenn TS schon nix mehr dazu sagt,
wer dann noch ?!

BTW:
Mal abgesehen von der CommandLine: Gibt es noch vorschläge was ich
noch machen könnte ? (Ausser den hier bereits genannten)
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 »

Huhu, hier bin ich :D
RemoveKeyBoardShortcut ist doch I.O, was gibts da für Probleme?

Ich nutze für sowas EasyVENT.pbi von Srod, aber das nur dafür zu
integrieren wäre nicht so sinnvoll.

Hab nicht soviel Zeit, sry
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
Antworten