14. april 2003 - 21:10
Der er
1 kommentar og
2 løsninger
TListView.OnSelectItem
Hej kære medeksperter :)
Jeg håber I kan hjælpe mig med mit lille problem.
TListView.OnSelectItem har en parameter: Selected.
Denne er false når et Item mister selection og true når et Item modtager selection. Smart nok. Det betyder at hvis jeg tidligere har valgt et item, lad os kalde det "item1", og ny trykker med musen på et andet, "item2", så vil min eventhandler blive kaldt to gange! Én gang med Item1 og false (fordi denne mister selection) og en gang med Item2 og true.
Problemet er at andre gange vælger man ikke et nyt item, der klikker man ved siden af, dvs. så får man kun en Item1 med Selected=false - dvs. éns procedure bliver kun kaldt én gang.
Jeg ville gerne kunne kalde en procedure med følgende oplysninger:
procedure SelectionChanged(OldSelectedItem, NewSelectedItem: TListItem);
Hvor begge parametre kan være nil eller have en reference.
Jeg håber, det er godt nok forklaret, og at I kan hjælpe mig :)
14. april 2003 - 22:17
#1
Her er et eksempel, der efter en kort test, ser ud til at virke...
/doc404
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls, ComCtrls;
type
TForm1 = class(TForm)
Memo1: TMemo;
ListView1: TListView;
procedure ListView1MouseUp(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
procedure ListView1KeyUp(Sender: TObject; var Key: Word;
Shift: TShiftState);
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
LastSelItem : TListItem;
procedure SelectionChanged(OldSelectedItem, NewSelectedItem: TListItem);
procedure CheckSelChange;
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.DFM}
procedure TForm1.SelectionChanged(OldSelectedItem,NewSelectedItem: TListItem);
var
a,b : string;
begin
if OldSelectedItem <> nil then a := OldSelectedItem.Caption else a := '.';
if NewSelectedItem <> nil then b := NewSelectedItem.Caption else b := '.';
Memo1.Lines.Add(Format('%s -> %s',[a,b]));
end;
procedure TForm1.ListView1MouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
CheckSelChange;
end;
procedure TForm1.ListView1KeyUp(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
CheckSelChange;
end;
procedure TForm1.CheckSelChange;
begin
if (ListView1.Selected <> LastSelItem) then
begin
SelectionChanged(LastSelItem,ListView1.Selected);
LastSelItem := ListView1.Selected;
end;
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
LastSelItem := nil;
end;
end.