Autor Téma: TAlarmPlannerEditForm.CreateNew(AOwner); - nepozná vlastné komponenty  (Přečteno 565 krát)

Offline Stanislav Hruška

  • Padawan
  • ******
  • Příspěvků: 5681
  • Karma: 42
    • Verze Delphi: W10 + Delphi 10.4 professional
Pracujem s TMS Planner. Chcem vytvoriť nový editor podľa ich editorov. V TMS používajú
Kód: Delphi [Vybrat]
  1. FEditForm := TPeriodPlannerItemEditForm.Create(AOwner);
Mne to nefungovalo. FAlarmForm bol nil. Dostal som odpoveď:
Citace
To create a form in code and not via loading from DFM , you need to call Form.CreateNew()
FAlarmForm už nie je nil, ale nepozná nič čo je na ňom.

Pretože neviem ako presne funguje TMS, neverím žeby som to pochopil, a moje vedomosti sú úbohé, tak neviem o čo ide. Tým pádom to neviem vyriešiť. Viem to riešiť dvoma spôsobmi
  • vytvoriť si vlastný "klasický formulár" pre prácu s DB
  • rozšíriť niektorý z TMS editorov
Rád by som to mal ako TMS a samostatne.
Viet mi poradiť? Ďakujem.
W10 64b, Delphi 10.4, FireBird 3.05
Expert na kladenie nejasne formulovaných otázok.

Offline Morrison

  • Hrdina
  • ****
  • Příspěvků: 313
  • Karma: 12
    • Verze Delphi: D5, XE2, 10.4
Stando, ukaž, prosím, jak máš udělaný ten AlarmForm. Zdá se, že jsi pouze nadeklaroval nějakou novou třídu odvozenou od TCustomForm(?) a nemáš pro ni odpovídající .dfm soubor, který konstruktor .Create(AOwner: TComponent) očekává. V takovém případě bys buď musel vytvořit .dfm a nebo form vytvářet přes ten konstruktor .CreateNew (ten bys musel overridnout) a v něm vytvořit a umístit i všechny komponenty, které na tom formuláři chceš mít, včetně přiřazení všech handlerů událostí atd.
nil

Offline Stanislav Hruška

  • Padawan
  • ******
  • Příspěvků: 5681
  • Karma: 42
    • Verze Delphi: W10 + Delphi 10.4 professional

Súbor dfm mám. Oba (aj pas) prikladám do prílohy.
Je to urobené presne ako ostatné editory. Prikladám, na porovnanie, aj jeden upravený TSM editor. Úprava spočíva len vo výmene komponentov. Kód sa nemenil.
Vôbec netuším
  • prečo mi to nefunguje a
  • prečo som, podľa odporúčania, musel použiť CreateNew namiesto Create.
Ja som činnosť TMS editorov nekrokoval. Lebo si nemyslím, že to zvládnem. Možno sa mýlim.
W10 64b, Delphi 10.4, FireBird 3.05
Expert na kladenie nejasne formulovaných otázok.

Offline Morrison

  • Hrdina
  • ****
  • Příspěvků: 313
  • Karma: 12
    • Verze Delphi: D5, XE2, 10.4
Ok, z tohohle prostě pořád nevím, co je vlastně ten FAlarmForm. Instanci jaké třídy se snažíš vytvořit?
nil

Offline Stanislav Hruška

  • Padawan
  • ******
  • Příspěvků: 5681
  • Karma: 42
    • Verze Delphi: W10 + Delphi 10.4 professional
Čo som to tam dal :o  Teraz tam sú tie správne súbory.
W10 64b, Delphi 10.4, FireBird 3.05
Expert na kladenie nejasne formulovaných otázok.

Offline Morrison

  • Hrdina
  • ****
  • Příspěvků: 313
  • Karma: 12
    • Verze Delphi: D5, XE2, 10.4
To je to, o čem jsem psal - chybí Ti .dfm pro TAlarmPlannerEditForm.
nil

