STRG+A zur Markierung aller Dateien in einer FileListBox



  • Hallo,

    ich möchte in einer FileListBox mit der Tastenkombination Strg+A alle Dateien markieren. Dazu habe ich im OnKeyDown-Ereignis folgenden Eintrag vorgenommen:

    if ((GetKeyState(VK_CONTROL)<0) && (Key == 'A')) //wenn Strg+A gedrückt wurde:
      FileListBox1->SelectAll();                     //alle Dateien im Fenster markieren
    

    Problem: Das Ganze hat mal funktioniert. In einer zweiten FileListBox habe ich das gleiche gemacht. Doch dort (und inzwischen auch in der ersten FileListBox) wird nur die erste und die letzte Datei markiert, und das auch nur sehr zögerlich. Lasse ich die if...-Abfrage weg, dann wird mit

    FileListBox1->SelectAll();
    

    direkt alles markiert, so wie es sein soll. Wo könnte hier der Fehler liegen?



  • Hallo

    nimm mal statt GetKeyState lieber GetAsyncKeyState

    bis bald
    akari



  • Danke, aber es funzt auch so nicht.
    Neue Erkenntnis (die ich mir ebenso nicht erklären kann):
    Drücke ich nur die "A"-Taste, dann ist das Ergebnis das gleiche, wie mit Strg-Taste zusammen.
    Drücke ich erst Strg+C und danach Strg+A, dann funzt alles (alle ListBox-Einträge werden markiert).
    Kann sich das jemand erklären??? Hat das was mit WinXP zu tun? Vor allem, weil das Markieren mit Strg+A ja vor einer Woche bereits funktioniert hatte.



  • teacherwilli schrieb:

    if ((GetKeyState(VK_CONTROL)<0) && (Key == 'A')) //wenn Strg+A gedrückt wurde:
      FileListBox1->SelectAll();                     //alle Dateien im Fenster markieren
    

    ein blick in die msdn unter GetKeyState zeigt dir, dass der aufruf bei dir falsch ist. da du den rückgabewert falsch prüfst.

    // Achtung: OnKeyPress verwendet
    void __fastcall TF_Main::FileListBox1KeyPress(TObject *Sender, char &Key)
    {
      // wenn Ctrl + A gedrückt wird (höchstes Bit auswerten)
      if ((GetKeyState(VK_CONTROL) & 0x8000) && (GetKeyState('A') & 0x8000))
      { 
        // Wichtig! 
        // Key = 0 muss vor SelectAll stehen, da sonst wohl intern irgendwelche
        // Ereignisse aufgerufen werden, die die Selektion verwerfen.
        Key = 0; 
    
        // alles markieren
        FileListBox1->SelectAll();
      }     
    }
    


  • SUUUUPER!

    Vielen Dank, so funzt das!!!
    DANKE!!!


Anmelden zum Antworten