Přidat otázku mezi oblíbenéZasílat nové odpovědi e-mailem 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;
Jsou zobrazeny jen nové odpovědi. Zobrazit všechny
Předmět Autor Datum
Na zadani filtru podle zacatku obsahu polozky by mela slouzit property FilterOptions: TFilterOption…
Jan Fiala 27.06.2006 09:37
Jan Fiala
Dobre mám "case sensitive", ale stále to nehľadá uprostred položky, iba od začiatku. Čo teraz? V hel…
msx. 27.06.2006 10:00
msx.
Muzes si to resit sam v udalosti OnFilterRecord (aspon tak se to tusim jmenuje)
Jan Fiala 27.06.2006 11:11
Jan Fiala
Uvnitře je použita tato funkce (možno jí nacpat dovnitř). {------------ Pascalské POS optimalizovan…
Rce 28.06.2006 00:11
Rce
Nezkousel jsi pouzit funkci MatchesMask() z unity Masks ?
Jan Fiala 28.06.2006 00:14
Jan Fiala
To moje je podstatně rychlejší.;-):-p nový
Rce 28.06.2006 00:16
Rce
Mas pravdu, je to asi 4x rychlejsi. Na 100000 porovnani tva pulsekunda oproti 2s funkce MatchesMasks… nový
Jan Fiala 28.06.2006 00:41
Jan Fiala
Já to právě třeba používám v OnFiltered. Mám ve vyhledávacích oknech (třeba adresářů) takovou funkci… nový
Rce 28.06.2006 00:47
Rce
Áno, áno, presne to robím aj ja.;-) Edit: Tú procedúru teda len zaradím k udalosti OnFilterRecord? nový
msx. 28.06.2006 14:55
msx.
Nechceš poslat někam celý program s tou tabulkou, jak to řeším já? nový
Rce 28.06.2006 23:39
Rce
Ja žew som ťa nahneval som si myslel v prvej chvíli.:-) Môžeš a pozriem saa naň.. Ďakujem. Myslím, ž… nový
msx. 29.06.2006 14:34
msx.
Proč bych se měl hněvat? ::):-) Zde máš inspiraci: HF.zip nový
Rce 29.06.2006 22:54
Rce
Veľmi pekne ďakujem.:beer: nový
msx. 29.06.2006 23:15
msx.
[cyrilic.gif] poslední
Rce 29.06.2006 23:22
Rce
Tento havo vyzerá zo všetkých najlepšie navrhujem ponechať.:-) A keď nie, tak mám lepší nápad: Vloži… nový
msx. 28.06.2006 00:27
msx.
Nechni ani domejšlet, co to má za vobláček na vocáskem... :)) nový
Remca 28.06.2006 00:33
Remca
Aspoň vieme, že je načase vyvetrať.:-D nový
msx. 28.06.2006 00:38
msx.
@Kulovy:XOR EAX, EAX; { EAX := 0 --> že se našlo prd } Škoda, že niečo takéto sa nedá nájsť v resou… nový
msx. 28.06.2006 00:25
msx.
Kdybys viděl moje komentáře k assemblerským programům pro sálové počítače (tam je třeba komentovat s… nový
Rce 28.06.2006 00:29
Rce
Aspoň je človeku pri tom veselo, keď niečo programuje. Kamoš mi dal zdroják na dokončenie v Delphi.… nový
msx. 28.06.2006 00:37
msx.
Kdybys videl moje promenne :-D radsi nekomentovat. nový
virus 28.06.2006 02:27
virus

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?

Uvnitře je použita tato funkce (možno jí nacpat dovnitř).

{------------ Pascalské POS optimalizované pro hledání 1 znaku  ---------------------}
function PosChar (const c: char; const s: string): LongInt; register; assembler;
{	c	:= Znak co hledáme }
{	s	:= Kde to hledáme  }
{Vrací (v EAX): Pozici v s (index znaku), nenalezne-li se c v s, vrací 0 }
asm
	PUSH	EDI

	MOV	EDI, s;		{ Point EDI to s       }
	CMP	EDI, 0;
	JZ	@Kulovy;	{ Řetěz je NIL, to jest prázdný }

	MOV	AL, c;		{ AL znak co hledáme   }
	MOV	ECX, -4 (EDI);	{ Délka řetězu do ECX }
	MOV	EDX, EDI;	{ Úschova ad. začátku řetězu }

	CLD;			{ SCASB pojede nahoru }
	REPNE	SCASB;
	JNE	@Kulovy;	{ Nenašlo se to }

	MOV	EAX, EDI;	{ EAX kde to skončilo + 1 }
	SUB	EAX, EDX;	{ EAX je pozice v řetězu }
	JMP	@Finish;

@Kulovy:XOR	EAX, EAX;	{ EAX := 0 --> že se našlo prd }

@Finish:POP	EDI;
end;

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.8-)

Tento havo vyzerá zo všetkých najlepšie navrhujem ponechať.:-) A keď nie, tak mám lepší nápad: Vložiť do PSPadu ako pomocníka (niečo ako Spinka v Office);-) A to som teraz myslel vážne. Ten havo by sa pekne hodil do PSPadu.:-)

@Kulovy:XOR	EAX, EAX;	{ EAX := 0 --> že se našlo prd }

Škoda, že niečo takéto sa nedá nájsť v resource.:)) To by bolo dobré.:-D Spomenul som si, ako raz dávali v telke dokument, kde ukazovali chlapíkov, ktorí nerobili nič iné, len rozoberali čipy a hľadali na nich kresby. V čipe kalkulačky bol nakreslený nejaký mimozemšťan a podobne.:-)

Kdybys viděl moje komentáře k assemblerským programům pro sálové počítače (tam je třeba komentovat skoro každou instrukci, nebo se v tom nikdo za měsíc už nevyzná - třeba kompilátor Cobolu měl cca 80 000 řádek)... Když jsem odcházel na vlastní nohu, tak při předávce se místo kontroly všichni nezřízeně chechtali...

Aspoň je človeku pri tom veselo, keď niečo programuje. Kamoš mi dal zdroják na dokončenie v Delphi. Až po čase som si všimol, že tam popisoval výpočet súradníc TImage a na konci toho komentáru napísal: prije*aná matematika. Skoro som pustil od smiechu. Bolo to samozrejme bez hviezdičky.:-D

Zpět do poradny Odpovědět na původní otázku Nahoru