Autor Téma: subForm - ako sa k nemu dostať, bez väzby na jednotku, kde ho vytvorím  (Přečteno 121 krát)

Offline Stanislav Hruška

  • Padawan
  • ******
  • Příspěvků: 5450
  • Karma: 41
    • Verze Delphi: W10 + Delphi 10.4 professional
Používam subForm, ktoré vytváram v "hlavnom" formulári. Akonáhle chcem tento subForm použiť v nejakej jednotke, tak do jej uses musím pridať hlavný formulár.
To veľmi, ale veľmi nepáči. Hlavne z dôvodu, že vytváram väzby, ktoré mi ničia "zapuzdrenie". Ak ten subForm vytvorím v inom hlavnom formulári, tak sa dostávam do pekla. Teraz som sa dostal do situácie, kde mi to veľmi vadí.
.
Mne prišla na um jediná možnosť. Mám jednotku pre globálne premenné. Tak tam by som mohol vytvoriť TList<T> pre podformuláre.
Je to dobrá cesta, alebo mi ponúknete lepšie riešenie.
Poznámka: jednotku pre globálne premenné mám citovanú snáď v každej jednotke.
W10 64b, Delphi 10.4, FireBird 3.05
Expert na kladenie nejasne formulovaných otázok.

Offline Stanislav Hruška

  • Padawan
  • ******
  • Příspěvků: 5450
  • Karma: 41
    • Verze Delphi: W10 + Delphi 10.4 professional
Teraz mi došlo, že nebudem vedieť ktorý subForm je na ktorej pozícii. To sa zákonite bude meniť od hlavného formulára k hlavnému formuláru. Jedine mať ten zoznam dvojpoložkový. Druhá položka by bola typ formulára - to už mám.
W10 64b, Delphi 10.4, FireBird 3.05
Expert na kladenie nejasne formulovaných otázok.

Offline Stanislav Hruška

  • Padawan
  • ******
  • Příspěvků: 5450
  • Karma: 41
    • Verze Delphi: W10 + Delphi 10.4 professional
Jedna z volieb je Dictionary. MMX mi vygeneroval nasledovné:
Kód: Delphi [Vybrat]
  1. property SubForms: TDictionary<TTypeForm, TSubForm> read GetSubForms write SetSubForms;
  2. .
  3. function TGlobalVar.GetSubForms: TDictionary<TTypeForm, TSubForm>;
  4. begin
  5.   Result := FSubForms;
  6. end;
  7. .
  8. procedure TGlobalVar.SetSubForms(const Value: TDictionary<TTypeForm, TSubForm>);
  9. begin
  10.   FSubForms := Value;
  11. end;
A z toho som vedľa.
Pri Set potrebujem ako parametre poslať TTypeForm, TSubForm. Ale tam je definované TDictionary
Pri Get je Result to čo potrebujem. Ale ako parameter sa žiada len TTypeForm. A opäť mám TDictionary
Akonáhle to TDictionary zmením na niečo iné, tak to kompilátor neberie.
.
Predpokladám, že si budem musieť urobiť dve samostatné funkcie a property SubForms vyhodiť.
Alebo sa to robí nejako ináč?
W10 64b, Delphi 10.4, FireBird 3.05
Expert na kladenie nejasne formulovaných otázok.

Offline pf1957

  • Padawan
  • ******
  • Příspěvků: 3004
  • Karma: 135
    • Verze Delphi: D2007, XE3, DX10
Používam subForm, ktoré vytváram v "hlavnom" formulári. Akonáhle chcem tento subForm použiť v nejakej jednotke, tak do jej uses musím pridať hlavný formulár. To veľmi, ale veľmi nepáči...
No to se ti spravne nepaci, protoze idealem by melo byt loose coupling

- ale nejak nechapu, proc bych mel importovat hlavni formular, kdyz chci vytvorit ten subform.
- zavislosti jsou na urovni definice, takze pak nechapu, proc chces schovavat vytvorene instance subForms do dictionary.

Offline Stanislav Hruška

  • Padawan
  • ******
  • Příspěvků: 5450
  • Karma: 41
    • Verze Delphi: W10 + Delphi 10.4 professional
Citace
- ale nejak nechapu, proc bych mel importovat hlavni formular, kdyz chci vytvorit ten subform.
- zavislosti jsou na urovni definice, takze pak nechapu, proc chces schovavat vytvorene instance subForms do dictionary.
Buď som to ja napísal nezrozumiteľne, alebo... Tak znova. Ťažko sa mi to popisuje.
Všetky subfrom vytvorím v MyForm. Teraz mám formulár so subform a v dvoch prípadoch si tieto subform vytvoria svoj subform1. To mi skomplikovalo život. V tom ďalšom subform potrebujem pracovať s jeho parent. A to je 2 x subform v MyForm. A ja potrebujem subform1 poslať/načítať zakaždým iné hodnoty z rôznych subform. A to načítaním hodnoty z komponentu na subform.
Aby som mal voľné väzby, tak sa potrebujem zbaviť závislosti na MyForm.
.
To by mi mal umožniť ten zoznam. Nechcem nič meniť čo sa týka tvorby subform.
W10 64b, Delphi 10.4, FireBird 3.05
Expert na kladenie nejasne formulovaných otázok.

Offline Stanislav Hruška

  • Padawan
  • ******
  • Příspěvků: 5450
  • Karma: 41
    • Verze Delphi: W10 + Delphi 10.4 professional
Som ja ale blbec. Teraz som sa na to pozrel lepšie a zistil som, že celú funkciu, kde mám problém môžem presunúť do parent! Žiaden problém nebude.
Už je veľa hodín a je toho už na mňa veľa :( Nemám 30-40 rokov.
W10 64b, Delphi 10.4, FireBird 3.05
Expert na kladenie nejasne formulovaných otázok.