Forum Delphi.cz

Delphi => Firemonkey => Téma založeno: raul 14-10-2019, 15:29:07

Název: Rozdeleni kodu pres Frames
Přispěvatel: raul 14-10-2019, 15:29:07
Zdar a silu,

nekde jsem zahledl info, ze s frames jsou problemy, nicmene nebylo to popsano hloubeji. Chci se tedy zeptat, odkud vitr vane a kde problemy cekat. Proc se ptam ? Stavim ted aplikaci pro obsluhu hw zarizeni, kde soucasti je i docela slozitejsi vizualizace vcetne nahledu z kamery apod. Vzal jsem tedy komponenty z hlavniho formu (tLayout obsahujici asi 30 dalsich layoutu, a dalsich prvku (prevazne circle, rectangle apod)) a vlozil je do zvlast frame s tim, ze mezi main formem a frame si vytvorim rozhrani podobne jednoduche komponente. Vse chodilo, dokud jsem neuzavrel delphi a neotevrel projekt znovu. Delphi ohlasili cannot create form a AV v fmx modulu. Mainform se dari i otevrit, ale samotny frame se jevi pouze jako unit, nelze prepnout na formular. Zkusil jsem to tedy znovu, odstranil nektere komponenty z frame, nicmene problem se opakoval. V druhem projektu takto frame pouzivam a vicemene bez nejakych podobnych excesi (projevy jsou jinde, ale to ted neresme, otevrit frame jde apod).

Pripadne jak jinak rozdelit kod, kdy hlavni form nabyva do delky kodu, includes pouzit nechci (nelze pak rozumne pouzivat kompletaci kodu), a vylozene rucne cely obsah frame vykreslovat take nechci (opet kvuli delce kodu, komponentam se nastavuje hafo parametru staticky, meni se vicemene jen pozice pripadne zapinaji efekty nad nimi).

Jsou tedy Frames pouzitelne, nebo se porozhlednout jinde - kde ?

Diky

P.S. Proc mam pocit, ze hafo veci neni v poslednich verzich delphi vubec dotazeno a ze pocty ruznych defektu narustaji ? (Kdysi jsem nadaval na VS, ktere obcas samovolne menilo kod, nicmene nyni se tyto projevy zacinaji objevovat i zde :( )
Název: Re:Rozdeleni kodu pres Frames
Přispěvatel: Radek Červinka 14-10-2019, 15:36:57

Jsou tedy Frames pouzitelne, nebo se porozhlednout jinde - kde ?


Frames jsou vždy jednou nohou problém, měl jsem s nimi problém v D5, D2007 a pak jsem to vzdal. Dobre reseni podle mne: https://delphi.cz/post/Nahrazeni-frames-za-vlozene-formulare.aspx (https://delphi.cz/post/Nahrazeni-frames-za-vlozene-formulare.aspx)
Název: Re:Rozdeleni kodu pres Frames
Přispěvatel: raul 14-10-2019, 15:43:51
Diky za odkaz. Zkusim. Btw nejaky duvod, proc to takto neni implementovano i s Frames ? Jako jestli toto funguje dobre, proc nekdo vymyslel kolo, ktere navic nefunguje.

Takto si de facto mohu pripravit aplikaci visualizatoru samotnou a posleze ji zanorit do skutecne aplikace, kde budou i prvky okolo. No, vypada to dobre, diky.
Název: Re:Rozdeleni kodu pres Frames
Přispěvatel: raul 14-10-2019, 17:59:50
Tak laboruju laboruju. Property Align, ControlStyle, ParentWindow ve FMX nemam, tak jsem je disabloval. Kdyz pridam vytvoreni subformu v OnCreate hlavniho formu, tak apliakce padne jiz pri spusteni (az po projeti OnCreate, z AutoCreate forms jsem subform vymazal). Kdyz zobrazuju subform v eventu onclick buttonu, tak se sice vykresli, ale mimo formu, primo na obrazovku.

Safr, nejakej nakop ?
Název: Re:Rozdeleni kodu pres Frames
Přispěvatel: raul 14-10-2019, 18:17:54
Prozatim vyreseno zapouzdrenim subformoveho obsahu do tLayout a zmenou Parentu zde :

class function TVisualiserForm.CreateAsSubform(AOwner: TCustomForm; AParent: TLayout): TVisualiserForm;
begin
  Result := TVisualiserForm.Create(AOwner);
  Result.Top := 0;
  Result.Left := 0;
  Result.mainLayout.Align := TAlignLayout.Client;
  Result.mainLayout.Parent := AParent;
  Result.BorderStyle := TFmxFormBorderStyle.None;
  Result.Invalidate;
end;
Název: Re:Rozdeleni kodu pres Frames
Přispěvatel: tomak586 16-10-2019, 01:23:44
V FMX je to trochu jine, podivej se tady

http://docwiki.embarcadero.com/CodeExamples/XE5/en/FMXEmbeddedForm_(Delphi)
Název: Re:Rozdeleni kodu pres Frames
Přispěvatel: raul 16-10-2019, 11:05:12
To je defacto podobny pristup jako ten, ke kteremu jsem dosel. Zmenit vlastnika vsech prvku - ja menim jen vlastnika mainLayout, ve kterem podrizene prvky mam.
Název: Re:Rozdeleni kodu pres Frames
Přispěvatel: pf1957 16-10-2019, 19:15:04
Vse chodilo, dokud jsem neuzavrel delphi a neotevrel projekt znovu. Delphi ohlasili cannot create form a AV v fmx modulu.
[...]
Jsou tedy Frames pouzitelne, nebo se porozhlednout jinde - kde ?
My jsme kdysi na nich postavili docela velkou rodinu VCL aplikaci a jestli si vzpominam, tak byly problemy predevsim v design-time podobne tem, co popisujes: aby IDE spravne fungovalo, tak
a) frame musel byt pridan na paletu
b) unit s frame, ktery pouziva formular, musela byt otevrena v IDE pred vlastnim formularem, jinak to koncilo cannot create nebo tak necim
c) kdyz jsi v IDE nejakou unit s frame na formu zavrel a pak dal Save, tak IDE vynulovalo OnXxx eventy, ktere byly na frame
d) mozna jeste neco, na co uz si nevzpominam

