Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
KANSoftWare

Решение проблем с VCL Styles в Rad Studio XE5

Delphi , Базы данных , Отчеты

Решение проблем с VCL Styles в Rad Studio XE5

Если вы недавно обновились с Delphi 6 до Rad Studio XE5, вы, возможно, столкнулись с проблемами, связанными с новой функцией VCL Styles. В данной статье мы рассмотрим решение двух основных проблем, с которыми вы можете столкнуться при использовании VCL Styles с FastReport 4.

Проблема 1: Белая граница вокруг панели инструментов

При использовании VCL Styles панель инструментов может получить белую границу вокруг нее. Чтобы решить эту проблему, вам нужно создать новый стилевой хоук и переопределить процедуру PaintNC, как показано в следующем коде:

type
  TToolBarStyleHookEx = class(TToolBarStyleHook)
  protected
    procedure PaintNC(Canvas: TCanvas); override;
  end;

{ TToolBarStyleHookEx }
procedure TToolBarStyleHookEx.PaintNC(Canvas: TCanvas);
var
  Details: TThemedElementDetails;
  LStyle: TCustomStyleServices;
  R: TRect;
begin
  if TToolBar(Control).BorderWidth > 0 then
  begin
    LStyle := StyleServices;
    R := Rect(0, 0, Control.Width, Control.Height);
    Details.Element := teToolBar;
    Details.Part := 0;
    Details.State := 0;
    if LStyle.HasTransparentParts(Details) then
      LStyle.DrawParentBackground(Handle, Canvas.Handle, Details, False);
    LStyle.DrawElement(Canvas.Handle, Details, R);
  end;
  inherited;
end;

initialization
  TCustomStyleEngine.RegisterStyleHook(TToolBar, TToolBarStyleHookEx);

Проблема 2: Неверное выравнивание или позиционирование элементов управления в диалоге печати и других элементах

При использовании VCL Styles элементы управления в диалоге печати и других элементах могут быть неверно выровнены или positioned. Для решения этой проблемы у вас есть три альтернативы:

  1. Отредактируйте файл frxPrintDialog и увеличьте ширину формы.
  2. Пatches для стилевого хоука формы.
  3. Измените ширину диалога печати во время выполнения.

Вот пример кода, который меняет ширину диалога печати во время выполнения с помощью хоука HCBT_ACTIVATE:

var
  hhk: HHOOK;

function CBT_FUNC(nCode: Integer; wParam: WPARAM; lParam: LPARAM): LRESULT; stdcall;
const
  ClassNameBufferSize = 1024;
var
  hWindow: HWND;
  RetVal: Integer;
  ClassNameBuffer: Array[0..ClassNameBufferSize-1] of Char;
  i: integer;
begin
  Result := CallNextHookEx(hhk, nCode, wParam, lParam);
  if nCode < 0 then exit;
  case nCode of
    HCBT_ACTIVATE:
    begin
      hWindow := HWND(wParam);
      if (hWindow > 0) then
      begin
        RetVal := GetClassName(wParam, ClassNameBuffer, SizeOf(ClassNameBuffer));
        if (RetVal > 0) and SameText(ClassNameBuffer, 'TfrxPrintDialog') then
          for i := 0 to Screen.FormCount - 1 do
            if (SameText(Screen.Forms[i].ClassName, 'TfrxPrintDialog')) and (Screen.Forms[i].Width <= 563) then
              Screen.Forms[i].Width := Screen.Forms[i].Width + 8;
      end;
    end;
  end;
end;

Procedure InitHook();
var
  dwThreadID: DWORD;
begin
  dwThreadID := GetCurrentThreadId;
  hhk := SetWindowsHookEx(WH_CBT, @CBT_FUNC, hInstance, dwThreadID);
  if hhk = 0 then RaiseLastOSError;
end;

Procedure KillHook();
begin
  if (hhk <> 0) then
    UnhookWindowsHookEx(hhk);
end;

initialization
  InitHook();

finalization
  KillHook();

После применения обеих фикций результат будет следующим:

Результат Результат

Обратите внимание, что вам следует сообщать об этих проблемах на странице QC Embarcadero (https://qc.embarcadero.com/).

Создано по материалам из источника по ссылке.

В данном контексте рассматриваются решение проблем с VCL Styles в Rad Studio XE5, в частности, белая граница вокруг панели инструментов и неверное выравнивание или позиционирование элементов управления в диалоге печати и других элементах.


Комментарии и вопросы

Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS




Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.


:: Главная :: Отчеты ::


реклама


©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru

Время компиляции файла: 2024-08-19 13:29:56
2024-11-21 12:16:01/0.0054302215576172/1