Auf Tastendruckbotschaften antworten

Aus RAD Studio
Wechseln zu: Navigation, Suche

Nach oben zu Maustasten- und Tastendruckbotschaften behandeln

KeyDown ist eine als protected deklarierte Methode für das Ereignis OnKeyDown des Steuerelements. Das Steuerelement selbst ruft die Methode KeyDown als Antwort auf eine Windows-Tastendruckbotschaft auf. Beim Überschreiben der geerbten Methode KeyDown können Sie Quelltext einfügen, der zusätzlich zum Aufruf des Ereignisses OnKeyDown weitere Reaktionen definiert.

Führen Sie zum Überschreiben von KeyDown folgende Schritte aus:

  1. Fügen Sie die Methode KeyDown in die Klasse TDBCalendar ein:
 type
   TDBCalendar = class(TSampleCalendar);
    .
    .
    .
   protected
     procedure KeyDown(var Key: Word; Shift: TShiftState; X: Integer; Y: Integer);
       override;
    .
    .
    .
   end;
 class PACKAGE TDBCalendar : public TSampleCalendar
 {
    .
    .
    .
 protected:
     virtual void __fastcall KeyDown(unsigned short &Key,  TShiftState Shift);
    .
    .
    .
 };
  1. Implementieren Sie die Methode KeyDown:
 procedure KeyDown(var Key: Word; Shift: TShiftState);
 var
   MyKeyDown: TKeyEvent;
 begin
   if not ReadOnly and (Key in [VK_UP, VK_DOWN, VK_LEFT, VK_RIGHT, VK_END,
     VK_HOME, VK_PRIOR, VK_NEXT]) and FDataLink.Edit then
     inherited KeyDown(Key, Shift)
   else
   begin
     MyKeyDown := OnKeyDown;
     if Assigned(MyKeyDown) then MyKeyDown(Self, Key, Shift);
   end;
 end;
 
 <?Pub Caret1?>void __fastcall TDBCalendar::KeyDown(unsigned short &Key,  TShiftState Shift)
 {
   TKeyEvent MyKeyDown;                                // Ereignistyp deklarieren
   Set<unsigned short,0,8> keySet;
   keySet = keySet << VK_UP << VK_DOWN << VK_LEFT      // Virtuelle Tasten zu Menge zuweisen
     << VK_RIGHT << VK_END << VK_HOME << VK_PRIOR << VK_NEXT;
   if (!FReadOnly && // Wenn das Steuerelement nicht schreibgeschützt ist...
       (keySet.Contains(Key)) &&                   // ...und die Taste in der Menge ist...
       FDataLink->Edit() )                         // ...und das Feld im Bearbeitungsmodus ist
   {
     TCustomGrid::KeyDown(Key, Shift);          // Geerbte Methode KeyDown aufrufen
   }
   else
   {
     MyKeyDown = OnKeyDown;                            // Ereignis OnKeyDown zuordnen
     if (MyKeyDown != NULL) MyKeyDown(this,Key,Shift); // Ausführen der ...
   }                                                      // ...OnKeyDown-Behandlungsroutine
 }


Wenn KeyDown auf Tastendruckbotschaften antwortet, wird die geerbte Methode KeyDown nur unter der Voraussetzung aufgerufen, dass die Eigenschaft ReadOnly des Steuerelements den Wert False hat, die gedrückte Taste eine Cursortaste ist und das Datenverknüpfungsobjekt sich im Bearbeitungsmodus befindet (d.h. das Feld kann bearbeitet werden). Kann das Feld nicht bearbeitet werden oder wurde eine andere Taste gedrückt, wird der Quelltext ausgeführt, den der Programmierer in die Ereignisbehandlungsroutine für OnKeyDown eingefügt hat.

Siehe auch