Автор: Victor_Dobrov
Дата сообщения: 10.08.2008 03:54
Raf_SE - вот [more=пример скрипта]
[Setup]
AppName=My program
AppVerName=My program
DefaultDirName={pf}\My program
[Languages]
Name: rus; MessagesFile: compiler:Languages\Russian.isl
[CustomMessages]
NotFound=Starcraft не найден, без его наличия мод Realistic работать не будет.%nПожалуйста, сначала установите Starcraft, затем инсталлятор мода.
Continue=Про&должить
[Code]
var MessageForm: TPanel; MessageLabel: TLabel;
function ExtractIcon(hInst: LongInt; lpszExeFileName: PChar; nIconIndex: LongInt): LongInt; external 'ExtractIconA@shell32 stdcall delayload';
function DrawIconEx(hdc, x, y, hIcon, cx, cy, AniCur, Draw, Flags: Longint): Longint; external 'DrawIconEx@user32 stdcall delayload';
function GetModuleHandle(lpModuleName: LongInt): LongInt; external 'GetModuleHandleA@kernel32 stdcall delayload';
Function CreateLabel(Parent: TWinControl; AutoSize, WordWrap, Transparent: Boolean; FontName: String; FontStyle: TFontStyles; FontColor: TColor; Left, Top, Width, Height: Integer): TLabel; var tmpLabel: TLabel; Begin
tmpLabel:= TLabel.Create(Parent)
if Top > 0 then tmpLabel.Top:= Top; if Left > 0 then tmpLabel.Left:= Left; if Width > 0 then tmpLabel.Width:= Width; if Height > 0 then tmpLabel.Height:= Height
tmpLabel.AutoSize:= AutoSize; tmpLabel.WordWrap:= WordWrap; tmpLabel.Transparent:= Transparent; tmpLabel.ShowHint:= True
if FontName <> '' then tmpLabel.Font.Name:= FontName; if FontColor > 0 then tmpLabel.Font.Color:= FontColor; if FontStyle <> [] then tmpLabel.Font.Style:= FontStyle
tmpLabel.Parent:= Parent; Result:= tmpLabel
End;
Procedure DrawIcon(Form: TWinControl; File: String; nIcon, Left, Top, Size, BColor: Integer); var Panel: TPanel; Rect: TRect; Begin
Panel:= TPanel.Create(Form); Panel.SetBounds(Left, Top, Size, Size); Panel.Parent:= Form
with TBitmapImage.Create(Panel) do begin Parent:= Panel; with Bitmap do begin
Width:= Size; Height:= Size; Rect.Right:= Size; Rect.Bottom:= Size; Canvas.Brush.Color:= BColor; Canvas.FillRect(Rect);
DrawIconEx(Canvas.Handle, 0,0, ExtractIcon(GetModuleHandle(0), ExpandConstant(File), nIcon), Size, Size,0,0,3); end; end;
End;
Procedure ObjectOnClick(Sender: TObject);
Begin
Case TObject(Sender) of { нажатие объекта}
MessageLabel: MessageForm.Hide;
end;
End;
Procedure Message(String: String; AIndex, IconSize: Integer); Begin { размеры формы подстраиваются под текст сообщения}
MessageLabel.Left:= IconSize + 10 + IconSize/3; MessageLabel.Top:= 10; MessageLabel.Font.Size:= WizardForm.Font.Size + 1
MessageLabel.Caption:= String; { авторазмер} if MessageLabel.Height < IconSize then MessageLabel.Height:= IconSize
MessageForm.SetBounds((WizardForm.ClientWidth - (MessageLabel.Width + MessageLabel.Left + 12))/2, (WizardForm.ClientHeight - (MessageLabel.Height + MessageLabel.Top + 8))/2, MessageLabel.Width + MessageLabel.Left + 12, MessageLabel.Height + MessageLabel.Top + 8)
DrawIcon(MessageForm, '{sys}\shell32.dll', AIndex, 10, 10, IconSize, MessageForm.Color);
MessageForm.Show;
End;
Procedure CurPageChanged(CurPageID: Integer);
Begin
MessageForm.Hide;
Case CurPageID of
wpWelcome: if not RegValueExists(HKLM, 'Software\Blizzard Entertainment\Starcraft', 'InstallPath') then begin
Message(ExpandConstant('{cm:NotFound}'), 221, 32)
WizardForm.NextButton.Caption:= ExpandConstant('{cm:Continue}')
end;
end;
End;
Procedure InitializeWizard;
Begin
MessageForm:= TPanel.Create(WizardForm)
MessageForm.Parent:= WizardForm;
MessageForm.Color:= $E1FFFF; MessageForm.BevelInner:= bvLowered;
MessageLabel:= CreateLabel(MessageForm, true, false, true, 'Arial', [], $402010, 0, 0, 0, 0)
MessageLabel.OnClick:= @ObjectOnClick
End;
[/more], который при отсутствии ключа выводит сообщение, похожее на подсказку Windows.
2Dem - попробуй так: StringChange(S, ExtractFileDrive(S), '')
P.S. если файл game.ini правильный, т.е содержит секции, то можно вместо SaveStringToFile использовать SetIniString.