PDA

Показать полную графическую версию : Скрипты Inno Setup. Помощь и советы [часть 5]


Страниц : 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 [56] 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100

Gnom_aka_Lexander
09-10-2012, 19:45
Johny777, можно проще - не останавливать, а убивать таймер, тогда и не будет утечки памяти. а то получается на каждом выкате - закате создается новый таймер, отсюда и утечка.

Johny777
09-10-2012, 19:57
Gnom_aka_Lexander,
он и убивается
твой код:

var
SettingPanel : TPanel;
Flag : boolean;
Timer : LongWord;

function SetTimer(hWnd, nIDEvent, uElapse, lpTimerFunc: LongWord): LongWord; external 'SetTimer@user32.dll stdcall';
function KillTimer(hWnd, nIDEvent: LongWord): LongWord; external 'KillTimer@user32.dll stdcall';

procedure Timer1;
begin
if SettingPanel.Top < 0 then SettingPanel.Top := SettingPanel.Top + ScaleY(3);
if SettingPanel.Top = 0 then KillTimer(WizardForm.Handle, Timer);
end;

procedure Timer2;
begin
if SettingPanel.Top > -315 then SettingPanel.Top := SettingPanel.Top - ScaleY(3);
if SettingPanel.Top = -315 then KillTimer(WizardForm.Handle, Timer);
end;


procedure HideShow(Sender: TObject);
begin
KillTimer(WizardForm.Handle, Timer);
case Flag of
True :
begin
Timer := SetTimer(WizardForm.Handle, 1, 5 , CallbackAddr('Timer2'));
TButton(Sender).Caption:='Show';
end;
False :
begin
Timer := SetTimer(WizardForm.Handle, 1, 5 , CallbackAddr('Timer1'));
TButton(Sender).Caption:='Hide';
end;
end;
Flag:= not Flag;
end;


procedure InitializeWizard();
begin
Flag:= False;

SettingPanel := TPanel.Create(WizardForm);
with SettingPanel do
begin
Parent := WizardForm;
SetBounds(ScaleX(0),ScaleY(-315),ScaleX(497),ScaleY(313));
ParentBackground := False;
end;

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


El Sanchez-а

var
SettingPanel: TPanel;
hBtn: TButton;
//iStartTime: Integer; //debug
iTimer, iRollInfo: Integer;

function SetTimer(hWnd, nIDEvent, uElapse, lpTimerFunc: LongWord): LongWord; external 'SetTimer@user32.dll stdcall';
function KillTimer(hWnd, nIDEvent: LongWord): LongWord; external 'KillTimer@user32.dll stdcall';
//function GetTickCount: DWORD; external 'GetTickCount@kernel32.dll stdcall'; //debug


procedure TimerProc(hwnd: HWND; uMsg: UINT; idEvent: UINT_PTR; dwTime: DWORD);
var
iLen, iStep: Integer;
begin
iLen := iRollInfo and $FFFF;
iStep := (iRollInfo and $FF0000) shr $10;
case iRollInfo shr $18 of
$0: begin
if SettingPanel.Left >= -iStep then
begin
KillTimer(0, iTimer);
hBtn.Enabled := True;
end;
SettingPanel.Left := SettingPanel.Left + iStep;
//WizardForm.Caption := 'time: ' + IntToStr(dwTime-iStartTime) + '; length: ' + IntToStr(SettingPanel.Left); //debug
end;
$1: begin
if SettingPanel.Left <= -iLen + iStep then
begin
KillTimer(0, iTimer);
hBtn.Enabled := True;
end;
SettingPanel.Left := SettingPanel.Left - iStep;
//WizardForm.Caption := 'time: ' + IntToStr(dwTime-iStartTime) + '; length: ' + IntToStr(SettingPanel.Left); //debug
end;
$2: begin
if SettingPanel.Top >= -iStep then
begin
KillTimer(0, iTimer);
hBtn.Enabled := True;
end;
SettingPanel.Top := SettingPanel.Top + iStep;
//WizardForm.Caption := 'time: ' + IntToStr(dwTime-iStartTime) + '; length: ' + IntToStr(SettingPanel.Top); //debug
end;
$3: begin
if SettingPanel.Top <= -iLen + iStep then
begin
KillTimer(0, iTimer);
hBtn.Enabled := True;
end;
SettingPanel.Top := SettingPanel.Top - iStep;
//WizardForm.Caption := 'time: ' + IntToStr(dwTime-iStartTime) + '; length: ' + IntToStr(SettingPanel.Top); //debug
end;
end;
end;

