Ветеран
Сообщения: 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
|