Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  

Показать сообщение отдельно

Аватара для Johny777

Ветеран


Сообщения: 649
Благодарности: 444

Профиль | Отправить PM | Цитировать


Цитата El Sanchez:
SleepEx не по назначению используешь, достаточно простого Sleep. »
уже поправил.
Теперь это функция: function Roll(Ctrl: TControl; RollDelay: Byte; InputRollInfo: DWORD): DWORD;
упростил вызов
в выкатах справа и снизу иногда нужно учитывать ширину границы формы
например $6: ... until (RollInfo <> $6) or (Ctrl.Top = Ctrl.Parent.Height-Ctrl.Height-ScaleY(28));
читать дальше »
Код: Выделить весь код
[Setup]
AppName=The_Best_RollDemo_Ever
AppVerName=The_Best_RollDemo_Ever v 777
DefaultDirName={pf}\The_Best_RollDemo_Ever
DefaultGroupName=The_Best_RollDemo_Ever
OutputDir=.
Uninstallable=no

[code]
var
  PanelUp, PanelDown, PanelLeft, PanelRight: TPanel;
  RollInfo: DWORD;

// function SleepEx(dwMilliseconds: DWORD; bAlertable: BOOL): DWORD; external 'SleepEx@Kernel32.dll stdcall';

//  сдвиг статичный в один пиксель (не менять)
//  плюсы такого сдвига:
//  1. плавность
//  2. точность выполнения (что будет если панель высотой 70 двигать по 3 пикселя до -70)
//  3. настройка скорости задержкой (диапазон от 0 до 100 = 101 скоростей)

///////// Roll(переменная_контрола(например панель или скроллбокс или мемо), задержка(максимум 100 т.к. дальше будет некрасиво), индикатор выката)
function Roll(Ctrl: TControl; RollDelay: Byte; InputRollInfo: DWORD): DWORD;
begin
  Result := InputRollInfo;
  case Result of
    $0: repeat
          Ctrl.Top := Ctrl.Top + ScaleY(1);      /// сверху вниз и назад
          Sleep(RollDelay);
          Application.ProcessMessages;
        until (RollInfo <> $0) or (Ctrl.Top = 0);
    $1: repeat  /// снизу вверх
          Ctrl.Top := Ctrl.Top - ScaleY(1);
          Sleep(RollDelay);
          Application.ProcessMessages;
        until (RollInfo <> $1) or (Ctrl.Top = - Ctrl.Height);
        //////////////////////////////////////////////////////////////////
    $2: repeat
          Ctrl.Left := Ctrl.Left + ScaleX(1);    /// слева направо и назад
          Sleep(RollDelay);
          Application.ProcessMessages;
        until (RollInfo <> $2) or (Ctrl.Left = 0);
    $3: repeat
          Ctrl.Left := Ctrl.Left - ScaleX(1);
          Sleep(RollDelay);
          Application.ProcessMessages;
        until (RollInfo <> $3) or (Ctrl.Left = - Ctrl.Width);
        ///////////////////////////////////////////////////////////////////
    $4: repeat
          Ctrl.Left := Ctrl.Left - ScaleX(1);   /// справа налево  и назад
          Sleep(RollDelay);
          Application.ProcessMessages;
        until (RollInfo <> $4) or (Ctrl.Left = Ctrl.Parent.Width-Ctrl.Width);
    $5: repeat
          Ctrl.Left := Ctrl.Left + ScaleX(1);
          Sleep(RollDelay);
          Application.ProcessMessages;
        until (RollInfo <> $5) or (Ctrl.Left = Ctrl.Parent.Width);
        ////////////////////////////////////////////////////////////////////
    $6: repeat
          Ctrl.Top := Ctrl.Top - ScaleY(1);    /// снизу вверх и назад
          Sleep(RollDelay);
          Application.ProcessMessages;
        until (RollInfo <> $6) or (Ctrl.Top = Ctrl.Parent.Height-Ctrl.Height);
    $7: repeat
          Ctrl.Top := Ctrl.Top + ScaleY(1);
          Sleep(RollDelay);
          Application.ProcessMessages;
        until (RollInfo <> $7) or (Ctrl.Top = Ctrl.Parent.Top + Ctrl.Height);
    end;
end;




procedure UpDown(Sender: TObject);
begin
  case TButton(Sender).Caption of
   'Roll1':
    begin
      TButton(Sender).Caption:='Roll0';

//      RollInfo := Roll(PanelDown, 2, $0); // A

      RollInfo := Roll(PanelLeft, 0, $2); // B

//      RollInfo := Roll(PanelRight, 0, $4); // C

//      RollInfo := Roll(PanelUp, 0, $6);  // D

    end;
    'Roll0':
    begin
      TButton(Sender).Caption:='Roll1';

//      RollInfo := Roll(PanelDown, 2, $1); // A

      RollInfo := Roll(PanelLeft, 0, $3);  // B

//      RollInfo := Roll(PanelRight, 0, $5); // C

//      RollInfo := Roll(PanelUp, 0, $7);
        //////////// d
    end;
  end;
end;





procedure InitializeWizard();
begin
  PanelUp := TPanel.Create(WizardForm);
  with PanelUp do
  begin
    Parent := WizardForm;
    SetBounds(ScaleX(0),Parent.Top + Parent.Height,ScaleX(497),ScaleY(200));
    ParentBackground := False;
    Color := clBlue;
  end;

  PanelDown := TPanel.Create(WizardForm);
  with PanelDown do
  begin
    Parent := WizardForm;
    SetBounds(ScaleX(0),ScaleY(-200),ScaleX(497),ScaleY(200));
    ParentBackground := False;
    Color := clYellow;
  end;

  PanelLeft := TPanel.Create(WizardForm);
  with PanelLeft do
  begin
    Parent := WizardForm;
    SetBounds(ScaleX(-390),ScaleY(0),ScaleX(390),ScaleY(314));
    ParentBackground := False;
    Color := clGreen;
  end;

  PanelRight := TPanel.Create(WizardForm);
  with PanelRight do
  begin
    Parent := WizardForm;
    SetBounds(Parent.Width + ScaleX(200),ScaleY(0),ScaleX(200),ScaleY(314));
    ParentBackground := False;
    Color := clRed;
  end;

  with TButton.Create(WizardForm) do
  begin
    OnClick:= @UpDown;
    SetBounds(ScaleX(40),ScaleY(327),ScaleX(75),ScaleY(25))
    Caption:='Roll1';
    Parent:= WizardForm;
  end;
end;


Цитата LinkOFF:
как убрать ... иконку в левом верхнем углу? »
кто-то уже спрашивал. Смотрел на форумах. это жуткий геморрой. как вариант используй скин и иконку однотонную по цвету скина
это не обязательно иконка экзешника инсталла
http://forum.ru-board.com/topic.cgi?...07&limit=1&m=1

Последний раз редактировалось Johny777, 11-10-2012 в 22:46.

Это сообщение посчитали полезным следующие участники:

Отправлено: 22:14, 11-10-2012 | #1118