Delphi XE2 a problém s ModalResult v DFM

vložil Radek Červinka 9. listopadu 2011 20:56

Byla objevena celkem nešťastná chyba ve VCL v XE2, ale která zasáhne mizivé procento uživatelů. Jedná se o to, že během integrace FireMonkey do Delphi došlo chybou k přečíslování 4 konstant pro ModalResult. A jelikož tyto konstanty jsou ukládány v DFM jako čísla a ne názvy, dojde při otevření staršího projektu, který tyto konstanty používají, v Delphi XE2 ke změně jejich významu a vice versa.

Naštěstí se jedná ale o ne moc používané konstanty: mrAll, mrNoToAll, mrYesToAll a mrClose. Pokud zásadně nastavujete návratové hodnoty z kódu nebo tyto konstanty nepoužíváte tak se nic neděje. Pokud si nejste jistí, zkuste použít scanner ModalResult v DFM (zároveň s obšírným popisem), který by měl toto detekovat.

Problém pravděpodobně nebude opraven, protože by to mohlo vést ještě k většímu zmatení. Workaround je nastavit tyto konstanty z kódu.

Tagy:

Praxe

Komentáře

9.8.2012 12:43:58 #

pepak

Pár upřesnění:

1) Ta chyba nijak nesouvisí s FireMonkey. Souvisí s tím, že v novějších Windows Microsoft rozšířil počet konstant typu idOK, idCancel apod. a XE2 se tomu přizpůsobily odpovídajícím mrOK, mrCancel atd. Potíž je v tom, že Delphi si už dříve definovalo několik svých soukromých konstant, které bohužel číselně navazovaly na Microsoftí řadu, takže když Microsoft přidal svoje konstanty s jiným významem, tak Embarcadero muselo ty svoje posunout (a nebo se smířit s rozdílným významem proti WinAPI).

2) Zásadní problém vidím v tom, že Embarcadero v XE2 tuto chybu z dřívějších Delphi zopakovalo, takže svoje soukromé konstanty *zase* navázalo na Microsoftí číselné řady. Tzn. lze očekávat, že ve Windows 8 nebo 9 budeme řešit přesně tu samou nekompatibilitu.

pepak

Komentování ukončeno

Naše nabídka

MVP
Ing. Radek Červinka - Embarcadero MVP
profil na linkedin, Twitter:@delphicz

Nabízím placené poradenství a konzultace v oblasti programování a vývoje SW.
Dále nabízíme i vývoj speciálního software na zakázku.

Neváhejte nás kontaktovat (i ohledně reklamy).

love Delphi

O Delphi.cz

Delphi je moderní RAD nástroj podporující tvorbu nativních aplikací pro platformu Win32, Win64, Mac OSX, Linux a na iPhone a Android.

Delphi.cz je nezávislý portál pro uživatele Delphi. Portál není koncipován pro úplné začátečníky, i když i ti se zde nebudou nudit, ale spíše na programátory, kteří již něco znají a chtějí své znalosti dále rozvíjet a sledovat novinky.

Poslední komentáře

Comment RSS

Dle měsíců