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 Reaktion auf Pfeiltasten (https://www.delphipraxis.net/4699-reaktion-auf-pfeiltasten.html)

Leo 8. Mai 2003 22:29


Reaktion auf Pfeiltasten
 
Hallo,

Warum reagiert die Procedur auf Tataur Ereignisse der

"Einfg","Entf","Pos1","Ende" etc. Tasten aber warum wird sie nicht aufgerufen, wenn ich die Pfeiltasten betätige?

Delphi-Quellcode:
procedure TQuelltextBox.KeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
  case key of
     VK_DELETE : Projekt.AktuelleDatei.Quelltext.DeleteZeichen(1);
     VK_LEFT  : Projekt.AktuelleDatei.Quelltext.CursorBewegen(-1, 0);
     VK_RIGHT : Projekt.AktuelleDatei.Quelltext.CursorBewegen( 1, 0);
     VK_UP    : Projekt.AktuelleDatei.Quelltext.CursorBewegen( 0,-1);
     VK_DOWN  : Projekt.AktuelleDatei.Quelltext.CursorBewegen( 0, 1);
  end;
end;

Hansa 9. Mai 2003 01:08

setze mal "KeyPreview" der Form auf true.

Leo 9. Mai 2003 12:32

KeyPreview
 
Hilft leider gar nichts :(

Leo 9. Mai 2003 12:34

Tatsturereignisse
 
Hallo,

ich habe gerade im Zusammenhang mit KeyPreview diesen Satz in der Hilfe gefunden

"Die Einstellung bezieht sich nicht auf Navigationstasten (TAB, Pfeiltasten usw.), da diese keine Tastaturereignisse auslösen."

Wie reagiert man den dann auf Pfeiltasten?

Stanlay Hanks 9. Mai 2003 12:47

Gute Frage. Die müssen ja irgendeine Nachricht an Windows senden, damit man z.B. in einem Memo navigieren kann.

Stanlay Hanks 9. Mai 2003 12:55

Also wenn TQuelltextBox ein Form ist, versteh ich nicht, dass das nicht geht.

Ich hab

Delphi-Quellcode:
procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
Case Key of
VK_Up : ShowMessage('Nach oben Taste wurde gedrückt');
VK_DOWN:ShowMessage('Nach unten Taste wurde gedrückt');
end;
end;
eingegeben und alles lief wie gewünscht.

Man liest sich. Stanlay 8)

Leo 9. Mai 2003 12:57

Nein
 
TQuelltextBox ist kein Form sondern eine von TPanel abgeleitete Komponenete in einem Form.

Hansa 9. Mai 2003 13:01

Hier habe ich einfach zwei Buttons. Drücke ich einen Deiner Pfeiltasten, dann springt der Cursor jeweils zu dem anderen Button.
Delphi-Quellcode:
unit Unit1;

interface

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

type
  TForm1 = class(TForm)
    Button1: TButton;
    Button2: TButton;
    procedure Button2KeyDown(Sender: TObject; var Key: Word;
      Shift: TShiftState);
    procedure Button1KeyDown(Sender: TObject; var Key: Word;
      Shift: TShiftState);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button2KeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
    case key of
    VK_DELETE,
    VK_LEFT,
    VK_RIGHT,
    VK_UP,
    VK_DOWN : Button1.SetFocus;
  end;
end;

procedure TForm1.Button1KeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
  case key of
    VK_DELETE,
    VK_LEFT,
    VK_RIGHT,
    VK_UP,
    VK_DOWN : Button2.SetFocus;
  end;
end;

end.
[edit=Daniel B]Delphi-Tags eingefügt. MfG Daniel B.[/edit]

Hansa 9. Mai 2003 13:04

Ws lese ich da :?: Von Panel abgeleitet ? Kannst Deine Arbeiten getrost einstellen, siehe Navigator. Ein Panel löst genauso wenig ein Tataturereignis aus wie der Navigator. Da haste die A....-Karte gezogen. :mrgreen:

Stanlay Hanks 9. Mai 2003 13:05

Also bei mir hat ein TPanel gar kein OnKey usw. Hast du das hinzugefügt als du die Komponente abgeleitet hast?

Leo 9. Mai 2003 13:07

Schlaumeyer
 
Warum reagiert das Panel dann auf "Entf","Bild auf","Bild ab" Tasten etc. und auf normale Buchstaben etc. sind das etwa keine Tastaturereignisse?

Stanlay Hanks 9. Mai 2003 13:08

Das wird dir wohl keiner beantworten können, der nicht die von dir erstellte Komponente hat. Weil, wei gesagt, ein normales TPanel keine OnKeydown oder up oder wie auch immer Ereignisse hat.

Ein Panel ist ja normal auch etwas, was ein Programm optisch besser aussehen lässt oder als Leinwand für den Mediaplayer dient.

Leo 9. Mai 2003 13:09

Source
 
Delphi-Quellcode:
type
  TQuelltextBox = class(TPanel)
  protected
    { Protected-Deklarationen }
    procedure KeyPress(Sender: TObject; var Key: Char); virtual;
    procedure KeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); virtual;
    Projekt : TProjekt;
  public
    { Public-Deklarationen }
    property OnKeyPress;
    property OnKeyDown;

    constructor create(AOwner: TComponent); override;
    destructor destroy; override;
  end;

...

constructor TQuelltextBox.Create(AOwner: TComponent);
begin
inherited create(AOwner);
OnKeyPress := KeyPress;
OnKeyDown := KeyDown;
end;

destructor TQuelltextBox.Destroy;
begin
inherited destroy;
end;

procedure TQuelltextBox.KeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
begin
   case key of
      VK_DELETE : Projekt.AktuelleDatei.Quelltext.DeleteZeichen(1);
      VK_HOME  : Projekt.AktuelleDatei.Quelltext.CursorAnZeilenanfang;
      VK_END   : Projekt.AktuelleDatei.Quelltext.CursorAnsZeilenende;
      VK_LEFT  : Projekt.AktuelleDatei.Quelltext.CursorBewegen(-1, 0);
      VK_RIGHT : Projekt.AktuelleDatei.Quelltext.CursorBewegen( 1, 0);
      VK_UP    : Projekt.AktuelleDatei.Quelltext.CursorBewegen( 0,-1);
      VK_DOWN  : Projekt.AktuelleDatei.Quelltext.CursorBewegen( 0, 1);
   end;
end;

procedure TQuelltextBox.KeyPress(Sender: TObject; var Key: Char);
begin
   case ord(key) of
      VK_BACK  : Projekt.AktuelleDatei.Quelltext.DeleteZeichen(-1);
      VK_RETURN : Projekt.AktuelleDatei.Quelltext.ZeilenumbruchEinfuegen;
   else
      Projekt.AktuelleDatei.Quelltext.InsertString(key);
   end;
end;


Alle Zeitangaben in WEZ +1. Es ist jetzt 22:23 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