Autor Téma: Očíslovanie komponentov v návrhu  (Přečteno 658 krát)

Offline Stanislav Hruška

  • Padawan
  • ******
  • Příspěvků: 6033
  • Karma: 44
    • Verze Delphi: W10 + D11
Očíslovanie komponentov v návrhu
« kdy: 28-09-2021, 17:01:56 »
Pre zjednodušenie práce a aby som to vôbec zvládol potrebujem očíslovať komponenty na formulári. Zakaždým to opakovať na novej snímke formulára ma už nebaví. Formuláre sú husto posiate komponentmi. Preto to musí byť niečo čo bude na samom vrchu.
  • Label nejde použiť, lebo ho nemôžem dostať do popredia
  • Panely nemajú vlastnosť Transparent
Vie niekto o nejakej možnosti?

W10 64b, Delphi 10.4, FireBird 3.05
Expert na kladenie nejasne formulovaných otázok.

Offline Radek Červinka

  • Administrátoři
  • Padawan
  • *****
  • Příspěvků: 2982
  • Karma: 108
    • Verze Delphi: D2007, DXE + 2 poslední
    • O Delphi v češtině
Re:Očíslovanie komponentov v návrhu
« Odpověď #1 kdy: 28-09-2021, 17:16:15 »
CnPack ukazuje TabOrder pro kazdou vrstvu jinou barvou a číslem -  viz. příloha.
Embarcadero MVP - Czech republic

Offline Stanislav Hruška

  • Padawan
  • ******
  • Příspěvků: 6033
  • Karma: 44
    • Verze Delphi: W10 + D11
Re:Očíslovanie komponentov v návrhu
« Odpověď #2 kdy: 28-09-2021, 17:35:34 »
To poznám. TabOrder sa nezhoduje s číslovaním komponentov. Nerieši to moju situáciu. Mám teraz návrh na 36 čísel. Vo všetkých dotknutých formulároch. Na formulári je maximálne ~10 komponentov.
Prikladám ukážku súčasného číslovania.


W10 64b, Delphi 10.4, FireBird 3.05
Expert na kladenie nejasne formulovaných otázok.

Offline Stanislav Hruška

  • Padawan
  • ******
  • Příspěvků: 6033
  • Karma: 44
    • Verze Delphi: W10 + D11
Re:Očíslovanie komponentov v návrhu
« Odpověď #3 kdy: 28-09-2021, 17:39:56 »
A tu je návrh nového číslovania.
Dôvod je, že chcem mať úplne jasno s čím robím. Tie coXX budú vymenované typy.
Bude to síce viac kódu ale:
  • je jasné čo robím
  • vyhnem sa chybám
  • neriešim jeden komponent pre viac situácii. To mám teraz
« Poslední změna: 28-09-2021, 17:41:38 od Stanislav Hruška »
W10 64b, Delphi 10.4, FireBird 3.05
Expert na kladenie nejasne formulovaných otázok.

Offline pf1957

  • Padawan
  • ******
  • Příspěvků: 3291
  • Karma: 139
    • Verze Delphi: D2007, XE3, DX10
Re:Očíslovanie komponentov v návrhu
« Odpověď #4 kdy: 28-09-2021, 18:05:38 »
A tu je návrh nového číslovania.
Dôvod je, že chcem mať úplne jasno s čím robím. Tie coXX budú vymenované typy.
Ne, ze bych rozumel tomu, o co se snazis: cislovani nikdy nebude stabilni a proto se pouzivaji symbolicka jmena...

Takze pokud chces mit jasno, tak si to srozumitelne pojmenuj. A dobra praxe je to symbolicke jmenu uvest i do textu zobrazovanemu BFU v UI - pak vidis, jak se co jmenuje a na prvni pohled je patrne, ktery text nemas lokalizovany.

Offline Stanislav Hruška

  • Padawan
  • ******
  • Příspěvků: 6033
  • Karma: 44
    • Verze Delphi: W10 + D11
Re:Očíslovanie komponentov v návrhu
« Odpověď #5 kdy: 28-09-2021, 18:33:52 »
Trochu to vysvetlím. Názvy komponentov mám Name_Number. Prechádzam celý formulár. Podľa čísla viem, že sa jedná o komponent, pomocou ktorého užívateľ nastavuje svoje voľby pre tlač. Ja si zistím aktuálny stav komponentu a na základe čísla uložím si do správnej premennej. Tie potom použijem neskôr na:
  • zostavenie SQL Textu
  • výber správneho "report.fr3"
  • nastavanie zostavy - skrytie/vymazanie niektorých jej častí
  • a neviem čo ešte
