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 TListView - auf Doppelklick und Enter reagieren (https://www.delphipraxis.net/54922-tlistview-auf-doppelklick-und-enter-reagieren.html)

Kinimod8 13. Okt 2005 12:53


TListView - auf Doppelklick und Enter reagieren
 
Hallo,

Folgendes Problem:

Ich habe ein ListView (vsReport) und möchte - ähnlich wie im Windows-Explorer - bei Doppelklick oder Enter-Druck ein Bearbeiten-Fenster aufrufen. Das OnDblClick-Event hab ich schon ausprobiert (in Verbindung mit einer if-Schleife, ob ein Eintrag makiert ist), aber diese Lösung arbeitet nicht wirklich zuverlässig.

Könnt ihr mir helfen?

Danke,
Dominik

jim_raynor 13. Okt 2005 13:01

Re: TListView - auf Doppelklick und Enter reagieren
 
Der Weg über OnDblClick ist völlig richtig. Wäre gut gewesen, wenn du noch etwas Code gezeigt hättest. Richtig müsste es die IF-Abfrage so sein:

Delphi-Quellcode:
if ListView1.Selected <> nil then
begin
  // mache was
end;
Für das Enter müsstest du OnKeyPress abfangen und den Parameter Key auf #13 überprüfen.

P.S: Es gibt keine IF-Schleifen :) Wenn dann sind es IF-Bedingungen oder IF-Abfragen.

marabu 13. Okt 2005 13:19

Re: TListView - auf Doppelklick und Enter reagieren
 
Hallo Dominik,

füge deiner Form eine ActionList zu, wenn du das noch nicht gemacht hast. Im ActionListEditor definierst du dann eine ListOpenAction mit dem ShortCut "Enter" und der Caption "Open", der du deinen Code zum Öffnen des Berabeitungsdialogs zuweist. Jetzt musst du noch deiner ListView ein PopupMenu zuordnen und darin einem neuen Item die ListOpenAction. Im Event-Handler für ListView.OnDoubleClick rufst du dann ListOpenAction.Execute auf und damit du nicht erst im Action-Code überprüfst, ob überhaupt ein Item selektiert ist, machst du diese Überprüfung in der OnIdle-Routine deiner Application, die du im FormCreate initialisierst:

Delphi-Quellcode:
procedure TDemoForm.AppIdle(Sender: TObject; var done: boolean);
begin
  ListOpenAction.Enabled := Assigned(ListView.Selected);
end;
Grüße vom marabu

Kinimod8 13. Okt 2005 13:35

Re: TListView - auf Doppelklick und Enter reagieren
 
@jim_raynor:
Danke, jetzt funktioniert es. :thumb:

Delphi-Quellcode:
procedure TForm1.ListView1DblClick(Sender: TObject);
begin
 if ListView1.Selected <> nil then
  ShowMessage(ListView1.Selected.Caption);
end;

procedure TForm1.ListView1KeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
 if key = VK_RETURN then
  ShowMessage(ListView1.Selected.Caption);
end;
@marabu:
In Delphi 3 gibt es leider noch keine ActionLists, trotzdem Danke!

jim_raynor 13. Okt 2005 16:08

Re: TListView - auf Doppelklick und Enter reagieren
 
Zitat:

Zitat von Kinimod8
Delphi-Quellcode:
procedure TForm1.ListView1KeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
 if key = VK_RETURN then
  ShowMessage(ListView1.Selected.Caption);
end;

Da solltest du auch noch das if <>nil einbauen ;) oder rufst alternativ die OnDblClick-Prozedur auf:

Delphi-Quellcode:
ListView1DblClick(Sender)

Kinimod8 13. Okt 2005 16:12

Re: TListView - auf Doppelklick und Enter reagieren
 
Stimmt, hast ja recht :wink: Danke!


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