Страница wpLicese проверяет, является ли позиция ScrollBars максимальной (Inno Setup)

Можно ли проверить положение ScrollBar на странице wpLicense в Inno Setup без необходимости записи пользовательской страницы заметки?

например

procedure CurPageChanged(CurPageID: Integer);
 begin

     if CurPageID = wpLicense then
        WizardForm.LicenseAcceptedRadio.Enabled := False;
        WizardForm.LicenseNotAcceptedRadio.Enabled := False;

     if ScrollBar.Position := ScrollBar.Max then
        WizardForm.LicenseAcceptedRadio.Enabled := True;
        WizardForm.LicenseNotAcceptedRadio.Enabled := True;
  end;

Ответы на вопрос(2)

однако, если вы обнаружите какие-либо проблемы, просто скажите, что мне нравятся комментарии.

procedure OnScrollPosition(Wnd: HWND; Msg: UINT; TimerID: UINT_PTR; 
  SysTime: DWORD);
  var
    ScrollInfo: TScrollInfo;
begin
  ScrollInfo.cbSize := SizeOf(ScrollInfo);
  ScrollInfo.fMask := SIF_RANGE or SIF_POS or SIF_PAGE;
    if GetScrollInfo(WizardForm.LicenseMemo.Handle, SB_VERT, ScrollInfo) then
       if ScrollInfo.nPos = ScrollInfo.nMax - ScrollInfo.nPage then
          begin
            WizardForm.LicenseAcceptedRadio.Enabled := True;
            WizardForm.LicenseNotAcceptedRadio.Enabled := True;
          end;
end;

procedure ScrollPosition();
var
  TimerCallback: LongWord;
begin
  TimerCallback := WrapTimerProc(@OnScrollPosition, 4);
  TimerID := SetTimer(0, 0, 500, TimerCallback);
end;

procedure CurPageChanged(CurPageID: Integer);
var
  ScrollInfo: TScrollInfo;
begin
   if CurPageID = wpInstalling then
     StartSlideTimer
   else
     KillSlideTimer;
if CurPageID = wpLicense then
  WizardForm.LicenseAcceptedRadio.Enabled := False;
  WizardForm.LicenseNotAcceptedRadio.Enabled := False;
  ScrollPosition
end;
 TLama15 мая 2012 г., 10:19
Фактически вы хотите разрешить пользователям принимать лицензию только тогда, когда они прочитают ее до конца. Это вредно, что InnoSetup не имеет поддержки для перенаправленияWndProc. Вы бы легко смогли пойматьWM_VSCROLL.
Решение Вопроса

однако вы можете использоватьGetScrollInfo функционировать таким образом:

[code]
const
  SB_VERT = 1;
  SIF_RANGE = 1;
  SIF_POS = 4;
  SIF_PAGE = 2;

type
  TScrollInfo = record
    cbSize: UINT;
    fMask: UINT;
    nMin: Integer;
    nMax: Integer;
    nPage: UINT;
    nPos: Integer;
    nTrackPos: Integer;
  end;

function GetScrollInfo(hWnd: HWND; BarFlag: Integer; 
  var ScrollInfo: TScrollInfo): BOOL;
  external '[email protected] stdcall';

procedure CurPageChanged(CurPageID: Integer);
var
  ScrollInfo: TScrollInfo;
begin
  if CurPageID = wpLicense then
  begin
    ScrollInfo.cbSize := SizeOf(ScrollInfo);
    ScrollInfo.fMask := SIF_RANGE or SIF_POS or SIF_PAGE;
    if GetScrollInfo(WizardForm.LicenseMemo.Handle, SB_VERT, ScrollInfo) then
      if ScrollInfo.nPos = ScrollInfo.nMax - ScrollInfo.nPage then
        MsgBox('You are at the end of the license!', mbInformation, MB_OK);
  end;
end;
 RobeN14 мая 2012 г., 16:35
Я просто хотел спросить об этом. Функцию CallBack легко обернуть, чтобы повторить регистрацию во времени. Но в этом состоянии вам нужно будет установить длину, основываясь на файле лицензии. Это может быть сложно, хотя из-за, например, Шрифты DPI в Windows.
 TLama15 мая 2012 г., 09:32
Я не уверен, что получу ваш последний комментарий, однако он должен быть независимым от DPI (потому что сам меморандум делает это для вас). ИLicenseMemo готов к использованию, так какInitializeWizard событие горит.
 RobeN15 мая 2012 г., 09:50
Это хорошо! Я слил его с CallBac

Ваш ответ на вопрос