Offline Jan Fiala

  • Plnoletý
  • ***
  • Příspěvků: 183
  • Karma: 2
    • Verze Delphi: 10.4.1
    • PSPad editor
Pokud jsi ten TMS instaloval, nemáš tam v "New" i možnost nového TAlarmPlannerEdit? Měl by se vytvořit form, odvozený od předka a ten už by TMS měl znát. Jinak to samozřejmě můžeš udělat i ručně...

Offline Stanislav Hruška

  • Padawan
  • ******
  • Příspěvků: 5681
  • Karma: 42
    • Verze Delphi: W10 + Delphi 10.4 professional
To je to, o čem jsem psal - chybí Ti .dfm pro TAlarmPlannerEditForm.
Aha, až teraz so to pochopil/poriadne to prečítal. Taký v TMS neexistuje.
Stando, ukaž, prosím, jak máš udělaný ten AlarmForm. Zdá se, že jsi pouze nadeklaroval nějakou novou třídu odvozenou od TCustomForm(?) a nemáš pro ni odpovídající .dfm soubor, který konstruktor .Create(AOwner: TComponent) očekává. V takovém případě bys buď musel vytvořit .dfm a nebo form vytvářet přes ten konstruktor .CreateNew (ten bys musel overridnout) a v něm vytvořit a umístit i všechny komponenty, které na tom formuláři chceš mít, včetně přiřazení všech handlerů událostí atd.
Čo si mám predstaviť pod "ten bys musel overridnout". Tých komponentov tam nie je veľa. V tom dfm to je vidieť.
W10 64b, Delphi 10.4, FireBird 3.05
Expert na kladenie nejasne formulovaných otázok.

Offline Stanislav Hruška

  • Padawan
  • ******
  • Příspěvků: 5681
  • Karma: 42
    • Verze Delphi: W10 + Delphi 10.4 professional
Hm, jedna vec mi tu nesedí. Pri ostatných som skopíroval existujúci editor. Ten som si premenoval a upravil. Nakoniec som vytvoril balíček komponentov a nainštaloval ich.
Ako to potom je, že sa mi zobrazí ten upravený formulár a nie TSM? A teraz mi vraj chýba TMS dfm. Ten som vytváral podľa existujúcich. Žiaden rozdiel tam nevidím. Ale čo je pod kapotou TMS to netuší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ů: 5681
  • Karma: 42
    • Verze Delphi: W10 + Delphi 10.4 professional
Pokud jsi ten TMS instaloval, nemáš tam v "New" i možnost nového TAlarmPlannerEdit? Měl by se vytvořit form, odvozený od předka a ten už by TMS měl znát. Jinak to samozřejmě můžeš udělat i ručně...
Taký editor TMS nemá. Zvlášť som sa na to pýtal. V "New" nie je žiaden Planner editor.
Hm, našiel som tam toto:
« Poslední změna: 03-05-2021, 11:58:02 od Stanislav Hruška »
W10 64b, Delphi 10.4, FireBird 3.05
Expert na kladenie nejasne formulovaných otázok.

Offline Morrison

  • Hrdina
  • ****
  • Příspěvků: 313
  • Karma: 12
    • Verze Delphi: D5, XE2, 10.4
Jenže Ty máš .dfm pro TjstAlarmPlannerEditor, nikoliv pro TAlarmPlannerEditorForm, který vytváříš dynamicky. Musel by sis to .dfm buď vytvořit ručně a nějak ho Delphi podstrčit (na to nevím, jestli by stačilo standardní {$R *.dfm}, nikdy jsem to moc nezkoumal), nebo bys musel přepsat poděděný kontruktor CreateNew(AOwner: TComponent; Dummy: Integer = 0); override; (to bylo myšleno tím "overridnout") a v něm si všechny vizuální komponenty, které tam chceš mít, vytvořit a umístit sám.
Ještě možná koukni na help k CreateNew(), je tam ukázka, jak bys mohl případně explicitně načíst svůj vlastní .dfm soubor.
nil

