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

Offline pf1957

  • Padawan
  • ******
  • Příspěvků: 3285
  • 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ů: 3285
  • 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ů: 3285
  • 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ů: 2969
  • 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ů: 2969
  • 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ů: 2969
  • 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ů: 3285
  • 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ů: 2969
  • 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