44 Stimmen

Delphi/Lazarus: Ist die ALT, SHIFT oder STRG-Taste gedrückt?

Tutorial von Delphianer | 28.11.2013 um 02:25

Manchmal möchten wir an einer beliebigen Stelle in unserem Programm überprüfen, ob der Nutzer gerade die Tasten ALT, ALT GR, SHIFT oder STRG gedrückt hält. Um dies in Erfahrung zu bringen, hilft uns TShiftState.

ShiftState in Standard-Events

Am einfachsten ist dies in einer Standardprozedur von Delphi oder Lazarus, die uns bereits eine Variable von TShiftState zur Verfügung stellt. Dies ist zum Beispiel in den Standard-Events OnMouseDown (Maus wird gedrückt), OnMouseUp (Maus wird losgelassen) oder OnKeyUp (Taste wird losgelassen) der Fall. Schauen wir uns dazu kurz ein Beispiel an:

procedure Edit1KeyUp(Sender: TObject; var Key: Word; Shift: TShiftState);
begin    
  if ssAlt         in Shift then ShowMessage('ALT');
  if ssShift       in Shift then ShowMessage('SHIFT');
  if ssCtrl        in Shift then ShowMessage('STRG');
  if ssAltGr       in Shift then ShowMessage('ALT GR');
  if ssLeft        in Shift then ShowMessage('Linke Maustaste');
  if ssRight       in Shift then ShowMessage('Rechte Maustaste');
  if ssMiddle      in Shift then ShowMessage('Mittlere Maustaste');
  if ssDoubleClick in Shift then ShowMessage('Doppelklick');
end;

Hier haben wir beispielsweise das OnKeyUp-Event für ein Edit-Feld gesetzt. Automatisch haben wir dabei die Variablen Key und Shift zur Verfügung, aus denen wir abfragen können, welche normale Taste gedrückt wurde (Key) und welche Spezialtaste dabei gehalten wurde oder welche besondere Aktion ansonsten aktiv war (Shift).

So ist es neben dem Halten von ALT, SHIFT, CTRL und ALT GR mit ShiftState auch möglich, zum Beispiel heraus zu finden, ob gerade die linke Maustaste oder die rechte Maustaste gehalten wurde oder ob doppelt mit der Maus geklickt wurde.

ShiftState in eigener Prozedur

Wenn wir eine eigene Prozedur oder Funktion schreiben, stellt uns Delphi oder Lazarus natürlich nicht automatisch die Variable Shift zur Verfügung. Dennoch ist es möglich, uns selbst eine solche Variable anzulegen.

procedure MyOwnProcedure;
var
  currentShiftState: TShiftState;
begin    
  currentShiftState := GetKeyShiftState;

  if ssShift in currentShiftState then ShowMessage('SHIFT');
end;

Dazu deklarieren wir uns einfach eine beliebige Variable vom Typ TShiftState. Nennen wir sie einfach currentShiftState. Mit der Funktion GetKeyShiftState können wir den aktuellen ShiftState abfragen und dann anschließend einfach damit arbeiten, wie wir es auch schon in dem ersten Beispiel gemacht haben.

AntwortenPositivNegativ

Über den Autor

AvatarDer Autor hat keine Kurzbeschreibung seines Profils angegeben.
Profil anzeigen

 

Ähnliche Themen

Wichtiger Hinweis

Bitte beachten Sie: Die Beiträge auf askingbox.de sind Beiträge von Nutzern und sollen keine professionelle Beratung ersetzen. Sie werden nicht von Unabhängigen geprüft und spiegeln nicht zwingend die Meinung von askingbox.de wieder. Mehr erfahren.

Jetzt mitmachen

Stellen Sie Ihre eigene Frage oder schreiben Sie Ihren eigenen Artikel auf askingbox.de. So gehts.