Napadlo mne ještě pár drobností o XE2, co by se někomu mohlo hodit.
System.UITypes
Nejsem si jist zda jsem to již psal, ale je nová jednotka System.UITypes, která obsahuje deklarace různých typů z UI, dříve v různých jednotkách a v původních jednotkách je nyní jen alias.
třeba Vcl.Forms:
const
caNone = System.UITypes.TCloseAction.caNone;
caHide = System.UITypes.TCloseAction.caHide;
caFree = System.UITypes.TCloseAction.caFree;
caMinimize = System.UITypes.TCloseAction.caMinimize;
{ TScrollingWinControl }
wsNormal = System.UITypes.TWindowState.wsNormal;
wsMinimized = System.UITypes.TWindowState.wsMinimized;
wsMaximized = System.UITypes.TWindowState.wsMaximized;
biSystemMenu = System.UITypes.TBorderIcon.biSystemMenu;
biMinimize = System.UITypes.TBorderIcon.biMinimize;
biMaximize = System.UITypes.TBorderIcon.biMaximize;
biHelp = System.UITypes.TBorderIcon.biHelp;
TThread.TerminatedSet
V třídě TThread přibyla kromě jiného virtuální metoda TerminatedSet. Nyní je implementace Terminate následující
procedure TThread.Terminate;
begin
if FExternalThread then
raise EThread.CreateRes(@SThreadExternalTerminate);
FTerminated := True;
TerminatedSet;
end;
tj. lze jednodušeji reagovat na ukončení vlákna.
Něco o 64bit
Pokud uvažujete o 64bit verzi programu tak Vám kompilátor při překladu může zahlásit pár problémů tohoto typu:
// dříve
Edit1.Tag := Integer (Label1);
// správně
Edit1.Tag := NativeInt (Label1);
// dříve
PostMessage (Handle, WM_APP, 0, Integer (Button2));
// správně
PostMessage (Handle, WM_APP, 0, LParam (Button2));
nebo
SendMessage(FEdit.Handle, EM_SETRECTNP, 0, Integer(@R));
SendMessage(FEdit.Handle, EM_SETRECTNP, 0, LPARAM(@R));
Tag je nyní NativeInt - velikost v závislosti na platformě, a hodně API mají nyní typově striktní deklaraci, která je korektní napříč platformami. Ale nebojte se - on se kompilátor ozve.
Obj a 64bit
Jelikož je v části RTL použito OBJ (např. v zlib), zajímalo mne jak to bude na 64bit verzi RTL (jelikož 64bit verze C++Builderu neexistuje). Podle některých náznaků tak nyní Delphi kompilátor (resp. linker) umí linkovat COFF soubory (tj. OBJ z VC++).
System.Types
Pozor: nově jsou záznamy TRect, TPoint, TSize a nové (float varianty) TPointF, TSizeF, TRectF z jednotky System.Types rozšířeny o metody, což hlavně v případě TRect může v kombinaci s with způsobit problém.
Jedná se o to, že nově má TRect mimo jiné property Height a Width, tj. pokud máte kód jako
procedure TForm1.Draw;
…
begin
with Rect do
begin
x := Width + 10;
end;
end;
tj. předtím Width byla property formuláře, nyní je Width property TRect. Takže bacha na Rect v kombinaci s with!