-
Content Count
247 -
Joined
-
Last visited
Posts posted by ventura69
-
-
Уважаемые, очередной дурной вопрос.
Накалякал такие строчки, для вывода изображения выбираемого ресурса:
begin
if not GetCursorPos(pt) then Exit;
InfoPic.Bitmap.LoadFromFile(PicFilePath);
try
with PicForm do
begin
Parent:=WizardForm
SetBounds(ScaleX(500), ScaleY(17), InfoPic.Width, InfoPic.Height);
Show;
end;
finally
SetFocus(WizardForm.Handle);
end;
end;Это я привязал координаты к окну Визарда. На разных разрешениях монитора, соответственно, картинка будет "гулять". А как привязать к ComponentsList, который у меня располагается в том же окне слева?
Пробую привязать по-всячески - ругается. Возможно такое, или я опять не то что творю?
-
@Kotyarko_O, я писал о старом добром твикере. У джопа может быть что угодно, не обязательно он. Вроде где-то видел альтернативную поделку на твикер, может у него и видел. У протанков вообще как такового твикера нет, там они сами твикуют игру или какие свои скрипты/программы юзают, которые по сути то же самое делают что и твикер. Могу ошибаться так как смотрел мельком.
Не ошибаетесь, вроде. После выбора слабой графики, ПроТанки забрасывают папку particles, полную скриптов, в которой и лежат все настройки упрощения графики. При унинстале сия папка благополучно удаляется. Клиент не меняется.
Если я правильно понял. Только что на себе поэкспериментировал.
-
Але, господа, вот читаю я вас и у меня вопрос - вы твикером то пользовались? А то обсуждаете, а как работает не знаете. По умолчанию твикер идёт с унпакером, и сначала запускать надо унпакер, который сделает преобразования с ресурсами (ибо твикер не патчит pkg-архивы), а вот потом уже и твикер можно запускать. Есть и второй вариант, мона с официального сайта твикера скачать уже готовый преобразованный архив и его извлечь перед запуском твикера.
Я не пользовался, потому и предложил вариант на рассмотрение, а не как инструкцию к действиям.
Спасибо за науку, разъяснили!
-
Если я правильно понял он хочет сделать встроенный воттвикер в сетап, для этого как минимум нужно знать команды и создавать новую страницу!
А можно так: прописываем моды, которые он хочет поставить, в секцию [Run] втыкаем запуск ВотТвикера по галочке? Моды установятся, потом пройдет предложение запуска ВотТвикера (можно оформить окошечко всякими рюшечками-картинками), если пользователь захочет его запустить, то запустит, если нет, то выход из сетапа.
Коряво, конечно, придумал, но интересно мнение профессионалов (не серчайте, если сморозил глупость - я только учусь)...
-
Если именно тем что оставил я.
То вам лучше будет заменить на "PAnsiChar" так как он использует юни-код в шифровании файлов и не может распознать "PChar" от Анси-кода...
Именно так и сделал. Спасибо за консультацию.
-
Если вы пользуетесь тем что оствил я, то он Юникод, и для него необходимо указывать PAnsiChar.
А если вы скачали от куда-то другой, и он Анси, то там будет использоваться PChar...
Можно методом замены, если вы пользуетесь одним и тем же инно постоянно, иначе при переустановке проги на другую вам придется снова заменять)
Я пользуюсь именно Вашим.
То есть, если я правильно понял, то лучше (универсальнее) просто задать PChar, как это было указано выше?
-
-
Внешне всё норм)
Да оно еще и работает, только у меня уже отпала охота засовывать mp3 в установщик: слишком он пухнет от него. Понял принцип, разобрался что к чему, оно и ладно - мне и этого хватит
-
Разобрался, как запускается музыка в скрипте из поста от Ckaym. В данном виде, как он выложен, скрипт не работает.
Нашел одну ошибку в нем: тип PChar (он не поддерживается прогой) надо заменить на тип PAnsiChar. И тогда он начинает работать.
Тут бросали скрипт, с подключенной библиотекой проигрывания *.mp3.
Вот такая штука получилась в результате для запуска музыки при старте инсталлятора. Гляньте, уважаемый. Комментарии и корректировки будут?
//подключаем ресурсы и библиотеки\\
[Files]
Source: "bass.dll"; DestDir: {tmp}; Flags: ignoreversion dontcopy nocompression
Source: "innocallback.dll"; DestDir: {tmp}; Flags: ignoreversion dontcopy nocompression
Source: "Music.MP3"; DestDir: {tmp}; Flags: ignoreversion dontcopy nocompression//задаем процедуры, переменные и константы\\
type
HSTREAM=DWORD;
TTimerProc=procedure(uTimerID,uMessage:UINT;dwUser,dw1,dw2:DWORD);
const
Indent=25;
var
MP3List:TStringList;
CurrentMP3:integer;
hMP3:HWND;
TimerID:LongWord;//создаем функции\\
function SetTimer(hWnd:HWND;nIDEvent,uElapse:UINT;lpTimerFunc:LongWord{TFNTimerProc}):UINT; external '[email protected] stdcall delayload';
function BASS_ChannelIsActive(Handle:HWND):DWORD; external 'BASS_ChannelIsActive@files:bass.dll stdcall';
function BASS_SetConfig(Option,Value:DWORD):DWORD; external 'BASS_SetConfig@files:bass.dll stdcall';
function BASS_Init(Device:integer;Freq,Flags:DWORD;Win:HWND;CLSID:integer):boolean; external 'BASS_Init@files:bass.dll stdcall delayload';
function BASS_StreamCreateFile(Mem:BOOL;f:PAnsiChar;Offset:DWORD;Length:DWORD;Flags:DWORD):HSTREAM; external 'BASS_StreamCreateFile@files:bass.dll stdcall';
function BASS_StreamFree(Handle:HWND):boolean; external 'BASS_StreamFree@files:bass.dll stdcall';
function BASS_ChannelPlay(Handle:HWND;Restart:boolean):boolean; external 'BASS_ChannelPlay@files:bass.dll stdcall';
function BASS_Start: Boolean; external 'BASS_Start@files:bass.dll stdcall';
function BASS_Stop: Boolean; external 'BASS_Stop@files:bass.dll stdcall';
function BASS_Free: Boolean; external 'BASS_Free@files:bass.dll stdcall delayload';
function WrapTimerProc(CallBack:TTimerProc;ParamCount:integer):LongWord; external 'wrapcallback@files:innocallback.dll stdcall';//ну, и сам код запуска музыки\\
procedure TimerTick(uTimerID,uMessage:UINT;dwUser,dw1,dw2:DWORD);
begin
if BASS_ChannelIsActive(hMP3)=0 then begin
BASS_Stop;
BASS_StreamFree(hMP3);
hMP3:=BASS_StreamCreateFile(False,PAnsiChar(MP3List.Strings[CurrentMP3]),0,0,0);
BASS_Start;
if hMP3<>0 then
if BASS_ChannelPlay(hMP3,True) then begin
CurrentMP3:=CurrentMP3+1;
if CurrentMP3>MP3List.Count-1 then CurrentMP3:=0;
end;
end;
end;
function InitializeSetup:boolean;
begin
ExtractTemporaryFile('Music.MP3');
MP3List:=TStringList.Create;
MP3List.Add(ExpandConstant('{tmp}')+'\Music.MP3');
CurrentMP3:=0;
Result:=True;
end;
procedure InitializeWizard;
begin
TimerID:=SetTimer(0,0,500,WrapTimerProc(@TimerTick,5));
BASS_Init(-1,44100,0,0,0);
BASS_SetConfig(5,100);
BASS_SetConfig(6,100);
end;
procedure DeinitializeSetup;
begin
BASS_Stop;
BASS_Free;
MP3List.Free;
end;- 1
-
[Code] procedure CurPageChanged(CurPageID: Integer); begin if CurPageID=wpWelcome then begin ..... ..... end;
Тут бросали скрипт, с подключенной библиотекой проигрывания *.mp3.Дадада! Именно его сейчас и изучаю. Спасибо!
-
А какое именно действие тебе нужно сюда впиндюхать?
Если честно: пока не знаю. Просто интересно. Как запускать по окончании установки понял, а как перед началом - не понял. Для общего развития.
Или вот: при запуске инсталятора запускать mp3 Вивальди-Времена года (под него думается хорошо). А процесс выбора у меня может тянуться долго...
-
[member='Ventura6
Так можно прописать всё подобное. Действительно меньше места будет занимать.
Угу. Понял. Я не трогал эти строки - их создавал в редакторе форм. Ну и кое что правил, так как по умолчанию лезли лишние окошки и на отключение не хотели реагировать. Пришлось размер делать 0.
Плохой я видать ученик: Вы мне уже указывали на это, а я тупанул и не попробовал применить Ваши слова на практике... Спасибо за науку! В понедельник на работе буду править. По Вашему действительно красивее и короче.
Может еще подскажете (я пока не разобрался): Run - выполняется в конце инсталлятора, но до закрытия оного. А как запустить процесс вместе (и параллельно) с запуском инсталлятора? К примеру: запустили инстал и пошло проигрывание музыки/открытие текстового файла/запуск приложения, не имеющего расширения .exe и пр.
P. S. В предыдущем посте подкорректировал строки в соответствии с Вашим комментарием. Правда, появилось еще несколько вопросов по некоторым другим строкам, но это попробую сам проработать и разобраться
-
Добрый день, уважаемые знатоки
Сварганил себе очень ценную програмулю для работы (с вашей помощью). По долгу службы приходится работать с огромным количеством документации, от которой в глазах рябит (модели, чертежи, развертки, изменения, дополнения и пр.). Функции данного инсталятора (установщика): выдрать нужную документацию (при наведении на строку выводится картинка детали) и разложить по нужным папкам для дальнейшей работы с ними. Жизнь облегчилась сразу весьма солидно! Запихал в него порядка 300мБ инфы, на выходе получился шустрый файлик в 6,4 мБ.
Знатоки, гляньте, какие комментарии? Где мог накосячить или есть лучшее решение?
Прилагаю сам скриптик. Естественно не весь (выдрал сами ресурсы, чтобы не выводилась на экран портянка...
; Скрипт создан через Мастер Inno Setup Script.
; ИСПОЛЬЗУЙТЕ ДОКУМЕНТАЦИЮ ДЛЯ ПОДРОБНОСТЕЙ ИСПОЛЬЗОВАНИЯ INNO SETUP!
#define MyAppName "Мультипродукт"
#define MyAppVersion "1.5"
#define MyAppPublisher "ХХХ"
#define MyAppURL "http://www.ХХХ.ru/"
[setup]
WizardImageFile=Files\fonstola.ru-81854.bmp
; Примечание: Значение AppId идентифицирует это приложение.
; Не используйте одно и тоже значение в разных установках.
; (Для генерации значения GUID, нажмите Инструменты | Генерация GUID.)
AppId={{ХХХХХХ-174F-4677-AB73-3C3980F5299A}
AppName={#MyAppName}
AppVersion={#MyAppVersion}
;AppVerName={#MyAppName} {#MyAppVersion}
AppPublisher={#MyAppPublisher}
AppPublisherURL={#MyAppURL}
AppSupportURL={#MyAppURL}
AppUpdatesURL={#MyAppURL}
DefaultDirName=c:\Заказ\{#MyAppName}
SetupIconFile=Files\wot_ico.ico
//====={ Лицензия }=====\\
LicenseFile=licensia.txt
//===={ Отключение диалога }====\\
DirExistsWarning=no
//===={ Не создавать запись в меню Установка и удаление программ Панели управления }==== \\
CreateUninstallRegKey=no
//===={ Не создавать унинстал }====\\
Uninstallable=no
DefaultGroupName={#MyAppName}
DisableProgramGroupPage=yes
OutputBaseFilename=Мультипродукт
//====={ Отключение последней страницы}====\\
DisableFinishedPage=yes
;Compression=lzma
;SolidCompression=yes
//====={ Сжатие сетапа }=====\\
InternalCompressLevel=ultra64
Compression=lzma2/ultra64
SolidCompression=true
[Languages]
Name: "default"; MessagesFile: "compiler:Default.isl"
//====={ Сюда прописываем те файлы и папки которые закинул в Mods }=====\\
[Types]
Name: custom; Description: Full installation; Flags: iscustom
[Components]
//Стойка 1\\
Name: KMP; Description: Стойка; Types: custom; Flags: fixed
Name: KMP\DV; Description: 1. Декор верхний; Flags: checkablealone ;
// Здесь много - много буковков и позиций........................
//Стойка 2\\
Name: KMN; Description: Вторая стойка; Types: custom; Flags: fixed
Name: KMN\DG; Description: 1. Декорпанель гидромодуля; Flags: checkablealone ;
// Здесь много - много буковков и позиций........................
//Гидромодуль\\
Name: KMG; Description: Гидромодуль; Types: custom; Flags: fixed
Name: KMG\GO; Description: 1. Основание гидромодуля; Flags: checkablealone ;
// Здесь много - много буковков и позиций........................
//Блок электроники\\
Name: KME; Description: Блок электроники; Types: custom; Flags: fixed
Name: KME\EB; Description: 1. Корпус блока электроники; Flags: checkablealone ;
// Здесь много - много буковков и позиций........................
[Files]
;{ ISFormDesignerFilesBegin } // Не удалять эту строку!
;// Не изменять эту секцию. Она создана автоматически.
DestName: "WizardForm.BitmapImage1.bmp"; Source: "Files\logo.bmp"; Flags: dontcopy solidbreak
;// Не изменять эту секцию. Она создана автоматически.
;{ ISFormDesignerFilesEnd } // Не удалять эту строку!
//Картинки\\
Source: c:\Мультипродуктовые\files\01 декор верхний.bmp; Flags: dontcopy noencryption noencryption
// Здесь ооооочень много - много буковков и позиций........................
//Стойка 1\\
Source: "MODS\ 01 декор верхний\*"; DestDir: "{app}\Стойка 1"; Flags: ignoreversion recursesubdirs createallsubdirs; Components: KMP\DV;
// Здесь много - много буковков и позиций........................
//Стойка 2\\
Source: "MODS\Декорпанель гидромодуля\*"; DestDir: "{app}\Стойка 2"; Flags: ignoreversion recursesubdirs createallsubdirs; Components: KMN\DG;
// Здесь много - много буковков и позиций........................
//Гидромодуль\\
Source: "MODS\01.001-02 фундрама без пуклевки\*"; DestDir: "{app}\Гидромодуль"; Flags: ignoreversion recursesubdirs createallsubdirs; Components: KMG\GO;
// Здесь много - много буковков и позиций........................
//Блок электроники\\
Source: "MODS\03.15 корпус блока электроники\*"; DestDir: "{app}\Блок электроники\Корпус блока электроники"; Flags: ignoreversion recursesubdirs createallsubdirs; Components: KME\EB;
// Здесь много - много буковков и позиций........................
[Run]
Filename: "{app}"; Flags: nowait shellexec skipifsilent
{ RedesignWizardFormBegin } // Не удалять эту строку!
// Не изменять эту секцию. Она создана автоматически.
var
BitmapImage1: TBitmapImage;
procedure LogoOnClick(Sender: TObject);
var ResCode: Integer;
begin
ShellExec('', '{#MyAppURL}', '' , '', SW_SHOW, ewNoWait, ResCode)
end;
procedure CompOnMouseLeave(Sender: TObject); forward;
procedure RedesignWizardForm;
begin
{ BitmapImage1 }
BitmapImage1 := TBitmapImage.Create(WizardForm);
with BitmapImage1 do
begin
Parent := WizardForm;
Left := ScaleX(0);
Top := ScaleY(320);
Width := ScaleX(233);
Height := ScaleY(41);
Cursor := crHand;
ExtractTemporaryFile('WizardForm.BitmapImage1.bmp');
Bitmap.LoadFromFile(ExpandConstant('{tmp}\WizardForm.BitmapImage1.bmp'));
OnClick := @LogoOnClick;
end;
WizardForm.WizardBitmapImage.Width := ScaleX(497);
WizardForm.WizardBitmapImage.Height := ScaleY(312);
WizardForm.WelcomeLabel2.Enabled := False;
WizardForm.WelcomeLabel2.Height := ScaleY(0);
WizardForm.WelcomeLabel1.Enabled := False;
WizardForm.WelcomeLabel1Height := ScaleY(0);
WizardForm.WizardBitmapImage2.Width := ScaleX(500);
WizardForm.RunList.Height := ScaleY(0);
WizardForm.NoRadio.Height := ScaleY(0);
WizardForm.YesRadio.Height := ScaleY(0);
WizardForm.FinishedLabel.Enabled := False;
WizardForm.FinishedLabel.Width := ScaleX(0);
WizardForm.FinishedLabel.Height := ScaleY(0);
WizardForm.FinishedHeadingLabel.Enabled := False;
WizardForm.FinishedHeadingLabel.Height := ScaleY(0);
{ ReservationBegin }
// Вы можете добавить ваш код здесь.
{ ReservationEnd }
end;
// Не изменять эту секцию. Она создана автоматически.
{ RedesignWizardFormEnd } // Не удалять эту строку!
#ifdef UNICODE
#define A "W"
#else
#define A "A"
#endif
const
UNDEF_INDEX = -777;
ALPHA_BLEND_LEVEL = 255; // max=Byte=255
WS_EX_LAYERED = $80000;
WS_EX_TRANSPARENT = $20;
LWA_COLORKEY = 1;
LWA_ALPHA = 2;
GWL_EXSTYLE = (-20);
var
InfoPic: TBitmapImage;
LastIndex: Integer;
TempPath: String;
PicForm: TForm;
type
COLORREF = DWORD;
function GetCursorPos(var lpPoint: TPoint): BOOL; external '[email protected] stdcall';
function SetLayeredWindowAttributes(Hwnd: THandle; crKey: COLORREF; bAlpha: Byte; dwFlags: DWORD): Boolean; external '[email protected] stdcall';
function GetWindowLong(hWnd: HWND; nIndex: Integer): Longint; external 'GetWindowLong{#A}@user32.dll stdcall';
function SetWindowLong(hWnd: HWND; nIndex: Integer; dwNewLong: Longint): Longint; external 'SetWindowLong{#A}@user32.dll stdcall';
function SetFocus(hWnd: HWND): HWND; external '[email protected] stdcall';
function MyDirName(S:String): String;
var
InsPath: String;
er: boolean;
myFile:String;
begin
WizardForm.WizardBitmapImage.Width := ScaleX(502);
WizardForm.WelcomeLabel2.Visible := False;
WizardForm.WelcomeLabel1.Visible := False;
WizardForm.WizardSmallBitmapImage.Left := ScaleX(0);
WizardForm.WizardSmallBitmapImage.Width := ScaleX(502);
WizardForm.WizardSmallBitmapImage.Height := ScaleY(70);
WizardForm.PageDescriptionLabel.Visible := False;
WizardForm.PageNameLabel.Visible := False;
WizardForm.WizardBitmapImage2.Width := ScaleX(502);
WizardForm.FinishedLabel.Visible := False;
WizardForm.FinishedHeadingLabel.Visible := False;
end;
procedure ShowPicHint(const PicFilePath: String);
var
pt: TPoint;
begin
if not GetCursorPos(pt) then Exit;
InfoPic.Bitmap.LoadFromFile(PicFilePath);
try
with PicForm do
begin
SetBounds(ScaleX(pt.x + 16), ScaleY(pt.y + 7), InfoPic.Width, InfoPic.Height);
Show;
end;
finally
SetFocus(WizardForm.Handle);
end;
end;
procedure CompOnItemMouseMove(Sender: TObject; X, Y: Integer; Index: Integer; Area: TItemArea);
var
UndefPic: String;
begin
if Index = -1 then Exit;
if Index = LastIndex then Exit;
try
case TNewCheckListBox(Sender).ItemCaption[index] of
'1. Декор верхний': UndefPic := '01 декор верхний.bmp';
// Здесь снова оооочень много - много буковков и позиций........................
else
begin
LastIndex := UNDEF_INDEX;
PicForm.Hide;
Exit;
end;
end;
if not FileExists(TempPath + UndefPic) then ExtractTemporaryFile(UndefPic);
ShowPicHint(TempPath + UndefPic);
finally
LastIndex := Index;
end;
end;
procedure CompOnMouseLeave(Sender: TObject);
begin
PicForm.Hide;
LastIndex := -1;
end;
procedure InitInfo();
begin
WizardForm.ComponentsList.OnItemMouseMove := @CompOnItemMouseMove;
WizardForm.ComponentsList.OnMouseLeave := @CompOnMouseLeave;
TempPath := AddBackslash(ExpandConstant('{tmp}'));
LastIndex := UNDEF_INDEX;
PicForm := TForm.Create(WizardForm)
with PicForm do
begin
BorderStyle := bsNone;
FormStyle := fsStayOnTop;
InfoPic := TBitmapImage.Create(PicForm)
with InfoPic do
begin
Parent := PicForm;
AutoSize := True;
end;
end;
SetWindowLong(PicForm.Handle, GWL_EXSTYLE, GetWindowLong(PicForm.Handle, GWL_EXSTYLE) or WS_EX_LAYERED);
SetLayeredWindowAttributes(PicForm.Handle, 0, ALPHA_BLEND_LEVEL, LWA_ALPHA);
end;
procedure InitializeWizard();
begin
WizardForm.ComponentsList.ItemFontStyle[0] := [fsBold, fsUnderline];
WizardForm.ComponentsList.ItemFontStyle[41] := [fsBold, fsUnderline];
WizardForm.ComponentsList.ItemFontStyle[71] := [fsBold, fsUnderline];
WizardForm.ComponentsList.ItemFontStyle[99] := [fsBold, fsUnderline];
RedesignWizardForm;
InitInfo();
end;
[iSFormDesigner]
WizardForm=FF0A005457495A415244464F524D0030102804000054504630F10B5457697A617264466F726D0A57697A617264466F726D0C436C69656E744865696768740368010B436C69656E74576964746803F1010C4578706C696369744C65667402000B4578706C69636974546F7002000D4578706C6963697457696474680301020E4578706C69636974486569676874038E010D506978656C73506572496E636802600A54657874486569676874020D00F202010C544269746D6170496D6167650C4269746D6170496D61676531044C656674020003546F7003400105576964746803E90006486569676874022906437572736F72070B637248616E64506F696E740A4269746D617046696C65060E46696C65735C6C6F676F2E626D70074F6E436C69636B0710436F6D704F6E4D6F7573654C656176650000F10C544E65774E6F7465626F6F6B0D4F757465724E6F7465626F6F6B00F110544E65774E6F7465626F6F6B506167650B57656C636F6D65506167650D4578706C69636974576964746803F1010E4578706C6963697448656967687403390100F10C544269746D6170496D6167651157697A6172644269746D6170496D61676505576964746803F101064865696768740338010D4578706C69636974576964746803F1010E4578706C696369744865696768740338010000F10E544E6577537461746963546578740D57656C636F6D654C6162656C3206486569676874020007456E61626C6564080E4578706C6963697448656967687402000000F10E544E6577537461746963546578740D57656C636F6D654C6162656C3106486569676874020007456E61626C6564080E4578706C696369744865696768740200000000F110544E65774E6F7465626F6F6B506167650C46696E6973686564506167650D4578706C69636974576964746803F1010E4578706C6963697448656967687403390100F10C544269746D6170496D6167651257697A6172644269746D6170496D6167653205576964746803F4010D4578706C69636974576964746803F4010000F110544E6577436865636B4C697374426F780752756E4C6973740648656967687402000E4578706C6963697448656967687402000000F10F544E6577526164696F427574746F6E074E6F526164696F0648656967687402000E4578706C6963697448656967687402000000F10F544E6577526164696F427574746F6E08596573526164696F0648656967687402000E4578706C6963697448656967687402000000F10E544E6577537461746963546578740D46696E69736865644C6162656C055769647468020006486569676874020007456E61626C6564080D4578706C69636974576964746802000E4578706C6963697448656967687402000000F10E544E6577537461746963546578741446696E697368656448656164696E674C6162656C06486569676874020007456E61626C6564080E4578706C6963697448656967687402000000000000
Если кому пригодится какой кусок из кода - буду весьма рад!
Персональная ОГРОМНЕЙШАЯ благодарность Kotyarko_O и StranikS_Scan за помощь, комментарии и кучу толковых подсказок!!!
-
@ventura69, цвет нельзя менять
Мдэ... Печально. Спасибо. Значит пойдем другим путем, как обещал своей маме величайший махинатор.
-
fsXXX это константы для свойств шрифта FontStyle,
а clYYY это константы цвета шрифта, там свойство другое должно быть подозреваю FontColor
WizardForm.ComponentsList.ItemFontColor[0] := [clGrayText];
пишет, что не может идентифицировать FontColor
Это я уже пробовал :-)
- 1
-
Уважаемые, очередной вопрос по шрифту.
WizardForm.ComponentsList.ItemFontStyle[0] := [fsBold, fsUnderline];
Это мы его сделали жирным и с подчеркиванием (первая строка в данном примере). А как ему цвет сменить? Пытался прикрутить нечто подобное:
WizardForm.ComponentsList.ItemFontStyle[0] := [fsBold, fsUnderline, clMaroon];
но на последнюю константу ругается. Может кто умный чего подсказать? Что я не так делаю?
-
Одной строкой лучше будет, меньше места (когда код занимает большое количество места и перед тобой становится выбор записать что-то одной строкой или 4-мя - рациональнее будет выбрать однострочный вариант).
Так в том то и дело, что в одну строчку работать не захотел - все время ругался.
Разобрался. Ваш вариант так же работает, как и мой. Я, дурында, с орфографией напутал.
ПРИЗНАЮ: Ваш вариант лучше.
-
попробуй так:
Хм... Даже не подумал о таком варианте.. Пытался напрямую втулить... Он на меня потому и ругался, видать!
Спасибо большое. Буду пробовать.
UP. Все получилось! Но маленький комментарий.
Если создаем через визард инсталятор и в редакторе форм весь внешний вид правим, то проще так. Вставляем в секцию [Код] такую процедуру в любом месте между уже созданных:
.........
with WizardForm.ComponentsList do
begin
ItemFontStyle[0] := [fsBold];
end;
- 1
-
Уважаемые, а вот такой вопросец.
Как изменить внешний вид шрифта на одном из компонентов? Пример для наглядности моего вопроса под спойлером.
[Tasks]
Name: "Original"; Description: "F.E.A.R."; GroupDescription: "Какая версия игры установлена?"; Flags: exclusive unchecked;
Name: "EP"; Description: "F.E.A.R.: Extraction Point"; GroupDescription: "Какая версия игры установлена?"; Flags: exclusive; -
Ты про подобное?
Source: "MODS\PRICEL\UGN\*"; DestDir: "{app}"; Flags: ignoreversion recursesubdirs createallsubdirs; BeforeInstall: AddToMemo(); Components: KMP\PR\UGN;
да.
Если правильно Вас понял, то попробуем на пальцах:
Source: "MODS\PRICEL\UGN\*"; - это расположение ресурса, который будем загружать. Т. е. где он лежит при создании инсталятора.
DestDir: "{app}"; - это папка, куда он будет устанавливать. {app} - путь, указанный в начале скрипта, для распаковки всех файлов (к примеру c:\Games\World_of_Tanks\). Если надо вложить еще глубже, то можно прописать DestDir: "{app}\res_mods". Тогда ресурс будет заброшен глубже на одну папку.
-
Парни вот несколько вопросов тему почитал примеры посмотрел
что не понял несколько моментов
- Создаю новый проект следую подсказкам (название, сайт, компания и .т.д)вот там же добавлять моды?Это создается основа как понимаю?
- Потом идет работа исключительно со скриптом. В нем же можно также добавить тот или иной мод или удалить?
- Или просто создаешь пустой скрипт и все пишешь с нуля?
Вот для таких вопросов я и выложил свой пример. И именно на сии вопросы и ответил в нем, уважаемый.
1. Да. Да.
2. Да. Плюс пользуетесь редактором форм. В нем задаете фон, лого, кнопки, экраны и пр.
3. Ни в коем случае, если не обладаете полными знаниями программиста.
-
а зачем?
Я не прописывал относительный путь к ресурсам. В теле скрипта по умолчанию создается абсолютный путь (пример: с:\ Установщик). У уважаемого автора форума в теле скрипта прописан относительный путь (можно забросить папку в любое место и скрипт исполнится). Не стал сбивать с толку потенциальных потребителей. Я пытался показать простоту создания установщика. Сначала надо понять общий принцип работы программы, чтобы потом самостоятельно (учиться у кого-то) постигать создание красивого скрипта (а не тупо использовать чужой код).
Еще могу добавить, что хорошим подспорьем в деле освоения скриптов являются статьи "Делфи для начинающих". К примеру, такие. Помогают понять работу с оболочкой (создание форм, общий принцип создания переменных и пр.)
- 1
-
Уважаемые, для начала еще раз огромное спасибо автору форума! Долго искал подобную прогу (ИнсталШилд дико не понравился) и помощь по ней. Теперь доволен и счастлив
На последних страницах народ начал обижаться, что помощи нет и скриптами никто не делится...
Я далеко не программист, но освоил на любительском уровне эту оболочку за несколько дней. Именно таким путем, как это описал постом выше уважаемый -zav-. Даже себе для работы уже сварганил одну очень ценную для себя програмулю, которая лихо облегчает мне жизнь.
Смысла выкладывать ее здесь нет из-за ее специфичности, а вот более простой и наглядный пример создания простого инсталятора (за основу внешнего вида и модов взят инсталятор от автора форума). Постарался закоментить максимум строк в инсталяторе. Сварганил его за 5 минут, дольше комментарии писал..
Архив надо распаковать в корень диска С:\ Не стал я изгаляться, как автор, прописывая универсальный путь, так как ориентировал его на новичков, типа меня, чтобы посмотрели, прикинули что к чему и начали сами разбираться. Основная работа идет с редактором форм (автор форума забыл почему-то упомянуть о нем. Или я был невнимателен).
Знатоки, не критикуйте шибко. Я новичек и делал этот архив для новичков. Если кому-то поможет, буду очень рад.
- 2
-
попробуй так например:
BtnPanel:=TPanel.Create(WizardForm) with BtnPanel do begin Cursor:=crHand OnClick:=@logoOnClick Parent:=WizardForm SetBounds(ScaleX(30), WizardForm.Bevel.Top + ScaleY(-1), 179, 31);
ну и потихоньку вверх... -10...-50...-100 и т.д.
Если не правильно понял, то извиняй
Вот я дурень то!!! Видать старею...
Спасибо огромнейшее! Поняли Вы меня правильно. И даже если это не совсем то что нужно, то натолкнули на идею. Побежал пробовать...
Еще раз спасибо!
P. S. Решил иначе: в редакторе форм создал BitmapImage, задал ему нужную картинку и прописал на нее действие. Активная картинка есть, ссылка работает, кнопки, как таковой нет. Ни куда теперь не съезжает. Если кому пригодится эта инфа, то и замечательно!
Создание инсталляторов для модпаков на базе Inno Setup
in Modding General Discussion
Posted
Спасибо, но Вы меня не так поняли. Картинка должна располагаться правее на 5 от ComponentsList, а не в нем :-)