Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi event bei tastendruck - aber wie... (https://www.delphipraxis.net/136715-event-bei-tastendruck-aber-wie.html)

.niklas 6. Jul 2009 20:01


event bei tastendruck - aber wie...
 
hi jungs,

(nein ich will nicht sowas wie einen key-logger oder sone scheiße programmieren! mein programm kann auch nicht zu sowas in der art verwendet werden....)
ich hab jetzt unter anderem das problem dass ich alle gedrückten zeichentasten ( a,b,c,+,!,-, usw) gerne durch eine art 'kontrolle' laufen lassen würde. soll heißen der user tipp etwas in ein editfeld und bekommt bei jedem tastendruck das zeichen der gedrückten taste nocheinmal in einem kleinen label angezeigt. zusätzlich soll noch ein panel die farbe rot oder grün annehmen wenn bestimmt sonderzeichen gedrückt werden.

ich habe schon sowas wie OnKeyDown und die zeichen tabelle (VK_A,VK_B usw) gefunden aber weiß nicht genau wie ich das ganze zusammensetzen soll. (eigentlich müsste nur bei 4-5 sonderzeichen das label rot werden und das kann man ja extra programmieren..)

ich suche also sowas wie ne IF-schleife mit mehreren eingangsvariablen (also A-Z sowie a-z plus einige sonderzeichen -> label grün. und halt anzeige des tastensymbols im label)

danke im voraus

BAMatze 6. Jul 2009 20:47

Re: event bei tastendruck - aber wie...
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo hab da mal vor kurzem etwas ähnliches programmiert. Ist zwar für eine Form geschrieben und reagiert nur auf die Pfeiltasten im speziellen aber im Prinzip könntest du das ganze so für dein Problem verwenden. Kannst dir ja mal anschauen. geb dir hier mal den Quellcode und im Anhang das Projekt.

Delphi-Quellcode:
unit Tastendruck;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

const WMKeyDown = WM_KEYDOWN;
      WMKeyUp = WM_KEYUP;

type
  TForm1 = class(TForm)
    Label1: TLabel;
    Label2: TLabel;
    Label3: TLabel;
    Label4: TLabel;
    Label5: TLabel;
  private
    procedure WMKeyDown(var Msn: TMessage); message WMKeyDown;
    procedure WMKeyUp(var Msn: TMessage); message WMKeyUp;
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}
//Prozedurebeschreibung:
//Wenn eine Taste gedrückt wird, dann wird überprüft, ob diese eine Pfeiltaste ist, wenn das der Fall ist
//erscheint das entsprechende Label, wenn es keine Pfeiltaste ist, erschein ein Label, in dem "falsche Taste" steht
procedure TForm1.WMKeyDown(var Msn: TMessage);
var Index: integer;
begin
//Aus Performancegründen habe ich natürlich hier schonmal den überprüfungsbereich eingeschränkt, gibt sicherlich bessere Wege
//ist aber ein möglicher Weg
  Index := 36;
  repeat
    Index := Index+1;
  until (GetasyncKeyState(Index) < 0) or (Index >=41);
//Wenn die Taste im durchsuchten Berreich (Pfeiltasten) lag, dann Ausgabe über die Labels
  if Index < 41 then
    begin
      case Index of
      37: Label2.visible := true;
      38: Label1.Visible := true;
      39: Label4.Visible := true;
      40: Label3.Visible := true;
      end;
    end
//Ansonsten "Falsche Taste"-Label
  else Label5.Visible := true;
end;

//Procedurebeschreibung
//Wenn die Taste wieder losgelassen wird, verschwinden die Labels.
//Hier kann man auch noch verbessern, da wenn ich 2 Tasten nacheinander drück -> erscheinen 2 Labels, wenn ich eine los lasse, verschwinden beide
procedure TForm1.WMKeyUp(var Msn: TMessage);
begin
  LAbel1.Visible := false;
  LAbel2.Visible := false;
  LAbel3.Visible := false;
  LAbel4.Visible := false;
  LAbel5.Visible := false;
end;

end.
Hoffe, dass hilft dir ein wenig. wie gesagt, geht sicherlich besser, aber es funktioniert halt. Müsstest du dann einfach in dein Edit einarbeiten.

MfG
BAMatze


Alle Zeitangaben in WEZ +1. Es ist jetzt 17:39 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz