1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87
| TListeFiltree = class
FListeComplete : TStringList;
FListeFiltree : TStringList;
FFiltre : string;
private
function getFiltre: string;
function getListeComplete: TStringList;
function getListeFiltree: TStringList;
procedure SetFiltre(const Value: string);
procedure SetListeComplete(const Value: TStringList);
procedure filtrer;
public
constructor create;
destructor destroy;
property ListeComplete : TStringList read getListeComplete write SetListeComplete;
property ListeFiltree : TStringList read getListeFiltree;
property Filtre : string read getFiltre write SetFiltre;
end;
implementation
constructor TListeFiltree.create;
begin
FListeComplete := TStringList.create;
FListeFiltree := TStringList.create;
FFiltre := '';
end;
destructor TListeFiltree.destroy;
begin
FListeComplete.Free;
FListeFiltree.free;
end;
procedure TListeFiltree.filtrer;
var
expr: TRegEx;
collection: TMatchCollection;
i : integer;
begin
if FFiltre <> '' then
begin
// création de l'expression régulière à partir du filtre renseigné
expr.Create(FFiltre);
// collection contiendra toutes les chaines de caractères ayant "matchées" avec le filtre dans la liste complète
collection := expr.Matches(FListeComplete.text);
// On vide la liste filtrée
FListeFiltree.Clear;
// On alimente la liste filtrée pour chauqe occurrence trouvée
for i := 0 to collection.Count - 1 do
FListeFiltree.add(collection[i].Value);
end;
end;
function TListeFiltree.getFiltre: string;
begin
result := FFiltre;
end;
function TListeFiltree.getListeComplete: TStringList;
begin
result := FListeComplete;
end;
function TListeFiltree.getListeFiltree: TStringList;
begin
result := FListeFiltree;
end;
procedure TListeFiltree.SetFiltre(const Value: string);
begin
if value <> FFiltre then
begin
FFiltre := value;
filtrer;
end;
end;
procedure TListeFiltree.SetListeComplete(const Value: TStringList);
begin
FListeComplete.text := Value.text;
end; |
Partager