procedure RollControl(Ctrl: TControl; dwTime, dwFlag: DWORD);
// Ctrl : control
// dwTime : rolling time, ms
// dwFlag : roll type ($0 - left to right, $1 - right to left, $2 - top to bottom, $3 - bottom to top)
var
iLen, iStep: Integer;
iKoeff: Extended;
begin
iLen := (dwFlag shr $1 xor $1)*Ctrl.Width + (dwFlag shr $1)*Ctrl.Height;
repeat
iStep := iStep + 1;
iKoeff := (iStep * dwTime)/(iLen * 1000/64);
until iKoeff >= 1;
//
if iRollInfo = 0 then iRollInfo := (dwFlag shl $18) or (iStep shl $10) or iLen else iRollInfo := iRollInfo xor $1000000;
iTimer := SetTimer(0, 0, Trunc(iKoeff)*1000/64, CallbackAddr('TimerProc'));
end;

procedure HideShow(Sender: TObject);
begin
//iStartTime := GetTickCount; //debug
RollControl(SettingPanel, 1000, $2);
TButton(Sender).Enabled := False;
end;

procedure InitializeWizard();
begin
SettingPanel := TPanel.Create(WizardForm);
with SettingPanel do
begin
Parent := WizardForm;
SetBounds(ScaleX(0), ScaleY(-315), ScaleX(497), ScaleY(315));
ParentBackground := False;
end;

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


утечка тем не менее имеет место :(
к тому же в коде который пилю можно двигать по 1-му пикселю c большой скоростью - явный плюс!

JHeavy
09-10-2012, 20:53
Приветствую, этот вопрос вероятно обсуждался не один раз, но найти мне ответа не удалось... наверное.
Имеются компоненты:
a Flags: fixed
a\b
a\c

Как сделать так чтобы если не выбрать a\b то a\c становится недоступен
a\c при выборе a\b можно снять или отметить

Mailchik
09-10-2012, 21:27
JHeavy, [Setup]
AppName=Test
AppVerName=Test
DefaultDirname={pf}\Test

[Types]
Name: full; Description: Full installation; Flags: iscustom

[Components]
Name: a; Description: a; Types: full; Flags: fixed checkablealone
Name: a\b; Description: a\b;
Name: a\c; Description: a\c;

[Code]
procedure TestClick(Sender: TObject);
begin
with WizardForm.ComponentsList do begin
if Checked[1] then begin
ItemEnabled[2]:= True;
end else begin
ItemEnabled[2]:= False;
Checked[2]:= False;
end;
end;
end;

procedure InitializeWizard();
begin
with WizardForm.ComponentsList do begin
OnClickCheck := @TestClick;
TestClick(nil);
end;
end;

JHeavy
09-10-2012, 23:10
Mailchik, спасибо, то что нужно, только скажите как в этом примере сделать чтобы компонент a был всегда отмечен, и как добавлять компоненты (что куда дописывать если их много будет) т.е. если не трудно добавьте комментарии для "усвоения материала"

Просто хочу понять как это работает если будет разное количество компонентов

Mailchik
09-10-2012, 23:33
Ну отметить a "навсегда" значит не получится, просто - a программа, a\b и a\c - желаемые дополнения, без которых программа также ставится, решения нет?
[Setup]
AppName=Test
AppVerName=Test
DefaultDirname={pf}\Test

[Types]
Name: full; Description: Full installation; Flags: iscustom

[Components]
Name: a; Description: a; Types: full; Flags: fixed checkablealone
Name: a\b; Description: a\b;
Name: a\c; Description: a\c;

[Code]
procedure TestClick(Sender: TObject);
begin
with WizardForm.ComponentsList do begin
if Checked[1] then begin //если выбран 2-й компонент (отсчет начинается с 0)
ItemEnabled[2]:= True; //то 3-й компонент активен
end else begin //если нет
ItemEnabled[2]:= False; //то не активен 3-й компонент
Checked[2]:= False; //и убираем "отмеченность" 3-го компонента
end;
end;
end;

procedure InitializeWizard();
begin
with WizardForm.ComponentsList do begin
OnClickCheck := @TestClick;
TestClick(nil);
end;
end;
добавьте комментарии для "усвоения материала"
[Setup]
AppName=Test
AppVerName=Test
DefaultDirname={pf}\Test

[Types]
Name: full; Description: Full installation; Flags: iscustom

[Components]
Name: a; Description: a; Types: full; Flags: fixed checkablealone
Name: a\b; Description: a\b;
Name: a\c; Description: a\c;

[Code]
procedure TestClick(Sender: TObject);
begin
with WizardForm.ComponentsList do begin
if Checked[1] then begin //если выбран 2-й компонент (отсчет начинается с 0)
ItemEnabled[2]:= True; //то 3-й компонент активен
end else begin //если нет
ItemEnabled[2]:= False; //то не активен 3-й компонент
Checked[2]:= False; //и убираем "отмеченность" 3-го компонента
end;
end;
end;

procedure InitializeWizard();
begin
with WizardForm.ComponentsList do begin
OnClickCheck := @TestClick;
TestClick(nil);
end;
end;
как добавлять компоненты (что куда дописывать если их много будет)
[Setup]
AppName=Test
AppVerName=Test
DefaultDirname={pf}\Test

[Types]
Name: full; Description: Full installation; Flags: iscustom

[Components]
//a первый по списку, но имеет значение 0 в компонент листе и остальные компоненты по порядку
Name: a; Description: a; Types: full; Flags: fixed checkablealone
Name: a\b; Description: a\b;
Name: a\c; Description: a\c;
Name: a\d; Description: a\d;
Name: a\e; Description: a\e;
Name: b; Description: b; Types: full; Flags: fixed
Name: b\b; Description: b\b;
Name: b\c; Description: b\c;

[Code]
procedure TestClick(Sender: TObject);
begin
with WizardForm.ComponentsList do begin
if Checked[1] then begin //если выбран 2-й компонент (a\b) (отсчет начинается с 0)
ItemEnabled[2]:= True; //то 3-й компонент (a\c) активен
ItemEnabled[6]:= True; //7-й компонент (b\b) активен
end else begin //если нет
ItemEnabled[2]:= False; //то не активен 3-й компонент (a\c)
Checked[2]:= False; //и убираем "отмеченность" 3-го компонента (a\c)
ItemEnabled[6]:= False; //не активен 7-й компонент (b\b)
end;
end;
end;

procedure InitializeWizard();
begin
with WizardForm.ComponentsList do begin
OnClickCheck := @TestClick;
TestClick(nil);
end;
end;

JHeavy
09-10-2012, 23:53
Ну отметить a "навсегда" значит не получится, просто - a программа, a\b и a\c - желаемые дополнения, без которых программа также ставится, решения нет?

Да и скажите будет ли работать пример в сворачивающихся списках компонентов (который расширенной версией делается), вроде проверил - никак
Вернее работает, но пропадают подсказки компонентов
Спасибо... Оказывается все работает... если правильно написать

SatHan
10-10-2012, 12:38
привет.
как применить тему в Se7en?

Gnom_aka_Lexander
10-10-2012, 21:58
Johny777, вот так они в дельфе.
QS_KEY = $0001;
QS_MOUSEMOVE = $0002;
QS_MOUSEBUTTON = $0004;
QS_POSTMESSAGE = $0008;
QS_TIMER = $0010;
QS_PAINT = $0020;
QS_SENDMESSAGE = $0040;
QS_HOTKEY = $0080;

QS_MOUSE = (QS_MOUSEMOVE or QS_MOUSEBUTTON);

QS_INPUT = (QS_MOUSE or QS_KEY);

QS_ALLEVENTS = (QS_INPUT or QS_POSTMESSAGE or QS_TIMER or QS_PAINT or QS_HOTKEY);

WAIT_TIMEOUT = $00000102;

Johny777
11-10-2012, 00:02
Gnom_aka_Lexander, El Sanchez, поздравьте меня! :) Тк сделал свой вариант "выкатов и закатов". 2 дня убил на код: (зато никаких таймеров)
подробнее в коде:

