Autor Téma: VirtualStringTree - radenie podľa dvoch stĺpcov Vyriešené  (Přečteno 4001 krát)

Offline < z >

  • Administrátoři
  • Guru
  • *****
  • Příspěvků: 1205
  • Karma: 44
    • Verze Delphi: 7, 2010
Re:VirtualStringTree - radenie podľa dvoch stĺpcov
« Odpověď #15 kdy: 12-04-2014, 17:05:49 »
Ne, moje reseni je univerzalni a bude fungovat pro kolik jen sloupcu chces.
V CompareNodes si jen pohlidas, co se ma porovnavat.

Offline TLama

  • Guru
  • *****
  • Příspěvků: 597
  • Karma: 31
    • Verze Delphi: 7, 2009, XE3
Re:VirtualStringTree - radenie podľa dvoch stĺpcov
« Odpověď #16 kdy: 12-04-2014, 17:13:14 »
...protoze VST to dela za tebe...

Co je to "to" ?

Offline Stanislav Hruška

  • Padawan
  • ******
  • Příspěvků: 7392
  • Karma: 44
    • Verze Delphi: W11 + D11.3.1
Re:VirtualStringTree - radenie podľa dvoch stĺpcov
« Odpověď #17 kdy: 12-04-2014, 17:17:16 »
A kde to mám použiť/vložiť?
Citace
Co je to "to" ?
má to napísané "-" mínus
Win11 64b, Delphi 11.3.1, FireBird 4.01
Expert na kladenie nejasne formulovaných otázok.

Offline TLama

  • Guru
  • *****
  • Příspěvků: 597
  • Karma: 31
    • Verze Delphi: 7, 2009, XE3
Re:VirtualStringTree - radenie podľa dvoch stĺpcov
« Odpověď #18 kdy: 12-04-2014, 17:32:10 »
A kde to mám použiť/vložiť?
Citace
Co je to "to" ?
má to napísané "-" mínus

Z kontextu mě ta myšlenka napadla. Snažím se ale i rýpat, aby se lidi naučili vyjadřovat smysluplněji. Že "to dělá tamto" nebo "ono to nefunguje"
z 99% nenese žádnou informativní hodnotu.

Ale dobrá, když chceš tímto směrem pokračovat... Napiš to do události OnHeaderClick tam toho. A to s tím "-" z tama vyhoď ;D


Jinak má ale <z> pravdu. Směr třídění určuje v metodě Sort parametr Direction a na tobě už není negování výsledku v události OnCompareNodes
podle směru třídění (pokud si z nějakého důvodu explicitně nepřeješ třídění proti směru předaného metodě Sort). Takže ten kód se SortDirection
z OnCompareNodes vyhoď.
« Poslední změna: 12-04-2014, 17:42:35 od TLama »

Offline < z >

  • Administrátoři
  • Guru
  • *****
  • Příspěvků: 1205
  • Karma: 44
    • Verze Delphi: 7, 2010
Re:VirtualStringTree - radenie podľa dvoch stĺpcov
« Odpověď #19 kdy: 12-04-2014, 18:24:06 »
omlouvam se, nejsem spisovatel - odkazoval jsem presne na to [to "-"] :D

Offline Mi.Chal.

  • Guru
  • *****
  • Příspěvků: 577
  • Karma: 25
Re:VirtualStringTree - radenie podľa dvoch stĺpcov
« Odpověď #20 kdy: 12-04-2014, 22:26:34 »
- ono neslo o to, ze bys to nemel radit, ale radit to efektivne
- v asm se nevyznam, ale secteni stringu bude asi narocnejsi jak jeden usetreny if :D

navíc to řazení spojováním v některých případech může fungovat blbě. Třeba pro data

A   ZA
AB AB

by to pořadí mělo být takové, jaké jsem napsal, ale spojením vzikne AZA a ABAB, takže ten druhý řádek to bude zobrazovat jako první. Další problémy mohou být čísla, třeba 110 je matematicky větší než 50, ale textovým porovnáním je větší 50.

Offline Stanislav Hruška

  • Padawan
  • ******
  • Příspěvků: 7392
  • Karma: 44
    • Verze Delphi: W11 + D11.3.1
Re:VirtualStringTree - radenie podľa dvoch stĺpcov
« Odpověď #21 kdy: 13-04-2014, 10:37:50 »
Prosím o vysvetlenie. Nerozumiem jednej časti
Kód: Delphi [Vybrat]
  1.   if VST.Header.SortColumn <> HitInfo.Column then
  2.     VST.Header.SortColumn := HitInfo.Column
  3.   else
  4.   if VST.Header.SortDirection = sdAscending then
  5.     VST.Header.SortDirection := sdDescending
  6.   else
  7.     VST.Header.SortDirection := sdAscending;
  8.  
V pseudo kóde

Ak kliknem na hlavičku stĺpca na ktorý som predtým neklikol ("nemá fokus"), tak
  // a ja neviem čo znamená riadok. Čo sa vlastne udeje
  // predpokladám, že pri kliknutí na hlavičku sa tento kód spustí len raz
  VST.Header.SortColumn := HitInfo.Column
ináč zmeň smer radenia.

Vďaka za poznámky, ale väčšinou mi to došlo. Mám to takto
Kód: Delphi [Vybrat]
  1.   case Column of
  2.     0:
  3.     begin
  4.       Result := AnsiCompareText(Data1.SVB, Data2.SVB);
  5.  
  6.       if Result = 0 then // column 1
  7.         Result := AnsiCompareText(Data1.Block, Data2.Block);
  8.  
  9.       if Result = 0 then  // column 2
  10.         Result := AnsiCompareText(Data1.Entry, Data2.Entry);
  11.  
  12.       if Result = 0 then // column 3
  13.         Result := AnsiCompareText(Data1.Number, Data2.Number);
  14.     end;
  15.  
Poznámočka: trocha mi trvalo než som pochopil čo je to to "to". V mojom nárečí je odpoveď: Ta toto to je to [-]  8)
« Poslední změna: 13-04-2014, 10:41:58 od Stanislav Hruška »
Win11 64b, Delphi 11.3.1, FireBird 4.01
Expert na kladenie nejasne formulovaných otázok.

Offline pepak

  • Padawan
  • ******
  • Příspěvků: 1574
  • Karma: 37
    • Pepak.net
Re:VirtualStringTree - radenie podľa dvoch stĺpcov
« Odpověď #22 kdy: 13-04-2014, 10:53:49 »
  // a ja neviem čo znamená riadok. Čo sa vlastne udeje
  // predpokladám, že pri kliknutí na hlavičku sa tento kód spustí len raz
  VST.Header.SortColumn := HitInfo.Column
  NastavSloupecPodleKterehoSeRadiNaSloupec(SloupecNaKteryUzivatelKliknul);