Offline pf1957

  • Padawan
  • ******
  • Příspěvků: 3178
  • Karma: 137
    • Verze Delphi: D2007, XE3, DX10
Jenže Ty máš .dfm pro TjstAlarmPlannerEditor, nikoliv pro TAlarmPlannerEditorForm, který vytváříš dynamicky. Musel by sis...
Jj, ale s ohledem na to, ze Stano pise, ze to opsal a v originale to funguje, tak bych sel hledat, co blbe opsal, nez vynalezat kolo.

Offline Stanislav Hruška

  • Padawan
  • ******
  • Příspěvků: 5681
  • Karma: 42
    • Verze Delphi: W10 + Delphi 10.4 professional
Citace
Jj, ale s ohledem na to, ze Stano pise, ze to opsal a v originale to funguje, tak bych sel hledat, co blbe opsal, nez vynalezat kolo.
Ja som nič zle neopísal. Myslím "syntakticky". Krokovanie nikam nevedie. Osobne som presvedčený, že problém musím hľadať v TMS komponentoch. Pochopiť ako to majú urobené. Pri krátkom rýchlom nahliadnutí sa mi to vidí zložité a veľmi si neverím, žeby som to zvládol.
Pravdu povediac, ani sa mi do toho nechce ísť ;)  Ale skúsim jednu vec. Skopírujem si všetky jednotky, ktoré sa dotýkajú Planner a dám tam vyhľadať názov niektorého editora. Osobne si myslím, že ich majú niekde citované. Jedná sa o 4 kusy. Predpokladám, že ich systém Planner je uzavretý.
Využívam nechuť programovať na čítanie životopisu Einsteina a spomienkom starších ľudí na Humenné zhruba pred rokom 1960, kedy tu začala hromadná výstavba bytoviek. Ja som sa prisťahoval už do moderného mesta. Ale som veľmi rád, že som tu. Od roku 1976.
Ďakujem za všetky príspevky. Buď niečo vyňuchám, alebo si urobím môj "klasický DB formulár".
W10 64b, Delphi 10.4, FireBird 3.05
Expert na kladenie nejasne formulovaných otázok.

Offline Stanislav Hruška

  • Padawan
  • ******
  • Příspěvků: 5681
  • Karma: 42
    • Verze Delphi: W10 + Delphi 10.4 professional
Tak som sa donútil niečo urobiť.
Vytvoril som AlarmPlannerEditForm s TfrmAlarmPlannerEditForm = class(TForm). To je moje dfm.
Potom nasleduje

Kód: Delphi [Vybrat]
  1. procedure TjstAlarmPlannerEditor.CreateEditor(AOwner: TComponent);
  2. begin
  3.   WriteComponentResFile('Temp.dfm', TfrmAlarmPlannerEditForm.Create(nil));
  4.   FAlarmForm := TAlarmPlannerEditForm(TForm.CreateNew(AOwner));
  5.   ReadComponentResFile('Temp.dfm', FAlarmForm);
Dalo mi to trocha zabrať a pritom neviem či to je správne. Pri ReadComponentResFile dostanem:
Citace
Project JasotSVB.exe raised exception class EClassNotFound with message 'Class TAdvPanel not found'
Mám uvedenú jednotku AdvPanel.
W10 64b, Delphi 10.4, FireBird 3.05
Expert na kladenie nejasne formulovaných otázok.

Offline Stanislav Hruška

  • Padawan
  • ******
  • Příspěvků: 5681
  • Karma: 42
    • Verze Delphi: W10 + Delphi 10.4 professional
Žiadna rada :'(  Ja už nemám čo čítať  :( Zožerú ma mrle  :)
W10 64b, Delphi 10.4, FireBird 3.05
Expert na kladenie nejasne formulovaných otázok.