[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 т.к. дальше будет некрасиво))
procedure Roll(Ctrl:TControl; RollDelay: Integer);
begin
case RollInfo of
$1: repeat
if SleepEx(RollDelay,True) = 0 then Ctrl.Top := Ctrl.Top + ScaleY(1); /// сверху вниз и назад
Application.ProcessMessages;
until (RollInfo = $0) or (Ctrl.Top = 0)
$0: repeat /// снизу вверх
if SleepEx(RollDelay,True) = 0 then Ctrl.Top := Ctrl.Top - ScaleY(1);
Application.ProcessMessages;
until (RollInfo = $1) or (Ctrl.Top = - Ctrl.Height)
//////////////////////////////////////////////////////////////////
$4: repeat
if SleepEx(RollDelay,True) = 0 then Ctrl.Left := Ctrl.Left + ScaleX(1); /// слева направо и назад
Application.ProcessMessages;
until (RollInfo = $3) or (Ctrl.Left = 0)
$3: repeat
if SleepEx(RollDelay,True) = 0 then Ctrl.Left := Ctrl.Left - ScaleX(1);
Application.ProcessMessages;
until (RollInfo = $4) or (Ctrl.Left = - Ctrl.Width);
///////////////////////////////////////////////////////////////////
$6: repeat
if SleepEx(RollDelay,True) = 0 then Ctrl.Left := Ctrl.Left - ScaleX(1); /// справа налево и назад
Application.ProcessMessages;
until (RollInfo = $5) or (Ctrl.Left = Ctrl.Parent.Width-Ctrl.Width)
$5: repeat
if SleepEx(RollDelay,True) = 0 then Ctrl.Left := Ctrl.Left + ScaleX(1);
Application.ProcessMessages;
until (RollInfo = $6) or (Ctrl.Left = Ctrl.Parent.Width);
////////////////////////////////////////////////////////////////////
$8: repeat
if SleepEx(RollDelay,True) = 0 then Ctrl.Top := Ctrl.Top - ScaleY(1); /// снизу вверх и назад
Application.ProcessMessages;
until (RollInfo = $7) or (Ctrl.Top = Ctrl.Parent.Height-Ctrl.Height)
$7: repeat
if SleepEx(RollDelay,True) = 0 then Ctrl.Top := Ctrl.Top + ScaleY(1);
Application.ProcessMessages;
until (RollInfo = $8) 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 := $1;
Roll(PanelDown,0); //// A

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

