Jump to content
Korean Random

ventura69

User
  • Content Count

    247
  • Joined

  • Last visited

Posts posted by ventura69


  1. Уважаемые, очередной дурной вопрос.

    Накалякал такие строчки, для вывода изображения выбираемого ресурса:

    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, который у меня располагается в том же окне слева?

    Пробую привязать по-всячески - ругается. Возможно такое, или я опять не то что творю?


  2. @Kotyarko_O, я писал о старом добром твикере. У джопа может быть что угодно, не обязательно он. Вроде где-то видел альтернативную поделку на твикер, может у него и видел. У протанков вообще как такового твикера нет, там они сами твикуют игру или какие свои скрипты/программы юзают, которые по сути то же самое делают что и твикер. Могу ошибаться так как смотрел мельком.

    Не ошибаетесь, вроде. После выбора слабой графики, ПроТанки забрасывают папку particles, полную скриптов, в которой и лежат все настройки упрощения графики. При унинстале сия папка благополучно удаляется. Клиент не меняется.

    Если я правильно понял. Только что на себе поэкспериментировал. 


  3. Але, господа, вот читаю я вас и у меня вопрос - вы твикером то пользовались? А то обсуждаете, а как работает не знаете. По умолчанию твикер идёт с унпакером, и сначала запускать надо унпакер, который сделает преобразования с ресурсами (ибо твикер не патчит pkg-архивы), а вот потом уже и твикер можно запускать. Есть и второй вариант, мона с официального сайта твикера скачать уже готовый преобразованный архив и его извлечь перед запуском твикера.

     

    Я не пользовался, потому и предложил вариант на рассмотрение, а не как инструкцию к действиям.  :ok:

    Спасибо за науку, разъяснили!


  4. Если я правильно понял он хочет сделать встроенный воттвикер в сетап, для этого как минимум нужно знать команды и создавать новую страницу!

    А можно так: прописываем моды, которые он хочет поставить, в секцию [Run] втыкаем запуск ВотТвикера по галочке? Моды установятся, потом пройдет предложение запуска ВотТвикера (можно оформить окошечко всякими рюшечками-картинками), если пользователь захочет его запустить, то запустит, если нет, то выход из сетапа. 

    Коряво, конечно, придумал, но интересно мнение профессионалов (не серчайте, если сморозил глупость - я только учусь)... 


  5. Если именно тем что оставил я.

    То вам лучше будет заменить на "PAnsiChar" так как он использует юни-код в шифровании файлов и не может распознать "PChar" от Анси-кода...

     

    Именно так и сделал. Спасибо за консультацию. :ok:


  6. Если вы пользуетесь тем что оствил я, то он Юникод, и для него необходимо указывать PAnsiChar.

    А если вы скачали от куда-то другой, и он Анси, то там будет использоваться PChar...

     

    Можно методом замены, если вы пользуетесь одним и тем же инно постоянно, иначе при переустановке проги на другую вам придется снова заменять)

    Я пользуюсь именно Вашим.

    То есть, если я правильно понял, то лучше (универсальнее) просто задать PChar, как это было указано выше?


  7. Разобрался, как запускается музыка в скрипте из поста от Ckaym. В данном виде, как он выложен, скрипт не работает.

    Нашел одну ошибку в нем: тип PChar (он не поддерживается прогой) надо заменить на тип PAnsiChar. И тогда он начинает работать.


    Тут бросали скрипт, с подключенной библиотекой проигрывания *.mp3.

    Вот такая штука получилась в результате для запуска музыки при старте инсталлятора. Гляньте, уважаемый. Комментарии и корректировки будут? :ok:

    //подключаем ресурсы и библиотеки\\

    [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;

    • Upvote 1

  8.  

     

    А какое именно действие тебе нужно сюда впиндюхать?

    Если честно: пока не знаю. Просто интересно. Как запускать по окончании установки понял, а как перед началом - не понял. Для общего развития.

    Или вот: при запуске инсталятора запускать mp3 Вивальди-Времена года (под него думается хорошо). А процесс выбора у меня может тянуться долго...


  9. [member='Ventura6

    Так можно прописать всё подобное. Действительно меньше места будет занимать.

    Угу. Понял. Я не трогал эти строки - их создавал в редакторе форм. Ну и кое что правил, так как по умолчанию лезли лишние окошки и на отключение не хотели реагировать. Пришлось размер делать 0.

    Плохой я видать ученик: Вы мне уже указывали на это, а я тупанул и не попробовал применить Ваши слова на практике... Спасибо за науку! В понедельник на работе буду править. По Вашему действительно красивее и короче.

    Может еще подскажете (я пока не разобрался): Run - выполняется в конце инсталлятора, но до закрытия оного. А как запустить процесс вместе (и параллельно) с запуском инсталлятора? К примеру: запустили инстал и пошло проигрывание музыки/открытие текстового файла/запуск приложения, не имеющего расширения .exe и пр.

    P. S. В предыдущем посте подкорректировал строки в соответствии с Вашим комментарием. Правда, появилось еще несколько вопросов по некоторым другим строкам, но это попробую сам проработать и разобраться  :ok:


  10. Добрый день, уважаемые знатоки  :ok:

    Сварганил себе очень ценную програмулю для работы (с вашей помощью). По долгу службы приходится работать с огромным количеством документации, от которой в глазах рябит (модели, чертежи, развертки, изменения, дополнения и пр.). Функции данного инсталятора (установщика): выдрать нужную документацию (при наведении на строку выводится картинка детали) и разложить по нужным папкам для дальнейшей работы с ними. Жизнь облегчилась сразу весьма солидно! Запихал в него порядка 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 за помощь, комментарии и кучу толковых подсказок!!!


  11. fsXXX это константы для свойств шрифта FontStyle,

    а clYYY это константы цвета шрифта, там свойство другое должно быть подозреваю FontColor

    WizardForm.ComponentsList.ItemFontColor[0] := [clGrayText];

    пишет, что не может идентифицировать FontColor

    Это я уже пробовал :-)

    • Upvote 1

  12. Уважаемые, очередной вопрос по шрифту.

    WizardForm.ComponentsList.ItemFontStyle[0] := [fsBold, fsUnderline];

    Это мы его сделали жирным и с подчеркиванием (первая строка в данном примере). А как ему цвет сменить? Пытался прикрутить нечто подобное:

    WizardForm.ComponentsList.ItemFontStyle[0] := [fsBold, fsUnderline, clMaroon];

    но на последнюю константу ругается. Может кто умный чего подсказать? Что я не так делаю?


  13.  Одной строкой лучше будет, меньше места (когда код занимает большое количество места и перед тобой становится выбор записать что-то одной строкой или 4-мя - рациональнее будет выбрать однострочный вариант).

    Так в том то и дело, что в одну строчку работать не захотел - все время ругался.

    Разобрался. Ваш вариант так же работает, как и мой. Я, дурында, с орфографией напутал. 

    ПРИЗНАЮ: Ваш вариант лучше.


  14.  

    попробуй так:

    Хм... Даже не подумал о таком варианте.. Пытался напрямую втулить... Он на меня потому и ругался, видать! :ic:

    Спасибо большое. Буду пробовать.

    UP. Все получилось! Но маленький комментарий.

    Если создаем через визард инсталятор и в редакторе форм весь внешний вид правим, то проще так. Вставляем в секцию [Код] такую процедуру в любом месте между уже созданных:

    .........

    with WizardForm.ComponentsList do

      begin

        ItemFontStyle[0] := [fsBold];

      end;

    • Upvote 1

  15. Уважаемые, а вот такой вопросец.

    Как изменить внешний вид шрифта на одном из  компонентов? Пример для наглядности моего вопроса под спойлером.

    [Tasks]
    Name: "Original"; Description: "F.E.A.R."; GroupDescription: "Какая версия игры установлена?"; Flags: exclusive unchecked;
    Name: "EP"; Description: "F.E.A.R.: Extraction Point"; GroupDescription: "Какая версия игры установлена?"; Flags: exclusive;

  16.  

     

    Ты про подобное?

    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". Тогда ресурс будет заброшен глубже на одну папку.


  17.  

    Парни вот несколько вопросов тему почитал примеры посмотрел 

    что не понял несколько моментов 

    1. Создаю новый проект следую подсказкам (название, сайт, компания и .т.д)вот там же добавлять моды?Это создается основа как понимаю?
    2. Потом идет работа исключительно со скриптом. В нем же можно также добавить тот или иной мод или удалить? 
    3. Или просто создаешь пустой скрипт  и все пишешь с нуля?

     

    Вот для таких вопросов я и выложил свой пример. И именно на сии вопросы и ответил в нем, уважаемый.

    1. Да. Да.

    2. Да. Плюс пользуетесь редактором форм. В нем задаете фон, лого, кнопки, экраны и пр.

    3. Ни в коем случае, если не обладаете полными знаниями программиста.


  18. а зачем?

    Я не прописывал относительный путь к ресурсам. В теле скрипта по умолчанию создается абсолютный путь (пример: с:\ Установщик). У уважаемого автора форума в теле скрипта прописан относительный путь (можно забросить папку в любое место и скрипт исполнится). Не стал сбивать с толку потенциальных потребителей. Я пытался показать простоту создания установщика. Сначала надо понять общий принцип работы программы, чтобы потом самостоятельно (учиться у кого-то) постигать создание красивого скрипта (а не тупо использовать чужой код).

    Еще могу добавить, что хорошим подспорьем в деле освоения скриптов являются статьи "Делфи для начинающих". К примеру, такие. Помогают понять работу с оболочкой (создание форм, общий принцип создания переменных и пр.)

    • Upvote 1

  19. Уважаемые, для начала еще раз огромное спасибо автору форума! Долго искал подобную прогу (ИнсталШилд дико не понравился) и помощь по ней. Теперь доволен и счастлив :ok:

    На последних страницах народ начал обижаться, что помощи нет и скриптами никто не делится... 

    Я далеко не программист, но освоил на любительском уровне эту оболочку за несколько дней. Именно таким путем, как это описал постом выше уважаемый -zav-. Даже себе для работы уже сварганил одну очень ценную для себя програмулю, которая лихо облегчает мне жизнь. 

    Смысла выкладывать ее здесь нет из-за ее специфичности, а вот более простой и наглядный пример создания простого инсталятора (за основу внешнего вида и модов взят инсталятор от автора форума). Постарался закоментить максимум строк в инсталяторе. Сварганил его за 5 минут, дольше комментарии писал..

    Архив надо распаковать в корень диска С:\ Не стал я изгаляться, как автор, прописывая универсальный путь, так как ориентировал его на новичков, типа меня, чтобы посмотрели, прикинули что к чему и начали сами разбираться. Основная работа идет с редактором форм (автор форума забыл почему-то упомянуть о нем. Или я был невнимателен).

    Знатоки, не критикуйте шибко. Я новичек и делал этот архив для новичков. Если кому-то поможет, буду очень рад.

    Проект.rar

    • Upvote 2

  20. попробуй так например:

    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 и т.д.

    Если не правильно понял, то извиняй  :ok:

    Вот я дурень то!!! Видать старею...

    Спасибо огромнейшее! Поняли Вы меня правильно. И даже если это не совсем то что нужно, то натолкнули на идею. Побежал пробовать...

    Еще раз спасибо!

    P. S. Решил иначе: в редакторе форм создал BitmapImage, задал ему нужную картинку и прописал на нее действие. Активная картинка есть, ссылка работает, кнопки, как таковой нет. Ни куда теперь не съезжает. Если кому пригодится эта инфа, то и замечательно! :ok:  

×
×
  • Create New...