среда, сентября 24, 2008

Delphi 2009 aka Tiburon. TEncoding.

На домашней страничке выложен модуль Common.Encodings расширяющий возможности стандартного класса TEncoding. Модуль содержит class helper для TEncoding и несколько вспомогательных advanced records.

Примеры использования: 

1.) Перечисление доступных кодировок

Var

ei : TEncodingInfo;

Begin

For ei In TEncoding.Encodings Do
If ei.IsAvailable Then
WriteLn('codepage: ', ei.CodePage, ' name: ', ei.Name);

End;

2.) Создание кодировки по имени:

 TEncoding.Encodings.ByName('utf-16').GetEncoding;

или

 TEncoding.GetEncoding('utf-16');

3.) Создание кодировки по номеру кодовой страницы:

 TEncoding.Encodings.ByCodePage(CP_UTF16_BE).GetEncoding;

или

 TEncoding.GetEncoding(CP_UTF16_BE);

4.) Получение информации о существющей кодировке:

 With TEncoding.UTF8.GetInfo Do
WriteLn('codepage: ', CodePage, ' name: ', Name, ' display name: ', DisplayName);

пятница, сентября 19, 2008

Delphi 2009. Вкратце.

Юникод+дженерики+анонимные методы это все понятно.

Порадовала скорость среды! И особенно скорость CodeInsight (несмотря на то, что я его все равно всегда отключаю)

Наконец-то они научились различать Implicit и Explicit для записей в нативе (2007 не пробовал, может и там уже было). Но вот редактор сильно подкачал, разучившись (в 2006 он и не сильно-то умел) перемещаться по Ctrl+Shift+Up/Down между декларацией и реализацией перегруженных операторов записи (правда, я тестировал на 12.0.3155.16733, может в релизе и поправили), а также разучился (для перегруженных операторов опять же) по Ctrl+Shift+C создавать макет метода по описанию.

Появился UInt64 -- беззнаковое 64битное число.

BeginThread и TInterfaceList по-прежнему имеют потенциальные утечки.

Неработает передача Int64 в параметре диспетчеризуемого метода (вызов метода от вариантной переменной). Точнее, если передавать переменную типа Int64 все работает, а если значение Int64(1024) -- нет.

Exception обзавелся потенциальной поддержкой стек-трейсинга, но только потенциальной :)

Очень порадовал {$POINTERMATH}

В комментариях исходников встречается sysmac.h. Интересно, это то о чем я думаю...?

Порадовал хелпер для TRTLCriticalSection (syncobjs.pas)

Порадовал обновленный ZLib

Огорчает нелепость использования системных InterlockedCompareExchangePointer (и прочих Interlocked...) при наличии нативных в system.pas

Ribbon огорчил неаккуратными скинами (ждем редактора :) или сторонних, качественных скинов) и моргающей отрисовкой. DoubleBuffered Ribbon-контрола  не помогает, а буферизовать форму то еще извращение.

TLinkLabel неюзабельна совершенно, т.к. на системах младше XP, линки распознаваться не будут и пользователь будет видеть разметку.