Autor Téma: Rozdeleni kodu pres Frames  (Přečteno 2444 krát)

Offline raul

  • Hrdina
  • ****
  • Příspěvků: 274
  • Karma: 15
    • Verze Delphi: FPC :D
Rozdeleni kodu pres Frames
« kdy: 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 :( )
Lazarus 1.6.3:), FPC, Intel/Arm, Windows/Linux

Online Radek Červinka

  • Administrátoři
  • Padawan
  • *****
  • Příspěvků: 2401
  • Karma: 103
    • Verze Delphi: D5,D2007, DXE, DXE2 + 2 poslední (Tokyo)
    • O Delphi v češtině
Re:Rozdeleni kodu pres Frames
« Odpověď #1 kdy: 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
Embarcadero MVP - Czech republic

Offline raul

  • Hrdina
  • ****
  • Příspěvků: 274
  • Karma: 15
    • Verze Delphi: FPC :D
Re:Rozdeleni kodu pres Frames
« Odpověď #2 kdy: 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.
Lazarus 1.6.3:), FPC, Intel/Arm, Windows/Linux

Offline raul

  • Hrdina
  • ****
  • Příspěvků: 274
  • Karma: 15
    • Verze Delphi: FPC :D
Re:Rozdeleni kodu pres Frames
« Odpověď #3 kdy: 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 ?
Lazarus 1.6.3:), FPC, Intel/Arm, Windows/Linux

Offline raul

  • Hrdina
  • ****
  • Příspěvků: 274
  • Karma: 15
    • Verze Delphi: FPC :D
Re:Rozdeleni kodu pres Frames
« Odpověď #4 kdy: 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;
Lazarus 1.6.3:), FPC, Intel/Arm, Windows/Linux

Offline tomak586

  • Nováček
  • *
  • Příspěvků: 16
  • Karma: 1
Re:Rozdeleni kodu pres Frames
« Odpověď #5 kdy: 16-10-2019, 01:23:44 »
V FMX je to trochu jine, podivej se tady

http://docwiki.embarcadero.com/CodeExamples/XE5/en/FMXEmbeddedForm_(Delphi)

Offline raul

  • Hrdina
  • ****
  • Příspěvků: 274
  • Karma: 15
    • Verze Delphi: FPC :D
Re:Rozdeleni kodu pres Frames
« Odpověď #6 kdy: 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.
Lazarus 1.6.3:), FPC, Intel/Arm, Windows/Linux

Offline pf1957

  • Padawan
  • ******
  • Příspěvků: 2623
  • Karma: 133
    • Verze Delphi: D2007, XE3, DX10
Re:Rozdeleni kodu pres Frames
« Odpověď #7 kdy: 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.


Offline JaroB

  • Guru
  • *****
  • Příspěvků: 973
  • Karma: 27
    • Verze Delphi: XE8, Seattle
Re:Rozdeleni kodu pres Frames
« Odpověď #8 kdy: 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++.

Offline vandrovnik

  • Guru
  • *****
  • Příspěvků: 836
  • Karma: 45
    • Verze Delphi: 10.3
Re:Rozdeleni kodu pres Frames
« Odpověď #9 kdy: 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
Reportováno 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, 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ě :-)

Offline ShaneZB

  • Nováček
  • *
  • Příspěvků: 21
  • Karma: 0
  • HJ-SOFT s.r.o.
    • Verze Delphi: Delphi 10
Re:Rozdeleni kodu pres Frames
« Odpověď #10 kdy: 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.