// RollInfo := $6;
// Roll(PanelRight,2); ///////// C

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

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

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

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

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

// RollInfo := $7;
// Roll(PanelUp,0); //////////// 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(-200),ScaleY(0),ScaleX(200),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;


просьба оценить работу! (отписаться о впечатлениях)

nik1967
11-10-2012, 00:35
Johny777, вниз падает (по другому х.з. как сказать) а вверх плавно поднимается. И да, компилишь на Ansi? На Unicode ругнулось несколько раз - точку с запятой забыл поставить в нескольких местах.

El Sanchez
11-10-2012, 10:49
поздравьте меня! Тк сделал свой вариант "выкатов и закатов" »
Johny777, респект, только SleepEx не по назначению используешь, достаточно простого Sleep.
и где мне на будущее смотреть эти значения »
Johny777, в MSDN нередко при описании какой-либо функции указывают значения используемых констант. Если нет, то в гугел я даю запрос типа const QS_KEY =, первые же результаты дают искомое, даже не нужно по ссылкам переходить.
но есть один недостаток - после завершения таймера не выгружается оперативка
те после каждого выката прибавляется по 4кб при закате по 4 = 8кб на один закат/выкат »
Это не утечка, борландовский менеджер памяти для своих нужд выделяет квант памяти, равный размеру страницы памяти.

Gnom_aka_Lexander
11-10-2012, 10:55
в MSDN нередко при описании какой-либо функции »
в гугел я даю запрос типа const QS_KEY »
самый быстрый вариант - в модулях дельфи - я просто ввожу константу и потом на ней правой кнопкой - "Find declaration". все что потом нужно - собрать остальные значения, если она составная.

JHeavy
11-10-2012, 17:11
Приветствую, подскажите пожалуйста, существует ли возможность запуска программы из папки {app} (программы которая туда уже распаковалась), а после её завершения продолжалась распаковка других файлов в эту папку.

Serega
11-10-2012, 17:42
Это не утечка, борландовский менеджер памяти для своих нужд выделяет квант памяти, равный размеру страницы памяти. »
Это именно утечка, вот только не понятно почему...
Попробуйте написать используя TTimer, такого не будет, хотя при вызове TTimer.Enabled := True, происходит вызов функции SetTimer, а при TTimer.Enabled := False, происходит вызов функции KillTimer и при этом такой утечки не происходит.

и потом на ней правой кнопкой - "Find declaration" »
Так же можно нажать Ctrl+клик мышкой

Gnom_aka_Lexander
11-10-2012, 18:05
JHeavy, посмотри в справке BeforeInstall и AflerInstall, с их помощью можно до или после распаковки нужного файла вызвать встроенную функцию Exec, и поскольку она подвешивает инсталл, то при использвоании флага ewNoWait есть большие шансы, что распаковка продолжится только после отработки Exec.

LinkOFF
11-10-2012, 21:36
Добрый вечер всем. А не подскажите как убрать кнопку "О программе" и иконку в левом верхнем углу? Заранее благодарен.

Johny777
11-10-2012, 22:14
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;



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

Mailchik
11-10-2012, 22:26
как убрать кнопку "О программе" [Setup]
AppName=My Application
AppVersion=1.5
DefaultDirName={pf}\My Application

[Code]
procedure InitializeWizard;
begin
with WizardForm do begin
Position := poScreenCenter;
end;
end;

LinkOFF
11-10-2012, 23:08
Mailchik, что-то я вставить не могу. у меня InitializeWizard разделен на 4 части, создаю 5, компилирую и кнопка не уберается. не могли бы вставить? http://rghost.ru/download/40879331/30a25fabb0a4c36842b673f594ef4822ab8519a3/dishonored.iss

Mailchik, уже не нужно. я вставил.




© OSzone.net 2001-2012