Forum Delphi.cz

Delphi => Obecné => Téma založeno: JaroB 30-09-2021, 08:03:40

Název: Delphi 11, nekompatibilta DFM
Přispěvatel: JaroB 30-09-2021, 08:03:40
Při otevření projektů pocházejících ze Sydney dochází k chybě "Range check error" a chyba vede k metodě Paint komponetu třetích stran, potomku TCustomControl, který se logicky nepřekreslí. Pokud je ale vložen na formulář znovu, tak už k chybě nedochází. Domníval jsem se, že je problém v OldCreateOrder, který zmizel. chyba je ale někde jinde. Tušil by někdo?
Název: Re:Delphi 11, nekompatibilta DFM
Přispěvatel: pf1957 30-09-2021, 08:46:18
Tohle se obecne stava, kdyz pridaji nejakou novou property, ktera ve starem .DFM neni. IMHO nejjednoduzsi bude porovnat, v cem se lisi zaznam ve starem/novem .DFM u stejne komponenty a nejspis rucne to do vsech inkriminovanych .DFM doplnit.
Název: Re:Delphi 11, nekompatibilta DFM
Přispěvatel: JaroB 30-09-2021, 09:01:19
Díky
Ono se toho asi objeví víc. Teďka zjišťuji, že při vytvoření subformu se ignoruje parent a strká se všechno na mainscreen, zřejmě to bude potřebovat nějakou korekci... :(
Název: Re:Delphi 11, nekompatibilta DFM
Přispěvatel: Jan Fiala 30-09-2021, 09:14:56
Ještě pozor na diakritiku. V D11 se při otevření starého DFM/PAS objeví dotaz při detekci znaků s diakritikou, zda se má zkonvertovat do UTF-8. Pokud to nepovolíš, rozdrbe to diakritiku, protože kašle na nastavení systému pro ANSI
Název: Re:Delphi 11, nekompatibilta DFM
Přispěvatel: JaroB 30-09-2021, 09:24:20
To mi nehlásí (všechny DFM mám v textové formě).
Jen nějak divně přepisuje parametry z parenta na subform (Default monitor na to nemá vliv, takže když je main form na vedlejší obrazovce, pak subform visí na hlavní v pozici 0,0, což je podivné. Sydney to nedělá)
Název: Re:Delphi 11, nekompatibilta DFM
Přispěvatel: Radek Červinka 30-09-2021, 10:30:12
Díky
Ono se toho asi objeví víc. Teďka zjišťuji, že při vytvoření subformu se ignoruje parent a strká se všechno na mainscreen, zřejmě to bude potřebovat nějakou korekci... :(

Mas nejaky testovaci projekt? Ne ze bych ti neveril, ale toho by si nekdo behem beta vsiml.
Název: Re:Delphi 11, nekompatibilta DFM
Přispěvatel: Radek Červinka 30-09-2021, 10:32:39
Domníval jsem se, že je problém v OldCreateOrder, který zmizel.

Ale to je podchyceno:

Kód: Delphi [Vybrat]
  1. procedure TCustomForm.DefineProperties(Filer: TFiler);
  2. begin
  3.   inherited DefineProperties(Filer);
  4.   Filer.DefineProperty('TextHeight', ReadTextHeight, WriteTextHeight, not IsControl);
  5.   Filer.DefineProperty('IgnoreFontProperty', ReadIgnoreFontProperty, nil, False);
  6.   Filer.DefineProperty('OldCreateOrder', IgnoreIdent, nil, False);
  7. end;
  8.  
Název: Re:Delphi 11, nekompatibilta DFM
Přispěvatel: JaroB 30-09-2021, 10:33:33
Zatím nemám, je to velký projekt ze kterého to musím vyseknout
Název: Re:Delphi 11, nekompatibilta DFM
Přispěvatel: JaroB 30-09-2021, 10:36:56
Pro vytvoření subform používám tuhle konstrukci

Kód: Delphi [Vybrat]
  1. class function TMyFlow.CreateAsSubform(AOwner: TCustomForm; AParent: TPanel): TMyFlow;
  2. begin
  3.   Result := TMyFlow.Create(AOwner);
  4.   Result.Parent := AParent;
  5.   Result.ParentWindow := AParent.Handle;
  6.   Result.Color := AParent.Color;
  7.   Result.Top := 0;
  8.   Result.Left := 0;
  9.   Result.Align := alClient;
  10.   Result.BorderStyle := Forms.bsNone;
  11.   Result.ControlStyle := Result.ControlStyle + [csParentBackground];
  12.   Result.Invalidate;
  13. end;
  14.  
Název: Re:Delphi 11, nekompatibilta DFM
Přispěvatel: Jirka 02-10-2021, 12:49:50
Co zkusit toto
https://www.idefixpack.de/blog/ide-tools/dfmcheck/ (https://www.idefixpack.de/blog/ide-tools/dfmcheck/)
Název: Re:Delphi 11, nekompatibilta DFM
Přispěvatel: František 04-10-2021, 08:47:30
Co zkusit toto
https://www.idefixpack.de/blog/ide-tools/dfmcheck/ (https://www.idefixpack.de/blog/ide-tools/dfmcheck/)
pomohlo?
Název: Re:Delphi 11, nekompatibilta DFM
Přispěvatel: JaroB 04-10-2021, 08:56:23
Já si teďka myslím, že to asi bude nějaký problém při překreslování legacy komponent, které jsou low level vázány na DC (jsou použité jako prapředci na subforms).
V tomto případě je device context nějak divně definovaný a proto překreslení padne do chyby. Chce to ještě nějaké výzkumy...
Zajímavé je, že až po Sydney to nevadilo.
Název: Re:Delphi 11, nekompatibilta DFM
Přispěvatel: mics 05-10-2021, 09:33:54
Tak také přispěju svou troškou do mlýna - mám podobný problém, ale u Firemonkey projektu, který postupně prochází upgrady již od dob XE6 (tuším). Až do 10.4.2 naprosto bez problému, ale D11 projekt ani neotevře - konkrétně celé IDE zamrzne při otevírání libovolného FMX formu. Zjistil jsem, že funguje zajímavý workaround - nejprve otevřít nový Firemonkey projekt (tedy otevřít prázdný FMX form), projekt zavřít a následně již jde i otevřít i ten původní projekt. Každopádně pracovat se s tím stejně nedá, pže např. při kliknutí pravým tlačítkem v okně s projekty pro kompilaci, build apod. opět celé IDE zamrzne a už se nevzpamatuje  :( .

Je to na počítači společně s 10.4.2 a XE, zkusil jsem D11 znovu přeinstalovat, ale chování je pořád stejné.

Jediné co mě ještě napadlo je zkusit nainstalovat D11 na čisté WIN, ale na to jsem zatím neměl čas. Nenapadá Vás někoho co by to mohlo způsobovat?
Název: Re:Delphi 11, nekompatibilta DFM
Přispěvatel: Radek Červinka 05-10-2021, 09:43:32
Tak také přispěju svou troškou do mlýna - mám podobný problém, ale u Firemonkey projektu, který postupně prochází upgrady již od dob XE6 (tuším). Až do 10.4.2 naprosto bez problému, ale D11 projekt ani neotevře - konkrétně celé IDE zamrzne při otevírání libovolného FMX formu. Zjistil jsem, že funguje zajímavý workaround - nejprve otevřít nový Firemonkey projekt (tedy otevřít prázdný FMX form), projekt zavřít a následně již jde i otevřít i ten původní projekt. Každopádně pracovat se s tím stejně nedá, pže např. při kliknutí pravým tlačítkem v okně s projekty pro kompilaci, build apod. opět celé IDE zamrzne a už se nevzpamatuje  :( .

Je to na počítači společně s 10.4.2 a XE, zkusil jsem D11 znovu přeinstalovat, ale chování je pořád stejné.

Jediné co mě ještě napadlo je zkusit nainstalovat D11 na čisté WIN, ale na to jsem zatím neměl čas. Nenapadá Vás někoho co by to mohlo způsobovat?

Divne, mam na pocitaci jak XE tak 10.4.2 a chova se to normalne. Dela ti to jen pri FMX, nebo i pri VCL? Mas otevrene okno Mobile Preview?

Zkus "C:\Program Files (x86)\Embarcadero\Studio\22.0\bin\bds.exe" "/highdpi:unaware" "-pDelphi"
Název: Re:Delphi 11, nekompatibilta DFM
Přispěvatel: JaroB 05-10-2021, 09:50:11
Upřesním chyby.
Jedna vzniká za běhu při použití subforms (jakoby zapomněl, kdo je parent a strká subform do plochy na souřadnice [0,0] mainscreenu).
A druhá v designmódu, po otevření ukáže RangeError a některé prvky nepřekreslí (do nového projektu ale vykresluje správně, tam je zřejmě device context problém, v runtime je to ale OK; v souboru DFM nejsou odlišnosti od starších)
Název: Re:Delphi 11, nekompatibilta DFM
Přispěvatel: pf1957 05-10-2021, 09:53:11
funguje zajímavý workaround - nejprve otevřít nový Firemonkey projekt (tedy otevřít prázdný FMX form), projekt zavřít a následně již jde i otevřít i ten původní projekt.
A nezkusil jsi pri nespustenem Delphi smazat u projektu vsechen balast, ktery je vysledkem vlastni cinnosti Delphi tj. mimo .dcu, .obj take ruzne .dsk ev. .dproj aj. soubory, ktere si vytvari vlastni Delphi?

Treba nesmazani souboru .user ze starsi verze VS dokaze natropit taky peknou ducharinu.
Název: Re:Delphi 11, nekompatibilta DFM
Přispěvatel: pf1957 05-10-2021, 09:59:09
Jedna vzniká za běhu při použití subforms (jakoby zapomněl, kdo je parent a strká subform do plochy na souřadnice [0,0] mainscreenu).
A nepamatuje si to nekde nejake handle/context? Pak staci nejake pridane RecreateWnd...

Citace
A druhá v designmódu, po otevření ukáže RangeError a některé prvky nepřekreslí (do nového projektu ale vykresluje správně, tam je zřejmě device context problém, v runtime je to ale OK; v souboru DFM nejsou odlišnosti od starších)
No a z toho RangeError nedokazes urcit bliz, co se mu nelibi?
Název: Re:Delphi 11, nekompatibilta DFM
Přispěvatel: JaroB 05-10-2021, 10:06:14
Pro vytvoření subform používám kód, viz výše.
V debug módu ukazuje všechno v pořádku, ale nakonec to po Show zobrazí na [0,0,] main-screenu. To žádná předchozí verze Delphi nedělala.
Název: Re:Delphi 11, nekompatibilta DFM
Přispěvatel: pf1957 05-10-2021, 10:23:19
Pro vytvoření subform používám kód, viz výše.
V debug módu ukazuje všechno v pořádku, ale nakonec to po Show zobrazí na [0,0,] main-screenu. To žádná předchozí verze Delphi nedělala.
Asi by ses mel myslenkove odpoutat od toho, ze to zadna predchozi verze nedelala - to ti k nalezeni priciny nepomuze ;-)

No prave: ten kod je "staticky" z doby kontrukce, ale je mozne, ze nejake to "prevlekani kabatu" vlivem stylu a buhvi ceho nejake to recreate parent okna udela jeste pozdeji...

V kazdem pripade bych si overridnul u inkriminovanych oken CreateWindowHandle a zalogoval si nazev okna a jeho handle. Mozna se budes muset nejak povesit na CM_RECREATEWND nebo jak se to jmenuje, aby sis aktualizoval parent handle.

Uz si to nepamatuju, co jsem se hrabal nekde ve vnitrnostech VCL, tak to ber s rezervou. Ale IMHO, ze to pise na desktop indikuje, ze to nema handle resp. device context.


Název: Re:Delphi 11, nekompatibilta DFM
Přispěvatel: Radek Červinka 05-10-2021, 10:49:49
Pro vytvoření subform používám kód, viz výše.
V debug módu ukazuje všechno v pořádku, ale nakonec to po Show zobrazí na [0,0,] main-screenu. To žádná předchozí verze Delphi nedělala.
Asi by ses mel myslenkove odpoutat od toho, ze to zadna predchozi verze nedelala - to ti k nalezeni priciny nepomuze ;-)

No prave: ten kod je "staticky" z doby kontrukce, ale je mozne, ze nejake to "prevlekani kabatu" vlivem stylu a buhvi ceho nejake to recreate parent okna udela jeste pozdeji...


Hlavní změny v control jsou k vuli lepsi podpore DPI, lepsi podpore RemoteSession (veci ohledne double bufferingu a zamykani kresleni),
porovnej TControl.SetParent, TWinControl.CreateHandle a koukni na TControl.GetIsDrawingLocked

Ted ti asi vice nepomuzu
Název: Re:Delphi 11, nekompatibilta DFM
Přispěvatel: JaroB 05-10-2021, 12:22:08
Tak zatím to vypadá, že se trošičku jinak posílají zprávy a asi v jiném pořadí se zpracovávají, což má vliv na zobrazení. RangeError spadne na zprávu, která je zdánlivě poslána dvakrát. A chová se to spíš jako vnější výjimka před anebo až po překreslení prvku (někdy vidět je a někdy není).
V Sydney je to naprosto korektní. :(
Název: Re:Delphi 11, nekompatibilta DFM
Přispěvatel: mics 05-10-2021, 13:39:09

Divne, mam na pocitaci jak XE tak 10.4.2 a chova se to normalne. Dela ti to jen pri FMX, nebo i pri VCL? Mas otevrene okno Mobile Preview?

Zkus "C:\Program Files (x86)\Embarcadero\Studio\22.0\bin\bds.exe" "/highdpi:unaware" "-pDelphi"



S tímto se to chová stále stejně :(


A nezkusil jsi pri nespustenem Delphi smazat u projektu vsechen balast, ktery je vysledkem vlastni cinnosti Delphi tj. mimo .dcu, .obj take ruzne .dsk ev. .dproj aj. soubory, ktere si vytvari vlastni Delphi?

Treba nesmazani souboru .user ze starsi verze VS dokaze natropit taky peknou ducharinu.

Toto na první dobrou vypadá, že zabralo - mohlo mě to napadnout - díky moc za nakopnutí.
Název: Re:Delphi 11, nekompatibilta DFM
Přispěvatel: Radek Červinka 05-10-2021, 14:05:16
Toto na první dobrou vypadá, že zabralo - mohlo mě to napadnout - díky moc za nakopnutí.

A nemuzes to porovnat co se zmenilo? Aspon pro zaznam...
Název: Re:Delphi 11, nekompatibilta DFM
Přispěvatel: mics 05-10-2021, 14:41:18
A nemuzes to porovnat co se zmenilo? Aspon pro zaznam...

Liší se pouze .local a .identcache soubory, v .local se někde liší cesty (přesunul jsem projekt jinam pro test), u některých projektů je nový .local prázdný, ve starém jsou nějaké <transaction> záznamy. Identcache soubory se na první pohled liší mnohem více, i když možná je to opět pouze cestami a také vypadá, že je úplně odlišné řádkování, tzn. tam se těžko hledá nějaký rozdíl.
Název: Re:Delphi 11, nekompatibilta DFM
Přispěvatel: Radek Červinka 05-10-2021, 15:11:44
A nemuzes to porovnat co se zmenilo? Aspon pro zaznam...

Liší se pouze .local a .identcache soubory, v .local se někde liší cesty (přesunul jsem projekt jinam pro test), u některých projektů je nový .local prázdný, ve starém jsou nějaké <transaction> záznamy. Identcache soubory se na první pohled liší mnohem více, i když možná je to opět pouze cestami a také vypadá, že je úplně odlišné řádkování, tzn. tam se těžko hledá nějaký rozdíl.

Dik, identCache by mel byt jen cache identifikatoru a je mozne ze to fakt IDE zblblo kdyz se na to spolehalo.
Název: Re:Delphi 11, nekompatibilta DFM
Přispěvatel: pf1957 05-10-2021, 15:52:38
A nemuzes to porovnat co se zmenilo? Aspon pro zaznam...
To asi moc nepujde, protoze to bude nejaka binarni reprezentace persistentnich dat, neco se zmenilo a nikdo se nezabyva zpetnou kompatibilitou.
Název: Re:Delphi 11, nekompatibilta DFM
Přispěvatel: Radek Červinka 05-10-2021, 16:14:35
A nemuzes to porovnat co se zmenilo? Aspon pro zaznam...
To asi moc nepujde, protoze to bude nejaka binarni reprezentace persistentnich dat, neco se zmenilo a nikdo se nezabyva zpetnou kompatibilitou.

Myslel jsem to spise tak, ze co smazal za soubory :-) Uz odpovedel.