
Delphi - TTable - filter
Chcel by som nastaviť v TTable takýto filter:
1. "case sensitive"
2. možnosť zadania aj textu zo stredu položky
3. kontrola všetkých položiek
Je takáto možnosť? Ja mám teraz nastavený takýto a ďalej sa neviem pohnúť:
1. možnosť zadania len od začiatku položky
2. kontrola všetkých položiek
Tu je "zdroják" filtra:
procedure TCllientsForm.edSearchChange(Sender: TObject);
var
s: String;
begin
Table.Filtered := False;
s := edSearch.Text + '*';
if s <> '' then
begin
Table.Filter := '([0] = ' + QuotedStr(s) +
') or ([1] = ' + QuotedStr(s) +
') or ([2] = ' + QuotedStr(s) +
') or ([3] = ' + QuotedStr(s) +
') or ([4] = ' + QuotedStr(s) +
') or ([5] = ' + QuotedStr(s) +
') or ([6] = ' + QuotedStr(s) + ')';
Table.Filtered := True;
end;
end;
Na zadani filtru podle zacatku obsahu polozky by mela slouzit property FilterOptions:
TFilterOption = (foCaseInsensitive, foNoPartialCompare);
Takze pokud nic nevyplnis, nemel by byt filtr zavisly na velikosti pismen a mel by automaticky brat (i bez hvezdicky) zacatek retezce
Dobre mám "case sensitive", ale stále to nehľadá uprostred položky, iba od začiatku. Čo teraz? V helpe som nič na toto nenašiel. Je teda možnosť nadefinovať si vlastnú metódu na porovnávanie obsahu?
Muzes si to resit sam v udalosti OnFilterRecord (aspon tak se to tusim jmenuje)
Uvnitře je použita tato funkce (možno jí nacpat dovnitř).
Nezkousel jsi pouzit funkci MatchesMask() z unity Masks ?
To moje je podstatně rychlejší.

Mas pravdu, je to asi 4x rychlejsi. Na 100000 porovnani tva pulsekunda oproti 2s funkce MatchesMasks()
Já to právě třeba používám v OnFiltered. Mám ve vyhledávacích oknech (třeba adresářů) takovou funkci, že píšeš do políčka a ono to vyhledá text ať je v kterémkoliv sloupečku a kdekoliv. Filtruje to současně za psaní. Třeba víš kus jména firmy, ulici a nevíš přesně jak to v tom adresáři je. Pak se musí tato funkce použít v OnFiltered na všechny sloupce tabulky krát počet řádků. Tam je pak to pak každá instrukce navíc znát (aby to při pasní nezadrhávalo a plynule filtrovalo). Samozřejmě, když to použiješ v programu "jen občas", tak je to putna, jak je to rychlé.
//Edit: BTW tu funkci jsem dělal v době kamenné Delphi, kdy tam ještě nebyla od přírody.
Áno, áno, presne to robím aj ja.
Edit: Tú procedúru teda len zaradím k udalosti OnFilterRecord?
Nechceš poslat někam celý program s tou tabulkou, jak to řeším já?
Ja žew som ťa nahneval som si myslel v prvej chvíli.
Môžeš a pozriem saa naň.. Ďakujem. Myslím, že to asi odfajknem teda.
Proč bych se měl hněvat?

Zde máš inspiraci: HF.zip
Veľmi pekne ďakujem.