Вопрос Как сделать так чтобы LoadBGBmpFromFile не скакал при прокрутки колесиком у компонент листа?

Ekspoint

Новичок
И еще,как включить стр PreparingPage на юникоде?
 
Последнее редактирование:

Adil

Старожил
Ekspoint, для первого, нужно отключить прокрутку колесиком.
Код:
[Setup]
AppName=MyApp
AppVerName=MyApp
DefaultDirname={pf}\MyApp

[code]
#ifdef UNICODE
  #define A "W"
#else
  #define A "A"
#endif

const
  GWL_WNDPROC = -4;
  WM_MOUSEWHEEL = $020A;

type
  LPARAM = Integer;
  WPARAM = Integer;
  LRESULT = Integer;
  TFNWndProc = Integer;

var
  WindowProc: Longint;

function SetWindowLong(hWnd: HWND; nIndex: Integer; dwNewLong: Longint): Longint; external 'SetWindowLong{#A}@user32.dll stdcall';
function CallWindowProc(lpPrevWndFunc: TFNWndProc; hWnd: HWND; Msg: UINT; wParam: WPARAM; lParam: LPARAM): LRESULT; external 'CallWindowProc{#A}@user32.dll stdcall';

function Proc(hWnd: HWND; Msg: UINT; wParam: WPARAM; lParam: LPARAM): LRESULT;
begin
  case Msg of WM_MOUSEWHEEL:
begin
  Msg := 0;
end;
end;
  Result := CallWindowProc(WindowProc, hWnd, Msg, wParam, lParam);
end;

procedure InitializeWizard();
begin
  WindowProc := SetWindowLong(WizardForm.ComponentsList.Handle, GWL_WNDPROC, CallbackAddr('Proc'));
end;

procedure DeinitializeSetup();
begin
  SetWindowlong(WizardForm.ComponentsList.Handle, GWL_WNDPROC, WindowProc);
end;
 

ReFLeXx

Новичок
Я в своё время парсил компоненты и выводил всё через ботву, а на прокрутку колёсика ставил хук. Стандартный способ с наложением bmp был не такой универсальный: было жирное выделение шрифта, когда убираешь синее выделение; кастомные чекбоксы приходилось бы перерисовывать из-за теней и округлённости; было необходимо использовать кастомные лейблы с тенью.
 

Ekspoint

Новичок
Ekspoint, для первого, нужно отключить прокрутку колесиком.
Код:
[Setup]
AppName=MyApp
AppVerName=MyApp
DefaultDirname={pf}\MyApp

[code]
#ifdef UNICODE
  #define A "W"
#else
  #define A "A"
#endif

const
  GWL_WNDPROC = -4;
  WM_MOUSEWHEEL = $020A;

type
  LPARAM = Integer;
  WPARAM = Integer;
  LRESULT = Integer;
  TFNWndProc = Integer;

var
  WindowProc: Longint;

function SetWindowLong(hWnd: HWND; nIndex: Integer; dwNewLong: Longint): Longint; external 'SetWindowLong{#A}@user32.dll stdcall';
function CallWindowProc(lpPrevWndFunc: TFNWndProc; hWnd: HWND; Msg: UINT; wParam: WPARAM; lParam: LPARAM): LRESULT; external 'CallWindowProc{#A}@user32.dll stdcall';

function Proc(hWnd: HWND; Msg: UINT; wParam: WPARAM; lParam: LPARAM): LRESULT;
begin
  case Msg of WM_MOUSEWHEEL:
begin
  Msg := 0;
end;
end;
  Result := CallWindowProc(WindowProc, hWnd, Msg, wParam, lParam);
end;

procedure InitializeWizard();
begin
  WindowProc := SetWindowLong(WizardForm.ComponentsList.Handle, GWL_WNDPROC, CallbackAddr('Proc'));
end;

procedure DeinitializeSetup();
begin
  SetWindowlong(WizardForm.ComponentsList.Handle, GWL_WNDPROC, WindowProc);
end;
а без этого ни как не получится?
 

Alloc

Новичок
Приветствую!
Такая проблема. На форме присутствует CheckListBox (ComponentsList), сам компонент прозрачный. При прокручивании при помощи мыши фоновое изображение формы на мгновение деформируется в зоне CheckListBox. А если в ручную перетащить ползунок то все ок. Как можно решить?
 

El Sanchez

Новичок
При прокручивании при помощи мыши фоновое изображение формы на мгновение деформируется в зоне CheckListBox. А если в ручную перетащить ползунок то все ок. Как можно решить?
Alloc, установить компоненту расширенный стиль WS_EX_COMPOSITED:
Код:
with WizardForm.ComponentsList do
  SetWindowLong(Handle, GWL_EXSTYLE, GetWindowLong(Handle, GWL_EXSTYLE) or WS_EX_COMPOSITED);
 
Сверху