---------------------------------------подскажите как сделать текст на первой странице инсталятора прозрачным или убрать вовсе - где эта программа установит на ваш компьютер блаблабла и тд
[_Code]
procedure InitializeWizard();
begin
WizardForm.WelcomeLabel1.Visible := False;
WizardForm.WelcomeLabel2.Visible := False;
WizardForm.DirEdit.Parent:=WizardForm.WelcomePage;
WizardForm.DirEdit.Left:=ScaleX(170);
WizardForm.DirEdit.Width:=ScaleX(170);
WizardForm.DirEdit.Autosize:=False;
WizardForm.DirBrowseButton.Parent:=WizardForm.WelcomePage;
end;
procedure CurPageChanged(CurPage: Integer);
begin
WizardForm.NextButton.Caption:='Установить';
end;
function ShouldSkipPage(PageID: Integer): Boolean;
begin
case PageID of
wpSelectDir, wpReady, wpSelectDir: Result := True;
end;
end;
[COLOR="Blue"]procedure[/COLOR] CurStepChanged(CurStep: TSetupStep);
[COLOR="blue"]begin[/COLOR]
[COLOR="blue"]if[/COLOR] CurStep = ssDone [COLOR="blue"]then[/COLOR]
MsgBox('Программа' + '{#MyAppName}' + ' установлена!', mbInformation, MB_OK);
[COLOR="blue"]end[/COLOR];
var
FinishForm: TForm;
procedure CurStepChanged(CurStep: TSetupStep);
begin
case curstep of
ssDone: begin
FinishForm := TForm.Create(WizardForm);
with FinishForm do begin
Width:=450;
Height:=227;
Left:=WizardForm.Left+165;
Top:=WizardForm.Top+57;
BorderStyle:=bsNone;
Show;
end;
with Tlabel.Create(FinishForm) do begin
Autosize:=false;
SetBounds(ScaleX(1), ScaleY(46), ScaleX(450), ScaleY(150));
Caption :='Blablabal';
Parent := FinishForm;
Font.Color:=$000000;
Transparent:=True;
Alignment := taCenter;
end;
Sleep(1500);
end;
end;
end;[/SPOILER]
то лейбл не хочет отображаться
Понятно, не хочет нужно сперва создать форму, со всеми элементами, в отдельной процедуре, потом вызвать эту процедуру, потом Sleep(1500);, потом - FinishForm.Free;то лейбл не хочет отображаться
var
FinishForm: TForm;
procedure CurStepChanged(CurStep: TSetupStep);
begin
case curstep of
ssDone: begin
FinishForm := TForm.Create(WizardForm);
with FinishForm do [COLOR="blue"]begin[/COLOR]
Width:=450;
Height:=227;
Left:=WizardForm.Left+165;
Top:=WizardForm.Top+57;
BorderStyle:=bsNone;
with Tlabel.Create(FinishForm) do begin
Autosize:=false;
SetBounds(ScaleX(1), ScaleY(46), ScaleX(450), ScaleY(150));
Caption :='Blablabal';
Parent := FinishForm;
Font.Color:=$000000;
Transparent:=True;
Alignment := taCenter;
end;
Show;
[COLOR="Blue"]end[/COLOR];
Sleep(1500);
FinishForm.Free;
end;
end;
end;[/spoiler] но не на 100%, что поможет.
но слип - просто для примера, он блокирует сам инсталл. нужно через таймер делать, тогда все красиво будет.
Всё равно лейбл не показывается... по крайней мере у меняХотя..., можно попробовать и твой вариант слегка переделать:
type
TTimerProc = procedure (h, msg, idevent, dwTime: Longword);
const
CaptionMsgBox = 'bla-bla-bla';
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 WrapTimerProc(callback:TTimerProc; paramcount:integer):LongWord; external 'wrapcallbackaddr@files:CallbackCtrl.dll stdcall';
function GetDlgItem(hDlg: HWND; nIDDlgItem: Integer): HWND; external 'GetDlgItem@user32.dll stdcall';
function MessageBox(hWnd: HWND; lpText, lpCaption: PChar; uType: UINT): Integer; external 'MessageBoxA@user32.dll stdcall';
procedure OnTimer(h, msg, idevent, dwTime:Longword);
var
wnd,btn:HWND;
begin
KillTimer(WizardForm.Handle,1);
wnd:=FindWindowByWindowName(CaptionMsgBox);
if wnd<>0 then begin
btn:=GetDlgItem(wnd,2);
if btn<>0 then SendMessage(btn,$F5,0,0);
end;
end;
procedure ExampleButtonClick(Sender: TObject);
begin
SetTimer(WizardForm.Handle,1,3000,WrapTimerProc(@OnTimer,4));
MessageBox(WizardForm.Handle,'Гаснем через 3 сек.',CaptionMsgBox,0);
KillTimer(WizardForm.Handle,1);
end;
procedure InitializeWizard;
begin
with TButton.Create(WizardForm) do begin
SetBounds(10,310,80,21);
Caption:='Example';
Parent:=WizardForm;
OnClick:=@ExampleButtonClick;
end;
end;[/SPOILER]
ЗЫ на коленке, не тестил
SetTimer(WizardForm.Handle,1,3000,WrapTimerProc(@OnTimer,4));SetTimer(WizardForm.Handle,1,3000,WrapTimerProc(@O nTimer,4));
[COLOR="Blue"]procedure[/COLOR] CurStepChanged(CurStep: TSetupStep);
[COLOR="blue"]begin[/COLOR]
[COLOR="blue"]if[/COLOR] CurStep = ssDone [COLOR="blue"]then[/COLOR]
MsgBox('Программа' + '{#MyAppName}' + ' установлена!', mbInformation, MB_OK);
[COLOR="blue"]end[/COLOR];
#define MyAppName "Stronghold"
[Setup]
AppName=My Program
AppVerName=My Program 1.5
DefaultDirName={pf}\My Program
[Files]
Source: CallbackCtrl.dll; Flags: dontcopy
[_Code]
type
TTimerProc = procedure (h, msg, idevent, dwTime: Longword);
const
CaptionMsgBox = 'Завершение';
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 WrapTimerProc(callback:TTimerProc; paramcount:integer):LongWord; external 'wrapcallbackaddr@files:CallbackCtrl.dll stdcall';
function GetDlgItem(hDlg: HWND; nIDDlgItem: Integer): HWND; external 'GetDlgItem@user32.dll stdcall';
function MessageBox(hWnd: HWND; lpText, lpCaption: PChar; uType: UINT): Integer; external 'MessageBoxA@user32.dll stdcall';
procedure OnTimer(h, msg, idevent, dwTime:Longword);
var
wnd,btn:HWND;
begin
KillTimer(WizardForm.Handle,1);
wnd:=FindWindowByWindowName(CaptionMsgBox);
if wnd<>0 then begin
btn:=GetDlgItem(wnd,2);
if btn<>0 then SendMessage(btn,$F5,0,0);
end;
end;
procedure CurStepChanged(CurStep: TSetupStep);
begin
case curstep of
ssDone: begin
SetTimer(WizardForm.Handle,1,2000,WrapTimerProc(@OnTimer,4));
MessageBox(WizardForm.Handle,'Программа ' + '{#MyAppName}' + ' установлена!',CaptionMsgBox,0);
KillTimer(WizardForm.Handle,1);
end;
end;
end;
#define MyAppName "Battlefield 3"
[Setup]
AppName=My Program
AppVerName=My Program 1.5
DefaultDirName={pf}\My Program
[Languages]
Name: rus; MessagesFile: compiler:Languages\Russian.isl
[CustomMessages]
//Заголовок MessageBox'a
rus.CaptionMsgBox=Завершение
//Текст MessageBox'a
rus.MsgBoxText=Программа {#MyAppName} установлена!
[ Code]
var
MsgTimer: TTimer;
const
WM_CLOSE = $0010;
function FindWindow(lpClassName, lpWindowName: PAnsiChar): HWND; external 'FindWindowA@user32.dll stdcall';
function MessageBox(hWnd: HWND; lpText, lpCaption: PAnsiChar; uType: UINT): Integer; external 'MessageBoxA@user32.dll stdcall';
procedure DeleteMsgBox(s: TObject);
var
wnd:HWND;
begin
MsgTimer.Enabled:= false;
wnd := FindWindow('#32770', ExpandConstant('{cm:CaptionMsgBox}'));
if wnd <> 0 then PostMessage(wnd, WM_CLOSE, 0, 0);
end;
procedure InitializeWizard;
begin
MsgTimer:= TTimer.Create(nil);
MsgTimer.OnTimer:= @DeleteMsgBox;
MsgTimer.Interval:= Round(3000);
MsgTimer.Enabled:= false;
end;
procedure CurStepChanged(CurStep: TSetupStep);
begin
case curstep of
ssDone: begin
MsgTimer.Enabled:= true;
MessageBox(WizardForm.Handle, ExpandConstant('{cm:MsgBoxText}'), ExpandConstant('{cm:CaptionMsgBox}'), MB_ICONINFORMATION);
end;
end;
end;