Seite 9 von 32

Verfasst: 05.03.2007 23:10
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

Verfasst: 06.03.2007 00:12
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:

Verfasst: 06.03.2007 01:01
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  

Verfasst: 06.03.2007 01:06
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

Verfasst: 06.03.2007 01:15
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:

Verfasst: 06.03.2007 01:26
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

Verfasst: 06.03.2007 01:54
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:

Verfasst: 22.03.2007 11:14
von dige
@al90: wie siehts aus? bist du noch dran?

Verfasst: 22.03.2007 20:14
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)

Verfasst: 22.03.2007 20:26
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