QuickeneR
Advanced Member | Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору Баг (3.18) Начиная с какого-то обновления в фасте перестали обрабатываться кодировки. Т.е. например делаешь отчет из досовской базы напрямую через TTable и TFrxDbDataset, ставишь по привычке у нужных Memo Font.Charset=OEM_CHARSET, а рисуются кракозяблы. Установка других кодировок, хоть ANSI, хоть китайских, на результат не влияет. Прослеженная причина - юникод. В нем разные символы имеют разные же коды, и нет ситуации, когда один и тот же символ может представляться разными кодами. Иначе говоря, юникод и кодировки - вещи несовместимые. Решение (хак) frxGraphicUtils.pas Код: procedure TfrxDrawText.DrawTextLine ... было ExtTextOutW(C.Handle, X + Round(add1 * SinA), Y + Round(add1 * CosA), FOptions, @FScaledRect, PWideChar(s) + j, i - j, @FTempArray[j + 1]); стало if C.Font.Charset=DEFAULT_CHARSET then ExtTextOutW(C.Handle, X + Round(add1 * SinA), Y + Round(add1 * CosA), FOptions, @FScaledRect, PWideChar(s) + j, i - j, @FTempArray[j + 1]) else ExtTextOut(C.Handle, X + Round(add1 * SinA), Y + Round(add1 * CosA), FOptions, @FScaledRect, PChar(String(s)) + j, i - j, nil); function TfrxHTMLTagsList.FillCharSpacingArray ... было (встречается два раза) if Win32Platform <> VER_PLATFORM_WIN32_NT then стало if (Win32Platform <> VER_PLATFORM_WIN32_NT) or (Canvas.Font.Charset<>DEFAULT_CHARSET) then | Добавлено: Баг (3.19.2) Попорчена работа с базовыми типами в фастскрипте. Объявляем функцию Код: Report.AddFunction('function MyFunc(key:string):boolean'); | и пытаемся ее использовать Код: procedure MasterData1OnBeforePrint(Sender: TfrxComponent); begin MasterData1.Visible:=MyFunc(<Dataset1."FIELD1">); end; | Получаем ошибку: Несовместимые типы Boolean и class boolean В 3.18 каждый скрипт был потомком (в смысле FParent) от fsGlobalUnit, в котором и объявлялись базовые типы (AddType('Boolean', fvtBool);). В 3.19.2 все объявления типов, переменных, функций хранятся в отдельных объектах, организованных в список. Их нужно добавлять в каждый вновь создаваемый TFsScript. Решение (хак) frxClass.pas Код: constructor TfrxReport.Create ... FScript := TfsScript.Create(nil); FScript.ExtendedCharset := True; добавить FScript.AddRTTI; |
|