Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi TShellTreeView: auf Enter-Taste reagieren... (https://www.delphipraxis.net/121647-tshelltreeview-auf-enter-taste-reagieren.html)

juergen 1. Okt 2008 21:57


TShellTreeView: auf Enter-Taste reagieren...
 
Hallo zusammen,

ich habe einiges probiert, aber mir will es nicht gelingen...
Ich möchte im ShellTreeView beim Betätigen der Entertaste etwas auslösen.
Den ShellTreeView erzeuge ich zur Laufzeit auf einem Panel.
Nur wie kann ich sowas wie ein OnKeyDown implementieren?

So habe ich ShellTreeView eingebunden:
Delphi-Quellcode:
...
   private
      { Private-Deklarationen }
      My_ShellTreeViewData: TShellTreeView;

...
procedure TForm1.FormCreate(Sender: TObject);
begin
   My_ShellTreeViewData := TShellTreeView.Create(Self);
   with My_ShellTreeViewData do
   begin
      Parent := panelShellTreeViewData;
      Align := alClient
   end;
end;

procedure TForm1.?????
begin
   if (Key = $0D) then  //oder VK_Return
begin
      ShowMessage('Enter-Taste erfolgreich');
end;

Vielen Dank schon mal vorab!

J3rk 2. Okt 2008 00:03

Re: TShellTreeView: auf Enter-Taste reagieren...
 
Delphi-Quellcode:
...
   private
      { Private-Deklarationen }
      My_ShellTreeViewData: TShellTreeView;

      procedure ShellKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); // <------------------


...
procedure TForm1.FormCreate(Sender: TObject);
begin
   My_ShellTreeViewData := TShellTreeView.Create(Self);

   My_shellTreeviewdata.OnKeyDown := ShellKeyDown;  // <------------------

   with My_ShellTreeViewData do
   begin
      Parent := panelShellTreeViewData;
      Align := alClient
   end;
end;

procedure TForm1.ShellKeyDown(Sender: TObject; var Key: Word;
      Shift: TShiftState);
begin
   if (Key = $0D) then ...

Ich hoffe das hilft dir.

juergen 2. Okt 2008 08:43

Re: TShellTreeView: auf Enter-Taste reagieren...
 
Hallo J3rk,

danke für deine Mühe.
Leider hilft das auch nicht, genauso hatte ich es auch schon probiert (allzumal es die Eigenschaft My_ShellTreeViewData.OnKeyDown auch gibt) :gruebel: .
Es scheint aber so, dass die ShellTreeView eine eigene Tastatur-Behandlung hat?
Egal welche Taste ich verwende, man hört dann jeweils den Windows "Standard Warnsignal" -Ton.
Die Showmessage wird aber nie aufgerufen...

Das Ganze scheint dann doch nicht ganz so einfach zu sein.

DeddyH 2. Okt 2008 08:48

Re: TShellTreeView: auf Enter-Taste reagieren...
 
Ich habe jetzt gerade weder D2007 noch die ShellTreeview zur Verfügung, aber ein KeyDown-Event könnte man doch nachrüsten z.B. über einen class helper, oder irre ich mich?

Gehstock 2. Okt 2008 09:09

Re: TShellTreeView: auf Enter-Taste reagieren...
 
Hab grad mal mit D2006 getestet da läuft J3rk´s Code

Delphi-Quellcode:
unit Unit7;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, ComCtrls, ShellCtrls, ExtCtrls;

type
  TForm7 = class(TForm)
    panelShellTreeViewData: TPanel;
    procedure FormCreate(Sender: TObject);
    procedure ShellTreeViewKeyDown(Sender: TObject; var Key: Word;
      Shift: TShiftState);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form7: TForm7;
  My_ShellTreeViewData: TShellTreeView;

implementation

{$R *.dfm}

procedure TForm7.FormCreate(Sender: TObject);
begin
   My_ShellTreeViewData := TShellTreeView.Create(Self);
   My_shellTreeviewdata.OnKeyDown := ShellTreeViewKeyDown;

   with My_ShellTreeViewData do
   begin
      Parent := panelShellTreeViewData;
      Align := alClient
   end;
end;

procedure TForm7.ShellTreeViewKeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
if (Key = $0D) then ShowMessage('Enter-Taste erfolgreich');
end;

end.

nahpets 2. Okt 2008 09:09

Re: TShellTreeView: auf Enter-Taste reagieren...
 
Hallo,

Delphi-Quellcode:
procedure TForm1.ShellTreeView1KeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
begin
  ShowMessage('ShellTreeView1KeyDown' + #13 + IntToStr(Key));
end;

procedure TForm1.ShellTreeView1KeyPress(Sender: TObject; var Key: Char);
begin
  ShowMessage('ShellTreeView1KeyPress' + #13 + '>' + Key + '<');
end;

procedure TForm1.ShellTreeView1KeyUp(Sender: TObject; var Key: Word; Shift: TShiftState);
begin
  ShowMessage('ShellTreeView1KeyUp' + #13 + IntToStr(Key));
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  My_ShellTreeViewData := TShellTreeView.Create(Self);
  with My_ShellTreeViewData do
  begin
    Parent := panelShellTreeViewData;
    Align := alClient;
  end;
  My_ShellTreeViewData.OnKeyDown := ShellTreeView1KeyDown;
  My_ShellTreeViewData.OnKeyPress := ShellTreeView1KeyPress;
  My_ShellTreeViewData.OnKeyUp   := ShellTreeView1KeyUp;
end;
Das funktioniert bei mir, allerdings wird ShellTreeView1KeyUp nie angezeigt.
Delphi 7 Prof. unter XP-Prof.

taaktaak 2. Okt 2008 09:10

Re: TShellTreeView: auf Enter-Taste reagieren...
 
Moin, Moin.
Seltsam - wir reden doch hier hoffentlich von der gleichen Komponente. Habe das nachgestellt, es funktioniert sowohl direkt auf dem Form als auch auf einem Panel ohne Probleme. Zeige doch mal deinen Code...

// edit: Na, noch einer (hab's mit D7 getestet)

DeddyH 2. Okt 2008 09:11

Re: TShellTreeView: auf Enter-Taste reagieren...
 
Gerade unter Delphi 5 bei einer Treeview nachgesehen: dort gibt es ein OnKeyDown-Event. Ist das bei der Shelltreeview wirklich verborgen?

nahpets 2. Okt 2008 09:17

Re: TShellTreeView: auf Enter-Taste reagieren...
 
Hallo,
Zitat:

Zitat von DeddyH
Gerade unter Delphi 5 bei einer Treeview nachgesehen: dort gibt es ein OnKeyDown-Event. Ist das bei der Shelltreeview wirklich verborgen?

nein, bei Delphi 7 nicht.
KeyPreview des Formulars steht bei mir auf False, allerdings führt die Änderung auf True zu keinem anderen Verhalten.

juergen 2. Okt 2008 09:28

Re: TShellTreeView: auf Enter-Taste reagieren...
 
Hallo zusammen,

die ShellTreeView ist in meinem D2007 im Standard nicht als VCL vorhanden.
Daher hatte ich diese Komponeten wie im 1. Thread dargestellt, aufgerufen.

Inzwischen habe ich mir die ShellTreeView als VCL eingebunden.
Diese Komponente auf ein Panel gelegt und .... taräääääh.... es funktioniert! :gruebel:

Vielen Dank für Eure Mühen!


Alle Zeitangaben in WEZ +1. Es ist jetzt 19:04 Uhr.

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