Autor Téma: Enumerated type - zistenie aký má počet položiek  (Přečteno 619 krát)

Offline Stanislav Hruška

  • Padawan
  • ******
  • Příspěvků: 4206
  • Karma: 37
    • Verze Delphi: XE7 professional
Kód: Delphi [Vybrat]
  1. TTypeFocData = (tfFlat, tfOwner_Flat, tfMeter, tfEachFlatHasRoom, tfDeposit, tfDepositInYear, ...);
  2.  
Ja potrebujem zistiť aký počet položiek tam mám. Alebo hodnotu poslednej. Čo je vlastne to isté +-1. Nedarí sa.
Delphi XE7, FireBird
Expert na kladenie nejasne formulovaných otázok.

Offline Stanislav Hruška

  • Padawan
  • ******
  • Příspěvků: 4206
  • Karma: 37
    • Verze Delphi: XE7 professional
Re:Enumerated type - zistenie aký má počet položiek
« Odpověď #1 kdy: 17-01-2019, 13:54:26 »
Mám na mysli priame zistenie. Bez prechádzania položiek v cykle.
Delphi XE7, FireBird
Expert na kladenie nejasne formulovaných otázok.

Offline pf1957

  • Padawan
  • ******
  • Příspěvků: 2513
  • Karma: 131
    • Verze Delphi: D2007, XE3, DX10
Re:Enumerated type - zistenie aký má počet položiek
« Odpověď #2 kdy: 17-01-2019, 14:13:03 »
Ja potrebujem zistiť aký počet položiek tam mám. Alebo hodnotu poslednej. Čo je vlastne to isté +-1. Nedarí sa.
Posledni zjistis pomoci High().  Pokud nejsou prirozene cislovane, tak pocet neziskas. Tam nefunguje poradne ani RTTI.

Offline Stanislav Hruška

  • Padawan
  • ******
  • Příspěvků: 4206
  • Karma: 37
    • Verze Delphi: XE7 professional
Re:Enumerated type - zistenie aký má počet položiek
« Odpověď #3 kdy: 17-01-2019, 14:16:28 »
To som skúšal
Kód: Delphi [Vybrat]
  1.   for I := Low(TTypeFocData) to High(TTypeFocData) do
  2.     FGlobalDataOk.Add(False);
[dcc32 Error] AdaptRibbon.pas(215): E2010 Incompatible types: 'Integer' and 'TTypeFocData'
Delphi XE7, FireBird
Expert na kladenie nejasne formulovaných otázok.

Offline Stanislav Hruška

  • Padawan
  • ******
  • Příspěvků: 4206
  • Karma: 37
    • Verze Delphi: XE7 professional
Re:Enumerated type - zistenie aký má počet položiek
« Odpověď #4 kdy: 17-01-2019, 14:25:05 »
Momentálne som to vyriešil pridaním tfLast. Dokonca v múdrych knihách píšu žeby sa malo používať xxFirst a xxLast. Vtedy som veľmi nerozumel prečo. Už čiastočne viem.
Delphi XE7, FireBird
Expert na kladenie nejasne formulovaných otázok.

Offline pf1957

  • Padawan
  • ******
  • Příspěvků: 2513
  • Karma: 131
    • Verze Delphi: D2007, XE3, DX10
Re:Enumerated type - zistenie aký má počet položiek
« Odpověď #5 kdy: 17-01-2019, 14:29:46 »
To som skúšal
Kód: Delphi [Vybrat]
  1.   for I := Low(TTypeFocData) to High(TTypeFocData) do
  2.     FGlobalDataOk.Add(False);
[dcc32 Error] AdaptRibbon.pas(215): E2010 Incompatible types: 'Integer' and 'TTypeFocData'
No vzdyt ti pise, co mas spatne, takze bud
Kód: Delphi [Vybrat]
  1. var e: TTypeFocData;
  2. for e := low(...) to high(...) do
  3. begin
  4.   i := ord(e);  //pokud to k necemu vubec potrebujes
  5. end;
nebo
Kód: Delphi [Vybrat]
  1. for i := ord(low(...)) to ord(high(...)) do
  2. begin
  3. end;