Takže samotný názov komponentu nepotrebujem. Číslovanie na formulári je výslovne len pre moju potrebu počas programovania. Aby som sa z toho nezbláznil. Už som to číslovanie menil niekoľko krát :(  Terajšie riešenie by už malo byť
  • konečné
  • nezávislé na prípadných ďalších zmenách/požiadavkách. Napr. nová zostava. Mám tým na mysli žiadna spätná úprava. Len nový kód
Už som túto techniku použil, ale vždy som tam mal dosť miesta na label.
« Poslední změna: 28-09-2021, 18:37:43 od Stanislav Hruška »
W10 64b, Delphi 10.4, FireBird 3.05
Expert na kladenie nejasne formulovaných otázok.

Offline vandrovnik

  • Guru
  • *****
  • Příspěvků: 1274
  • Karma: 51
    • Verze Delphi: 10.3
Re:Očíslovanie komponentov v návrhu
« Odpověď #6 kdy: 28-09-2021, 20:45:15 »
K čemu že to číslování má být dobré? To má někde vidět uživatel, nebo to je pro programátora?

Offline Stanislav Hruška

  • Padawan
  • ******
  • Příspěvků: 6033
  • Karma: 44
    • Verze Delphi: W10 + D11
Re:Očíslovanie komponentov v návrhu
« Odpověď #7 kdy: 28-09-2021, 20:46:21 »
Písal som, že len pre mňa.
W10 64b, Delphi 10.4, FireBird 3.05
Expert na kladenie nejasne formulovaných otázok.

Offline vandrovnik

  • Guru
  • *****
  • Příspěvků: 1274
  • Karma: 51
    • Verze Delphi: 10.3
Re:Očíslovanie komponentov v návrhu
« Odpověď #8 kdy: 28-09-2021, 20:49:34 »
Písal som, že len pre mňa.

No já bych se asi zbláznil spíš z těch čísel... Proč nestačí prostě jen kloudná jména těch komponent?

Offline pf1957

  • Padawan
  • ******
  • Příspěvků: 3291
  • Karma: 139
    • Verze Delphi: D2007, XE3, DX10
Re:Očíslovanie komponentov v návrhu
« Odpověď #9 kdy: 28-09-2021, 20:51:08 »
Aby som sa z toho nezbláznil. Už som to číslovanie menil niekoľko krát :( 
Pouziti poradovych cisel k identifikaci cehokoli je na zblazneni a nikdy bych to nepouzil: od toho jsou enumy, v horsim pripade konstanty.

Offline Stanislav Hruška

  • Padawan
  • ******
  • Příspěvků: 6033
  • Karma: 44
    • Verze Delphi: W10 + D11
Re:Očíslovanie komponentov v návrhu
« Odpověď #10 kdy: 28-09-2021, 22:07:23 »
Ja tie enumy už mám navrhnuté. Ich poradie je zhodné s číslami v menách. Viď priložený Excel. Ale ako by som ich použil? Dám konkrétny prípad:
RadioGroup "Radiť podľa":
  • Bytu
  • Mena
Upozorňujem, že tých RadioGroup "Radiť podľa" (to je titulok, nie názov) je viac a s rovnakým názvom. Doteraz mali rovnaké aj číslovanie. Teraz som to odlíšil číslami na konci. Mám 13 formulárov. Niektoré komponenty majú totožné - názvom aj funkciou.
Ako by som pracoval pri programovom prechádzaní formulára a hľadaní dotknutých komponentov? Nemám nikde ich zoznam. Ani ho nemienim robiť.
Ja som si vybral tento spôsob. O takom spôsobe sme sa už raz bavili a bol odporučený (pf1957  ;) ). Ale tam to slúžilo len na zachytenie DB komponentov, hodenia ich do zoznamu a určenie ich poradia pri kontrole.
Vandrovnik: stačili by mi aj mená, ale tie čísla sa mi lepšie spracovávajú - majú vyššiu výpovednú hodnotu. Napr., že to je môj komponent. Podľa mena by som to nevedel.
W10 64b, Delphi 10.4, FireBird 3.05
Expert na kladenie nejasne formulovaných otázok.

Offline pf1957

  • Padawan
  • ******
  • Příspěvků: 3291
  • Karma: 139
    • Verze Delphi: D2007, XE3, DX10
Re:Očíslovanie komponentov v návrhu
« Odpověď #11 kdy: 28-09-2021, 22:15:52 »
Teraz som to odlíšil číslami na konci.
No a jaky je problem misto cisel uvest nazvy enumu a introspekci ziskat jejich hodnotu a s tou v programu pracovat?
Citace
O takom spôsobe sme sa už raz bavili a bol odporučený (pf1957  ;) ). Ale tam to slúžilo len na zachytenie DB komponentov, hodenia ich do zoznamu a určenie ich poradia pri kontrole.
No ale tam pouzivas poradove cislo k definovani poradi a ne k identifikaci, ne?

