![]() |
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; |
setze mal "KeyPreview" der Form auf true.
|
KeyPreview
Hilft leider gar nichts :(
|
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? |
Gute Frage. Die müssen ja irgendeine Nachricht an Windows senden, damit man z.B. in einem Memo navigieren kann.
|
Also wenn TQuelltextBox ein Form ist, versteh ich nicht, dass das nicht geht.
Ich hab
Delphi-Quellcode:
eingegeben und alles lief wie gewünscht.
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; Man liest sich. Stanlay 8) |
Nein
TQuelltextBox ist kein Form sondern eine von TPanel abgeleitete Komponenete in einem Form.
|
Hier habe ich einfach zwei Buttons. Drücke ich einen Deiner Pfeiltasten, dann springt der Cursor jeweils zu dem anderen Button.
Delphi-Quellcode:
[edit=Daniel B]Delphi-Tags eingefügt. MfG Daniel B.[/edit]
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. |
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:
|
Also bei mir hat ein TPanel gar kein OnKey usw. Hast du das hinzugefügt als du die Komponente abgeleitet hast?
|
Schlaumeyer
Warum reagiert das Panel dann auf "Entf","Bild auf","Bild ab" Tasten etc. und auf normale Buchstaben etc. sind das etwa keine Tastaturereignisse?
|
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. |
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