Autor Téma: Továreň? na podformuláre  (Přečteno 574 krát)

Offline Stanislav Hruška

  • Padawan
  • ******
  • Příspěvků: 6161
  • Karma: 44
    • Verze Delphi: W10 + D11
Továreň? na podformuláre
« kdy: 29-11-2018, 15:39:13 »

Základ je takýto
Kód: Delphi [Vybrat]
  1. class function TfrmsubMeterType.CreateAsSubform(const ABasicPanel: TjstAdvPanel; const ATable: string): TfrmsubMeterType;
  2. begin
  3.   Assert(Assigned(ABasicPanel), 'ABasicPanel is nil');
  4.   Assert(ATable <> '', 'ATable is empty');
  5.   Result := TfrmsubMeterType.CreateForm;
  6.   Result.Parent := ABasicPanel;
  7.   Result.ParentWindow := ABasicPanel.Handle;
  8.   Result.Color := ABasicPanel.Color;
  9.   Result.Align := alClient;
  10.   Result.AlignWithMargins := True;
  11.   Result.ControlStyle := Result.ControlStyle + [csParentBackground];
  12.   Result.Invalidate;
  13.   Result.oMeterType := TMeterType.CreateMeterType(Result, ATable,  ABasicPanel);
  14.   Result.oMeterType.BasicPanel := ABasicPanel;
  15.   oGlobalVar.AddObjects(Result.oMeterType);
  16.   Result.oMeterType.FillVst;
  17. end;
Ale môže tam byť toho aj viac. Napríklad:
Kód: Delphi [Vybrat]
  1.   Result.oSubaccount_Flat := TSubAccount_Flat.CreateSubAccount_Flat(Result, ABasicPanel, ATable);
  2.   Result.oSubaccount_Flat.BasicPanel := ABasicPanel;  // pnlBlock_FlatBasic
  3.   Result.oSubaccount_Flat.IsCheckBox := True;
  4.   oGlobalVar.AddObjects(Result.oSubaccount_Flat);
  5.  
Ako sa také niečo rieši. V triede to urobím v dedení pomocou override.
Samozrejme používam aj rôzny počet parametrov. Nie je ich veľa, takže to by som mal zvládnuť aj keby som nejaký parameter nevyužil.
W10 64b, Delphi 10.4, FireBird 3.08
Expert na kladenie nejasne formulovaných otázok.

Offline Stanislav Hruška

  • Padawan
  • ******
  • Příspěvků: 6161
  • Karma: 44
    • Verze Delphi: W10 + D11
Re:Továreň? na podformuláre
« Odpověď #1 kdy: 29-11-2018, 20:38:09 »
Mám tu hustú debatu :)
Parametre sú celkom v pohode. Ale čo neviem ako riešiť je skutočnosť, že každá funkcia vracia iný subForm = vždy iný typ triedy.
Pokiaľ viem, tak továreň vracia vždy ten istý typ.
No jedno riešenie predsa len poznám. Použil som ho pri vytváraní formulárov. Pre každý formulár som si definoval vymenovaný typ a podľa toho si vrátim patričný formulár. Veľmi sa mi to nepáči, ale lepší návrh som tu nevidel.
W10 64b, Delphi 10.4, FireBird 3.08
Expert na kladenie nejasne formulovaných otázok.

Offline pf1957

  • Padawan
  • ******
  • Příspěvků: 3343
  • Karma: 139
    • Verze Delphi: D2007, XE3, DX10
Re:Továreň? na podformuláre
« Odpověď #2 kdy: 30-11-2018, 08:55:48 »
Pre každý formulár som si definoval vymenovaný typ a podľa toho si vrátim patričný formulár. Veľmi sa mi to nepáči, ale lepší návrh som tu nevidel.
Jestli chces tovarnu, ktera umi vytvaret instance ruznych typu trid, tak ji nejak musis rict, co po ni chces. A v tomto smyslu je enum to nejlepsi, co muzes udelat, protoze  si zavedes logickou abstrakci.

Pokud bys to delal treba na zaklade jmena DB tabulky, tak vytvaris implicitni vazbu -> kdyz bys ta data dostal napr. jako XML emajlem, tak by ta tovarna na formulare mela fungovat porad dal -> cili spravny navrh z pohledu (znovu)pouzitelnosti ma mit co nejmensi pocet implicitnich vazeb (decoupling), proto se v tech nejvyspelejsich technologiich pouziva Dependecy Injection (napr. framework Spring) ktery na urovni konfigurace umozni zmena napr. zdroje dat z DB na emajl bez rekompilace kodu.

Offline Stanislav Hruška

  • Padawan
  • ******
  • Příspěvků: 6161
  • Karma: 44
    • Verze Delphi: W10 + D11
Re:Továreň? na podformuláre
« Odpověď #3 kdy: 30-11-2018, 10:37:34 »
Citace
Pokud bys to delal treba na zaklade jmena DB tabulky,
Tak to určite nie. To mi je už od prirodzenia proti srsti. Niektoré tabuľky používam v jednom formulári aj viacnásobne. Takže ten enum.
W10 64b, Delphi 10.4, FireBird 3.08
Expert na kladenie nejasne formulovaných otázok.