Offline Stanislav Hruška

  • Padawan
  • ******
  • Příspěvků: 6033
  • Karma: 44
    • Verze Delphi: W10 + D11
Re:Očíslovanie komponentov v návrhu
« Odpověď #12 kdy: 28-09-2021, 22:40:42 »
Citace
a introspekci ziskat jejich hodnotu
Tomu trochu nerozumiem. Budem mať názov blabla_coMyEnum.
Viem si načítať coMyEnum, ale to je len string. To ho mám hľadať v zozname podľa mena? Už niečo také robím s cudzími enumami (TSM).
Dobrú noc. Už mi odbila hodina :D .
Je jasné, že sa mi s tým bude lepšie robiť. Napríklad potrebujem vyriešiť ukladanie rôznych hodnôt - Boolean (tu použijem Integer), Byte, Integer, TDAte. Samozrejme musím vedieť, ktoré hodnoty (komponenty) som načítal. To asi budem robiť inicializáciou na hodnotu, ktorú pri načítaní nepriradím. Napr: Date := 0; Byte := 255; Integer -1. Načítanie hodnôt a ich použitie je oddelené.

Ale neviem ako mám vyriešiť zoznamy. V podstate sa jedná o tri zoznamy Boolean. Pri použití sa aktualizuje každá položka. Nie vždy poznám dopredu počet položiek.
« Poslední změna: 28-09-2021, 22:47:38 od Stanislav Hruška »
W10 64b, Delphi 10.4, FireBird 3.05
Expert na kladenie nejasne formulovaných otázok.

Offline pf1957

  • Padawan
  • ******
  • Příspěvků: 3291
  • Karma: 139
    • Verze Delphi: D2007, XE3, DX10
Re:Očíslovanie komponentov v návrhu
« Odpověď #13 kdy: 29-09-2021, 07:14:14 »
Citace
a introspekci ziskat jejich hodnotu
Tomu trochu nerozumiem. Budem mať názov blabla_coMyEnum.
Viem si načítať coMyEnum, ale to je len string. To ho mám hľadať v zozname podľa mena?
Ne, Delphi interospekci podporuje uz pomerne dlouho, i kdyz mam dojem, ze u tech enumu to ma nejaka omezeni:
Kód: Delphi [Vybrat]
  1.   e := TRttiEnumerationType.GetValue<TMyEnum>(sEnum);
  2.   if ord(e)<0 then
  3.     ... // not found
  4.  
U zbytku nevim, jak to souvisi s puvodnim cislovanim komponent vs. jejich radnemu pojmenovani.


Offline Stanislav Hruška

  • Padawan
  • ******
  • Příspěvků: 6033
  • Karma: 44
    • Verze Delphi: W10 + D11
Re:Očíslovanie komponentov v návrhu
« Odpověď #14 kdy: 29-09-2021, 08:28:16 »
Ďakujem, vyskúšam/overím to. O tom som nevedel. Ako som už písal, ja si takto získavam názvy Enum.

V noci som dal mozgu možnosť pracovať. Ráno mi hodil toto:
RadioGroup.Items = TStringList
To sa dá využiť následne:
Kód: Delphi [Vybrat]
  1. var
  2.   MyList: TStringList;
  3. begin
  4.   MyList := TStringList.Create;
  5.   MyList.Add('Bytu', TObject('FlatNumber, Name');
  6.   MyList.Add('Bytu', TObject('Name', FlatNumber);
  7. //  Pri tvorbe formulára
  8.   rgOrderBy.Items := MyList;
  9. //  Pri získavaní hodnoty
  10.   FOrderBy := FOrderBy + string(rgOrderBy.Object[rgOrderBy.ItemIndex]);
To isté sa dá použiť aj pre FWhere. To mi veľmi uľahčí život.
Raz som v Delphi videl niečo také:
Kód: Delphi [Vybrat]
  1. var
  2.   MyEnum: TMayEnum;
  3.   EnumName: string;
  4. begin
  5.   EnumName := Z názvu komponentu
  6.   MyEnum := TMayEnum(EnumName);  // ???
Budú mi tieto veci fungovať? Ja dúfam, že áno.
W10 64b, Delphi 10.4, FireBird 3.05
Expert na kladenie nejasne formulovaných otázok.