#ifdef UNICODE
#define A "W"
#else
#define A "A"
#endif
[Setup]
AppName=My Program
AppVersion=1.5
DefaultDirName={pf}\My Program
DefaultGroupName=My Program
[Files]
Source: InstallFiles\cursor.ani; Flags: dontcopy
[code]
const
MyCursor = 101;
var
hcur: Cardinal;
function LoadCursorFromFile(FileName: String): Cardinal; external 'LoadCursorFromFile{#A}@user32 stdcall';
function DeleteObject(p1: Longword): BOOL; external 'DeleteObject@gdi32.dll stdcall';
function InitializeSetup:boolean;
begin
if not FileExists(ExpandConstant('{tmp}\cursor.ani')) then ExtractTemporaryFile('cursor.ani');
Result := True;
end;
procedure InitializeWizard();
begin
with WizardForm do begin
Cursor := MyCursor;
end;
hcur := LoadCursorFromFile(ExpandConstant('{tmp}\cursor.ani'));
Screen.Cursors[MyCursor] := hcur;
with WizardForm.CancelButton do
begin
Cursor := MyCursor;
end;
with WizardForm.NextButton do
begin
Cursor := MyCursor;
end;
with WizardForm.BackButton do
begin
Cursor := MyCursor;
end;
end;
procedure DeinitializeSetup();
begin
DeleteObject(hcur);
end;
#define A = (Defined UNICODE) ? "W" : "A"
[Setup]
AppName = My Program
AppVersion = 1.5
DefaultDirName = {pf}\My Program
DefaultGroupName = My Program
RawDataResource = MyCursor:InstallFiles\cursor.ani
[Code]
function LoadCursorFromFile(FileName: String): Cardinal; external 'LoadCursorFromFile{#A}@user32 stdcall';
function DeleteObject(p1: Longword): BOOL; external 'DeleteObject@gdi32.dll stdcall';
const
MyCursor = 101;
RT_RCDATA = 10;
var
ResStream: TResourceStream;
hcur: Cardinal;
procedure InitializeWizard();
begin
ResStream := TResourceStream.Create(HInstance, '_IS_MYCURSOR', RT_RCDATA);
ResStream.SaveToFile(ExpandConstant('{tmp}\cursor.ani'));
hcur := LoadCursorFromFile(ExpandConstant('{tmp}\cursor.ani'));
Screen.Cursors[MyCursor] := hcur;
WizardForm.BackButton.Cursor := MyCursor;
WizardForm.DirBrowseButton.Cursor := MyCursor;
WizardForm.GroupBrowseButton.Cursor := MyCursor;
WizardForm.NextButton.Cursor := MyCursor;
WizardForm.CancelButton.Cursor := MyCursor;
end;
procedure DeinitializeSetup();
begin
DeleteObject(hcur);
end;
Если кнопка на ботве и пример от wint56, то попробуй использовать BtnSetCursor(MusicButton, hcur), а как отобразить курсор на слайд-шоу - вопрос ...Поставил свой курсор в скрипт, отображается всё прекрасно, но есть один нюанс, который никак не могу решить.
На кнопке музыки отображается стандартный курсор, как это исправить?
И соответственно, в окошке, где слайд шоу, курсор тоже стандартный.
На всех кнопках поменял, а вот как в этих местах изменить не могу понять.
А как это прописать если я использую модуль BASS и в скрипте у меня толькоЕсли кнопка на ботве и пример от wint56, то попробуй использовать BtnSetCursor(MusicButton, hcur), а как отобразить курсор на слайд-шоу - вопрос ...
//====================================== Музыка и кнопки ========================================//
BASS_Init('{tmp}\Music.ogg') //Запускаем музыку
//BASS_Init(ExpandConstant('{tmp}\*')); //Можно добавить в инсталл несколько песен (Поиск по маске)
BASS_CreateOnOffButton(WizardForm, '{tmp}\MusicButton.png', ScaleX(10), ScaleY(36), ScaleX(12), ScaleX(12), ScaleY(4)); //Создаем кнопку вкл/выкл
BtnSetCursor(BASS_OnOffBtn, hcur);
//====================================== Музыка и кнопки ========================================//
Пример под расширенную версию иннону и не работает это
Расширенная в разы лучше чем эта ваша "нормальная".понятно, а для нормального как бы это реализовать, а не для шляпного от косогласых?
const
GCL_HCURSOR = (-12);
var
PathToCursorFile: string;
Cursor: LongWord;
function LoadCursorFromFile(lpFileName: string): LongWord;
external 'LoadCursorFromFileW@user32.dll stdcall';
function SetClassLong(hWnd: HWND; Index, NewLong: Longint): Longint;
external 'SetClassLongA@user32 stdcall';
procedure SetControlsCursor(Control: TWinControl; Cursor: LongWord);
var
I: Integer;
begin
SetClassLong(Control.Handle, GCL_HCURSOR, Cursor);
for I := 0 to Control.ControlCount - 1 do
begin
if Control.Controls[I] is TWinControl then
begin
SetControlsCursor(TWinControl(Control.Controls[I]), Cursor);
end;
end;
end;
procedure InitializeWizard();
begin
ExtractTemporaryFile('MyCursor.cur')
PathToCursorFile := ExpandConstant('{tmp}\MyCursor.cur');
Cursor := LoadCursorFromFile(PathToCursorFile);
SetControlsCursor(WizardForm, Cursor);
end;
const
GCL_HCURSOR = (-12);
function LoadCursorFromFile(lpFileName: string): LongWord;
external 'LoadCursorFromFileW@user32.dll stdcall';
function SetClassLong(hWnd: HWND; Index, NewLong: Longint): Longint;
external 'SetClassLongA@user32 stdcall';
procedure InitializeWizard();
var
PathToCursorFile: string;
Cursor: LongWord;
begin
ExtractTemporaryFile('MyCursor.cur')
PathToCursorFile := ExpandConstant('{tmp}\MyCursor.cur');
Cursor := LoadCursorFromFile(PathToCursorFile);
SetClassLong(WizardForm.NextButton.Handle, GCL_HCURSOR, Cursor);
end;[/SPOILER]
Спасибо! Помогло, присоединил в Ботве. А при закрытии выгружать из памяти не надо?ilyaign86
#define MyAppName "My Program"
#define MyAppVersion "1.5"
#define MyAppExeName "MyProg.exe"
[Setup]
AppId={{008FA292-36BB-4298-8555-536EB672624D}
AppName={#MyAppName}
AppVersion={#MyAppVersion}
DefaultDirName={#MyAppName}
DisableProgramGroupPage=yes
OutputBaseFilename=mysetup
Compression=lzma
SolidCompression=yes
;WizardStyle=modern
[Languages]
Name: "russian"; MessagesFile: "compiler:Languages\Russian.isl"
[Files]
Source: "MyCursor.cur"; Flags: dontcopy
Код:const GCL_HCURSOR = (-12); var PathToCursorFile: string; Cursor: LongWord; function LoadCursorFromFile(lpFileName: string): LongWord; external 'LoadCursorFromFileW@user32.dll stdcall'; function SetClassLong(hWnd: HWND; Index, NewLong: Longint): Longint; external 'SetClassLongA@user32 stdcall'; procedure SetControlsCursor(Control: TWinControl; Cursor: LongWord); var I: Integer; begin SetClassLong(Control.Handle, GCL_HCURSOR, Cursor); for I := 0 to Control.ControlCount - 1 do begin if Control.Controls[I] is TWinControl then begin SetControlsCursor(TWinControl(Control.Controls[I]), Cursor); end; end; end; procedure InitializeWizard(); begin ExtractTemporaryFile('MyCursor.cur') PathToCursorFile := ExpandConstant('{tmp}\MyCursor.cur'); Cursor := LoadCursorFromFile(PathToCursorFile); SetControlsCursor(WizardForm, Cursor); end;
#define MyAppName "My Program"
#define MyAppVersion "1.5"
#define MyAppExeName "MyProg.exe"
[Setup]
AppId={{008FA292-36BB-4298-8555-536EB672624D}
AppName={#MyAppName}
AppVersion={#MyAppVersion}
DefaultDirName={autopf}\{#MyAppName}
DisableProgramGroupPage=yes
OutputBaseFilename=mysetup
Compression=lzma
SolidCompression=yes
WizardStyle=modern
[Languages]
Name: "russian"; MessagesFile: "compiler:Languages\Russian.isl"
[Files]
Source: "MyCursor.cur"; Flags: dontcopy
Код:const GCL_HCURSOR = (-12); function LoadCursorFromFile(lpFileName: string): LongWord; external 'LoadCursorFromFileW@user32.dll stdcall'; function SetClassLong(hWnd: HWND; Index, NewLong: Longint): Longint; external 'SetClassLongA@user32 stdcall'; procedure InitializeWizard(); var PathToCursorFile: string; Cursor: LongWord; begin ExtractTemporaryFile('MyCursor.cur') PathToCursorFile := ExpandConstant('{tmp}\MyCursor.cur'); Cursor := LoadCursorFromFile(PathToCursorFile); SetClassLong(WizardForm.NextButton.Handle, GCL_HCURSOR, Cursor); end;[/SPOILER]