« Poslední změna: 17-01-2019, 14:34:15 od pf1957 »

Offline pf1957

  • Padawan
  • ******
  • Příspěvků: 2513
  • Karma: 131
    • Verze Delphi: D2007, XE3, DX10
Re:Enumerated type - zistenie aký má počet položiek
« Odpověď #6 kdy: 17-01-2019, 14:31:37 »
Momentálne som to vyriešil pridaním tfLast. Dokonca v múdrych knihách píšu žeby sa malo používať xxFirst a xxLast. Vtedy som veľmi nerozumel prečo. Už čiastočne viem.
To je IMHO blbost: to tak mozna v jazykach, ktere nemaji enum (uz si to nepamatuju, ale mam dojem, ze Java ho nemela a jestli ho stale nema nevim) nebo v drevni dobach pred 40 lety v asm a C, kde taky enumy nejsou a musi se to definovat pomoci integeru
« Poslední změna: 17-01-2019, 14:33:33 od pf1957 »

Offline pf1957

  • Padawan
  • ******
  • Příspěvků: 2513
  • Karma: 131
    • Verze Delphi: D2007, XE3, DX10
Re:Enumerated type - zistenie aký má počet položiek
« Odpověď #7 kdy: 17-01-2019, 14:32:58 »
Kód: Delphi [Vybrat]
  1. TTypeFocData = (tfFlat, tfOwner_Flat, tfMeter, tfEachFlatHasRoom, tfDeposit, tfDepositInYear, ...);
  2.  
Co se naopak vetsinou definuje je tfUnknown jako prvni clen.

Offline Stanislav Hruška

  • Padawan
  • ******
  • Příspěvků: 4206
  • Karma: 37
    • Verze Delphi: XE7 professional
Re:Enumerated type - zistenie aký má počet položiek
« Odpověď #8 kdy: 17-01-2019, 14:34:08 »
A ja nie a nie tam napasovať ten Ord :)
Delphi XE7, FireBird
Expert na kladenie nejasne formulovaných otázok.

Offline pf1957

  • Padawan
  • ******
  • Příspěvků: 2513
  • Karma: 131
    • Verze Delphi: D2007, XE3, DX10
Re:Enumerated type - zistenie aký má počet položiek
« Odpověď #9 kdy: 17-01-2019, 14:37:50 »
Excellent
Rated 1 time
A ja nie a nie tam napasovať ten Ord :)
No to by mela byt situace, kdy neni zbyti a skutecne potrebujes pracovat s ordinalnimi hodnotami. Jinak bys mel operovat na urovni enumu vsude, kde to jde tj. i pri rizeni cyklu.

Offline Stanislav Hruška

  • Padawan
  • ******
  • Příspěvků: 4206
  • Karma: 37
    • Verze Delphi: XE7 professional
Re:Enumerated type - zistenie aký má počet položiek
« Odpověď #10 kdy: 17-01-2019, 14:54:02 »

Citace
No to by mela byt situace, kdy neni zbyti a skutecne potrebujes pracovat s ordinalnimi hodnotami. Jinak bys mel operovat na urovni enumu vsude, kde to jde tj. i pri rizeni cyklu.
A ako bez toho Ord? To je vlastne tu položená otázka.
Delphi XE7, FireBird
Expert na kladenie nejasne formulovaných otázok.

Offline pf1957

  • Padawan
  • ******
  • Příspěvků: 2513
  • Karma: 131
    • Verze Delphi: D2007, XE3, DX10
Re:Enumerated type - zistenie aký má počet položiek
« Odpověď #11 kdy: 17-01-2019, 14:56:10 »
A ako bez toho Ord? To je vlastne tu položená otázka.
Vzdyt jsem ti to psal tady

Offline Stanislav Hruška

  • Padawan
  • ******
  • Příspěvků: 4206
  • Karma: 37
    • Verze Delphi: XE7 professional
Re:Enumerated type - zistenie aký má počet položiek
« Odpověď #12 kdy: 17-01-2019, 15:10:02 »
Jaj, už som to pochopil.
Delphi XE7, FireBird
Expert na kladenie nejasne formulovaných otázok.