A pak tam byl koncepcni problem s action listy: pokud mel frame nejake lokalni akce ve vlastnim action listu a jiny frame take a formular take, tak se akce nemerguji jako polozky menu v pripade MDI aplikaci, ale ruzne koliduji a chovalo se to dost nepredvidatelne.

Takze vsechny aplikace, ktere jsme predelavali nebo zacinali znovu jsme uz na framech nedelali a pouzilil jsme vnorene formy. Tim se vyresily problemy s IDE, problemy s reusibilitou akci zustaly.
Ale ber to s rezervou, uz je to pekna radka let a HOSIP.

Název: Re:Rozdeleni kodu pres Frames
Přispěvatel: JaroB 16-10-2019, 22:07:08
Já byl rád, že jsem se frames zbavil a dal je pryč ze všech svých aplikací jak v delphi, tak c++.
Název: Re:Rozdeleni kodu pres Frames
Přispěvatel: vandrovnik 16-10-2019, 23:33:19
Frames používám. Aktuální "radosti" s nimi:

- po každé aktualizaci Delphi se nahodile stane, že v nějakém projektu Delphi najednou žádné frame nenabízí. https://stackoverflow.com/questions/50067855/delphi-tframe-error-no-frames-are-available-to-insert (https://stackoverflow.com/questions/50067855/delphi-tframe-error-no-frames-are-available-to-insert)
Reportováno https://quality.embarcadero.com/browse/RSP-23903 (https://quality.embarcadero.com/browse/RSP-23903), neopraveno.

- když frame obsahuje TVirtualImageList a je otevřený frame i formulář, který na něj odkazuje, IDE to těžce nese :) Reportováno https://quality.embarcadero.com/browse/RSP-23437 (https://quality.embarcadero.com/browse/RSP-23437), neopraveno... Problémy to dělá i nahodile při ukládání, takže se snažím nemít zároveň otevřený frame a formulář, který na něj odkazuje.

Jiné problémy s nimi aktuálně nemám, ale možná to je tím, že už podvědomě s nimi pracuju opatrně :-)
Název: Re:Rozdeleni kodu pres Frames
Přispěvatel: ShaneZB 18-11-2019, 10:19:41
V našem SW frames používáme. Ale šli jsem cestou vytváření na formuláři až při Create (v runtime). A žádný problém s tím nemáme.