[gelöst] Eigenes ListView mit Ereignissen

Rund um die LCL und andere Komponenten
Antworten
catweasel
Beiträge: 230
Registriert: Di 17. Mär 2009, 10:51
OS, Lazarus, FPC: Win10 64Bit // Linux Mint 20.0 - (L 2.2.0 FPC 3.2.2)

[gelöst] Eigenes ListView mit Ereignissen

Beitrag von catweasel »

Hallo

Letzte Woche hatte ich das Problem mit dem erstellen einer eigenen ListView-Komponente. (ListView mit Mausrad durchscrollen)

Heute muß ich an eben dieser Komponente zwei Ereignisse abfangen (OnSelectItem und OnColumnClick)
Leider habe ich auch hier wieder einige Schwierigkeiten...

Nach einige Recherche im Netz der Netze konnte ich herausfinden wie ich die denn nun (vermutlich) definieren muß, jedoch habe ich noch keine Lösung wie denn nun das Ereignis selbst angelegt werden muß.
Bei meinem Versuch bekomme ich die Fehlermeldungen "method identier expected" bzw. "overloaded identifier "OnSelectItem" isn't a function" und "function header doesn't match any method of this class")

Das ganze Programm beruht wie schon geschrieben auf das Beispiel das ich bei ListView mit Mausrad durchscrollen abschließend auf Seite 2 angegeben hatte.

Hier die Ergänzungen die leider nicht funktionieren.
Kann mir jemand sagen wo da mein(e) Fehler liegen??

Gruß
Michael

Code: Alles auswählen

// Eigene ListView erstellen
      TMyListView=class(TListView)
      private
        fOnSelectItem    : TLVColumnClickEvent;
        fOnColumnClick   : TLVColumnClickEvent;
      published
        property OnSelectItem : TLVColumnClickEvent read fOnSelectItem  write fOnSelectItem;
        property OnColumnClick: TLVColumnClickEvent read fOnColumnClick write fOnColumnClick;
 
    var
      LV   : TMyListView;
 
 
 
//Error: method identier expected
    procedure TMyListView.ColumnClick(Sender: TObject; Column: TListColumn);
    begin
       ShowMessage('Spalte angeklickt');
    end;
 
//Error: overloaded identifier "OnSelectItem" isn't a function
//Error: function header doesn't match any method of this class "TMyListView.OnSelectItem$115(TObject, TListItem, Boolean);"
 
    procedure TMyListView.OnSelectItem(Sender: TObject; Item: TListItem;
      Selected: Boolean);
    begin
       ShowMessage('Zeile angeklickt');
    end;
Zuletzt geändert von catweasel am So 11. Apr 2010, 17:18, insgesamt 1-mal geändert.

Benutzeravatar
theo
Beiträge: 10904
Registriert: Mo 11. Sep 2006, 19:01

Re: Eigenes ListView mit Ereignissen

Beitrag von theo »

Das musst du doch nicht neu definieren. Ist ja alles schon da.
Im Objektinspektor einfach auf die Eventnamen doppelklicken.

Falls du die Komponente nicht installiert hast, kannst du die Events auch im Code einhängen:

Code: Alles auswählen

procedure TForm1.FormCreate(Sender:TObject);
begin
  ListView1.OnSelectItem:=@ListView1SelectItem;
  ListView1.OnColumnClick:=@ListView1ColumnClick;
end;
 
 
procedure TForm1.ListView1SelectItem(Sender:TObject;Item:TListItem;Selected:
  Boolean);
begin
 
end;
 
procedure TForm1.ListView1ColumnClick(Sender:TObject;Column:TListColumn);
begin
 
end;

catweasel
Beiträge: 230
Registriert: Di 17. Mär 2009, 10:51
OS, Lazarus, FPC: Win10 64Bit // Linux Mint 20.0 - (L 2.2.0 FPC 3.2.2)

Re: Eigenes ListView mit Ereignissen

Beitrag von catweasel »

theo hat geschrieben:[...]

Falls du die Komponente nicht installiert hast, kannst du die Events auch im Code einhängen:

Code: Alles auswählen

procedure TForm1.FormCreate(Sender:TObject);
begin
  ListView1.OnSelectItem:=@ListView1SelectItem;
  ListView1.OnColumnClick:=@ListView1ColumnClick;
end;
 
 
procedure TForm1.ListView1SelectItem(Sender:TObject;Item:TListItem;Selected:
  Boolean);
begin
 
end;
 
procedure TForm1.ListView1ColumnClick(Sender:TObject;Column:TListColumn);
begin
 
end;
Danke, das hat´s gebracht. :)

Zusatzfrage: Ich merke gerade das bei ListView die procedure "SelectItem" scheinbar immer zweimal aufgerufen wird.
Ist das so gewollt? Bei "ColumnClick" ist das nicht der Fall :o

Gruß
Michael

pluto
Lazarusforum e. V.
Beiträge: 7192
Registriert: So 19. Nov 2006, 12:06
OS, Lazarus, FPC: Linux Mint 19.3
CPU-Target: AMD
Wohnort: Oldenburg(Oldenburg)

Re: Eigenes ListView mit Ereignissen

Beitrag von pluto »

Ich könnte mir vorstellen, dass beim Demakieren ebenfalls das Event aufgerufen wird, ansonsten ist das ein "Fehlverhalten"
MFG
Michael Springwald

Antworten