Autor Téma: Delphi 11, nekompatibilta DFM  (Přečteno 867 krát)

Offline JaroB

  • Guru
  • *****
  • Příspěvků: 1062
  • Karma: 29
    • Verze Delphi: XE8, Sydney
Delphi 11, nekompatibilta DFM
« kdy: 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?

Offline pf1957

  • Padawan
  • ******
  • Příspěvků: 3291
  • Karma: 139
    • Verze Delphi: D2007, XE3, DX10
Re:Delphi 11, nekompatibilta DFM
« Odpověď #1 kdy: 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.

Offline JaroB

  • Guru
  • *****
  • Příspěvků: 1062
  • Karma: 29
    • Verze Delphi: XE8, Sydney
Re:Delphi 11, nekompatibilta DFM
« Odpověď #2 kdy: 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... :(

Offline Jan Fiala

  • Plnoletý
  • ***
  • Příspěvků: 236
  • Karma: 3
    • Verze Delphi: 10.4.1
    • PSPad editor
Re:Delphi 11, nekompatibilta DFM
« Odpověď #3 kdy: 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

Offline JaroB

  • Guru
  • *****
  • Příspěvků: 1062
  • Karma: 29
    • Verze Delphi: XE8, Sydney
Re:Delphi 11, nekompatibilta DFM
« Odpověď #4 kdy: 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á)

Offline Radek Červinka

  • Administrátoři
  • Padawan
  • *****
  • Příspěvků: 2982
  • Karma: 108
    • Verze Delphi: D2007, DXE + 2 poslední
    • O Delphi v češtině
Re:Delphi 11, nekompatibilta DFM
« Odpověď #5 kdy: 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.
Embarcadero MVP - Czech republic

Offline Radek Červinka

  • Administrátoři
  • Padawan
  • *****
  • Příspěvků: 2982
  • Karma: 108
    • Verze Delphi: D2007, DXE + 2 poslední
    • O Delphi v češtině
Re:Delphi 11, nekompatibilta DFM
« Odpověď #6 kdy: 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.  
Embarcadero MVP - Czech republic

Offline JaroB

  • Guru
  • *****
  • Příspěvků: 1062
  • Karma: 29
    • Verze Delphi: XE8, Sydney
Re:Delphi 11, nekompatibilta DFM
« Odpověď #7 kdy: 30-09-2021, 10:33:33 »
Zatím nemám, je to velký projekt ze kterého to musím vyseknout

Offline JaroB

  • Guru
  • *****
  • Příspěvků: 1062
  • Karma: 29
    • Verze Delphi: XE8, Sydney
Re:Delphi 11, nekompatibilta DFM
« Odpověď #8 kdy: 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.  

Online Jirka

  • Hrdina
  • ****
  • Příspěvků: 436
  • Karma: 9
    • Verze Delphi: XE2
Re:Delphi 11, nekompatibilta DFM
« Odpověď #9 kdy: 02-10-2021, 12:49:50 »

Offline František

  • Guru
  • *****
  • Příspěvků: 704
  • Karma: 7
    • Verze Delphi: primárne v XE5, občas 10.2.3 comunity

Offline JaroB

  • Guru
  • *****
  • Příspěvků: 1062
  • Karma: 29
    • Verze Delphi: XE8, Sydney
Re:Delphi 11, nekompatibilta DFM
« Odpověď #11 kdy: 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.

Offline mics

  • Nováček
  • *
  • Příspěvků: 10
  • Karma: 0
    • Verze Delphi: XE, 10.4.2, 11
Re:Delphi 11, nekompatibilta DFM
« Odpověď #12 kdy: 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?

Offline Radek Červinka

  • Administrátoři
  • Padawan
  • *****
  • Příspěvků: 2982
  • Karma: 108
    • Verze Delphi: D2007, DXE + 2 poslední
    • O Delphi v češtině
Re:Delphi 11, nekompatibilta DFM
« Odpověď #13 kdy: 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"
Embarcadero MVP - Czech republic

Offline JaroB

  • Guru
  • *****
  • Příspěvků: 1062
  • Karma: 29
    • Verze Delphi: XE8, Sydney
Re:Delphi 11, nekompatibilta DFM
« Odpověď #14 kdy: 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)

Offline pf1957

  • Padawan
  • ******
  • Příspěvků: 3291
  • Karma: 139
    • Verze Delphi: D2007, XE3, DX10
Re:Delphi 11, nekompatibilta DFM
« Odpověď #15 kdy: 05-10-2021, 09:53:11 »
Excellent
Rated 1 time
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.

Offline pf1957

  • Padawan
  • ******
  • Příspěvků: 3291
  • Karma: 139
    • Verze Delphi: D2007, XE3, DX10
Re:Delphi 11, nekompatibilta DFM
« Odpověď #16 kdy: 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?

Offline JaroB

  • Guru
  • *****
  • Příspěvků: 1062
  • Karma: 29
    • Verze Delphi: XE8, Sydney
Re:Delphi 11, nekompatibilta DFM
« Odpověď #17 kdy: 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.

Offline pf1957

  • Padawan
  • ******
  • Příspěvků: 3291
  • Karma: 139
    • Verze Delphi: D2007, XE3, DX10
Re:Delphi 11, nekompatibilta DFM
« Odpověď #18 kdy: 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.



Offline Radek Červinka

  • Administrátoři
  • Padawan
  • *****
  • Příspěvků: 2982
  • Karma: 108
    • Verze Delphi: D2007, DXE + 2 poslední
    • O Delphi v češtině
Re:Delphi 11, nekompatibilta DFM
« Odpověď #19 kdy: 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
Embarcadero MVP - Czech republic

Offline JaroB

  • Guru
  • *****
  • Příspěvků: 1062
  • Karma: 29
    • Verze Delphi: XE8, Sydney
Re:Delphi 11, nekompatibilta DFM
« Odpověď #20 kdy: 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í. :(

Offline mics

  • Nováček
  • *
  • Příspěvků: 10
  • Karma: 0
    • Verze Delphi: XE, 10.4.2, 11
Re:Delphi 11, nekompatibilta DFM
« Odpověď #21 kdy: 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í.

Offline Radek Červinka

  • Administrátoři
  • Padawan
  • *****
  • Příspěvků: 2982
  • Karma: 108
    • Verze Delphi: D2007, DXE + 2 poslední
    • O Delphi v češtině
Re:Delphi 11, nekompatibilta DFM
« Odpověď #22 kdy: 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...
Embarcadero MVP - Czech republic

Offline mics

  • Nováček
  • *
  • Příspěvků: 10
  • Karma: 0
    • Verze Delphi: XE, 10.4.2, 11
Re:Delphi 11, nekompatibilta DFM
« Odpověď #23 kdy: 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.

Offline Radek Červinka

  • Administrátoři
  • Padawan
  • *****
  • Příspěvků: 2982
  • Karma: 108
    • Verze Delphi: D2007, DXE + 2 poslední
    • O Delphi v češtině
Re:Delphi 11, nekompatibilta DFM
« Odpověď #24 kdy: 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.
Embarcadero MVP - Czech republic

Offline pf1957

  • Padawan
  • ******
  • Příspěvků: 3291
  • Karma: 139
    • Verze Delphi: D2007, XE3, DX10
Re:Delphi 11, nekompatibilta DFM
« Odpověď #25 kdy: 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.

Offline Radek Červinka

  • Administrátoři
  • Padawan
  • *****
  • Příspěvků: 2982
  • Karma: 108
    • Verze Delphi: D2007, DXE + 2 poslední
    • O Delphi v češtině
Re:Delphi 11, nekompatibilta DFM
« Odpověď #26 kdy: 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.
Embarcadero MVP - Czech republic