Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Автоматическая установка Windows » Автоматическая установка приложений » Скрипты Inno Setup. Помощь и советы [часть 5]

Закрытая тема
Настройки темы
Скрипты Inno Setup. Помощь и советы [часть 5]

Аватара для El Sanchez

Ветеран


Contributor


Сообщения: 1264
Благодарности: 1024


Конфигурация

Профиль | Отправить PM | Цитировать


Изменения
Автор: El Sanchez
Дата: 16-02-2015
Внимание! Данная тема предназначена только для обсуждения написания скриптов !
Остальные вопросы, а также последние версии компилятора в теме
Inno Setup. Прочие вопросы.


Показать/скрыть: Справка, руководство, примеры:
Показать/скрыть: Ссылки на примеры скриптов:
Показать/скрыть: Дополнительные программы для Inno Setup:
  • ISTool - неплохой редактор скриптов Inno Setup.
    Последняя версия: 5.3.0.1 [29.09.2009] - Скачать | зеркало;

  • Inno Script Generator - генератор скриптов Inno Setup. Обладает некоторыми полезными функциями, которых нет ни у самого Inno Setup, ни у ISTool.
    Последняя версия: 1.0.3.1 [23.03.2008] - Скачать | зеркало на русифицированную программу;
    Примечание: Родной сайт www.hisoft2000.de более недоступен, поэтому здесь расположены сторонние ссылки.

  • Inno Setup Form Designer - редактор страниц Inno Setup, можно создавать свои страницы.
    Последняя версия: 2.0.8 [12.11.2006] - Скачать;
    Примечание: Родной сайт http://isfd.kaju74.de/index.php?isfd более недоступен, поэтому здесь расположены сторонние ссылки.

  • Inno Setup GameScript Generator - программа генерирует скрипты для Inno Setup . С помощью GameScript Generator и Inno Setup вы сможете быстро создать простенький инсталляционный пакет для любой игры. В инсталлятор можно встроить музыку, слайдшоу и фоновый рисунок. Для специалистов созданный скрипт, возможно, будет неплохой заготовкой для дальнейшей модернизации;

  • ISSkin - Программа для создания и добавления в инсталлятор скинов. Инструкция.
    Последняя версия: 3.0.0.0 [19.01.2010] - Скачать;

  • ISSJoiner - Программа для объединения нескольких скриптов InnoSetup в один.
    Последняя версия: 3.0 [23.07.2009]

  • Converter - Программа конвертирует reg-файлы в формат *.iss (формат скриптов Inno Setup).
    Последняя версия: 0.1.4 [13.03.2010] - Скачать;


Предыдущие ветки обсуждения по ссылкам ниже и в прикреплённых архивах:
Inno Setup [все вопросы] часть 1
Inno Setup [все вопросы] часть 2
Скрипты Inno Setup. Помощь и советы [часть 3]
Скрипты Inno Setup. Помощь и советы [часть 4]

Отправлено: 03:49, 21-05-2012

 

Новый участник


Сообщения: 14
Благодарности: 10

Профиль | Отправить PM | Цитировать


vint56,
читать дальше »
Код: Выделить весь код
[Setup]
AppName=My Application
AppVersion=1.5
DefaultDirName={pf}\My Application

[__code]
var
BrowseDialogTitle,BrowseDialogTitle1,BrowseDialogLabel:Tlabel;
Edit: TNewEdit;
i:Integer;
DirTreeView : TFolderTreeView;
Browse, OK, NO, back, new,DirBrowseSetting: TButton;
MainPanelBigBevel: TBevel;
DirPanel,MainPanelBig1,MainPanelBig2: TPanel;

procedure Okclick(Sender: TObject);
begin
WizardForm.DirEdit.Text:=AddBackslash(Edit.Text);
if DirPanel.Visible then DirPanel.hide;
end;

procedure BackClick(Sender: TObject);
begin
Edit.Text:=AddBackslash(ExpandConstant('{pf}\')+'My Application');
DirTreeView.ChangeDirectory(AddBackslash(ExpandConstant('{pf}\')), True);
end;

procedure NOclick(Sender: TObject);
begin
DirTreeView.ChangeDirectory(AddBackslash(WizardForm.dirEdit.Text), true);
Edit.Text:=(DirTreeView.Directory);
if DirPanel.Visible then DirPanel.hide;
end;

procedure DirFolderChange(Sender: TObject);
Begin
Edit.Text:=AddBackslash(DirTreeView.Directory) + 'My Application';
end;

procedure DirBrowseSettingOnClick(Sender: TObject);
begin
if not DirPanel.Visible then DirPanel.show;
end;

procedure InitializeWizard();
begin
WizardForm.ClientWidth:=ScaleX(580);
WizardForm.ClientHeight:=ScaleY(410);
WizardForm.Center;
WizardForm.OuterNotebook.Hide;
WizardForm.InnerNotebook.Hide;
WizardForm.Bevel.hide;
WizardForm.Bevel1.hide;
WizardForm.Color := clMenu;

WizardForm.NextButton.SetBounds(ScaleX(460),ScaleY(374),ScaleX(110),ScaleY(30));
WizardForm.CancelButton.SetBounds(ScaleX(487),ScaleY(500),ScaleX(110),ScaleY(30));
WizardForm.BackButton.SetBounds(ScaleX(340),ScaleY(374),ScaleX(110),ScaleY(30));
WizardForm.DirEdit.Parent:=WizardForm;
WizardForm.DirEdit.SetBounds(ScaleX(20),ScaleY(200),ScaleX(350),ScaleY(30));

 DirBrowseSetting := TButton.Create(WizardForm);
with DirBrowseSetting do begin
 Parent := WizardForm;
 SetBounds(ScaleX(340),ScaleY(374),ScaleX(110),ScaleY(30));
 Caption := 'Настройки';
 OnClick:= @DirBrowseSettingOnClick;
end;

  DirPanel:= Tpanel.Create(WizardForm);
with DirPanel do begin
  Parent:=WizardForm;
  BevelOuter:= bvNone;
  Align:=alClient;
  hide;
end;

  for i:=0 to 3 do
    begin
      with TBevel.Create(WizardForm) do
        begin
          BringToFront;
          Shape:=bsTopLine;
            Case i of
              0:
                begin
                  Parent:=WizardForm;
                  SetBounds(ScaleX(0),ScaleY(365),ScaleX(580),ScaleY(2));
                end;
              1:
                begin
                  Parent:=DirPanel;
                  SetBounds(ScaleX(0),ScaleY(365),ScaleX(580),ScaleY(2));
                end;
              2:
                begin
                  Parent:=WizardForm;
                  SetBounds(ScaleX(0),ScaleY(47),ScaleX(580),ScaleY(2));
                end;
              3:
                begin
                  Parent:=DirPanel;
                  SetBounds(ScaleX(0),ScaleY(47),ScaleX(580),ScaleY(2));
                end;
            end;
        end;
    end;
    
 Back:=tbutton.create(DirPanel)
with back do begin
 SetBounds(ScaleX(250),ScaleY(375),ScaleX(100),ScaleY(30));
 parent:=DirPanel;
 Caption:='Сброс';
 onclick:=@BackClick;
end;

 Ok:=tbutton.create(DirPanel)
with ok do begin
 SetBounds(ScaleX(360),ScaleY(375),ScaleX(100),ScaleY(30));
 parent:=DirPanel;
 Caption:='OK';
 onclick:=@OKclick;
end;

 No:=tbutton.create(DirPanel)
with no do begin
 SetBounds(ScaleX(470),ScaleY(375),ScaleX(100),ScaleY(30));
 parent:=DirPanel;
 Caption:='Отмена';
 onclick:=@NOclick;
end;

BrowseDialogTitle := TLabel.Create(DirPanel);
BrowseDialogTitle.SetBounds(ScaleX(19),ScaleY(5),ScaleX(135),ScaleY(16));
BrowseDialogTitle.Font.Style:=[fsBold];
BrowseDialogTitle.Font.Size:= 10;
BrowseDialogTitle.Transparent := True;
BrowseDialogTitle.Parent := DirPanel;
BrowseDialogTitle.Caption := 'Обзор папок';
BrowseDialogTitle.Font.Name := 'Tahoma';
BrowseDialogTitle.Font.Height := -13;

BrowseDialogTitle1 := TLabel.Create(DirPanel);
BrowseDialogTitle1.SetBounds(ScaleX(30),ScaleY(25),ScaleX(365),ScaleY(13));
BrowseDialogTitle1.Transparent := True;
BrowseDialogTitle1.Parent := DirPanel;
BrowseDialogTitle1.Caption := 'В какую папку Вы хотите установить игру?';

MainPanelBig1 := TPanel.Create(DirPanel);
MainPanelBig1.Parent := DirPanel;
MainPanelBig1.SetBounds(ScaleX(20),ScaleY(69),ScaleX(541),ScaleY(261));
MainPanelBig1.Caption := '';

MainPanelBig2 := TPanel.Create(DirPanel);
MainPanelBig2.Parent := MainPanelBig1;
MainPanelBig2.SetBounds(ScaleX(10),ScaleY(11),ScaleX(520),ScaleY(239));
MainPanelBig2.BevelOuter := bvLowered;
MainPanelBig2.Caption := '';

MainPanelBigBevel := TBevel.Create(DirPanel);
MainPanelBigBevel.Style := bsRaised;
MainPanelBigBevel.Parent := MainPanelBig2;
MainPanelBigBevel.SetBounds(ScaleX(9),ScaleY(10),ScaleX(500),ScaleY(220));

Edit:= TNewEdit.Create(DirPanel);
Edit.SetBounds(ScaleX(20),ScaleY(20),ScaleX(480),ScaleY(21));
Edit.Text:=WizardForm.DirEdit.text;
Edit.Parent:= MainPanelBig2;
Edit.Font.Color:=clBlack;

DirTreeView:= TFolderTreeView.Create(DirPanel);
DirTreeView.SetBounds(ScaleX(20),ScaleY(50),ScaleX(480),ScaleY(170));
DirTreeView.OnChange:=@DirFolderChange;
DirTreeView.Parent:=MainPanelBig2;

DirTreeView.ChangeDirectory(AddBackslash(WizardForm.dirEdit.Text), true);
Edit.Text:=(DirTreeView.Directory);

BrowseDialogLabel := TLabel.Create(DirPanel);
BrowseDialogLabel.SetBounds(ScaleX(30),ScaleY(340),ScaleX(365),ScaleY(13));
BrowseDialogLabel.Transparent := True;
BrowseDialogLabel.Parent := DirPanel;
BrowseDialogLabel.Caption := 'Выберите папку из списка и нажмите «OK».';
end;
Это сообщение посчитали полезным следующие участники:

Отправлено: 16:53, 17-09-2012 | #941



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Ветеран


Сообщения: 1133
Благодарности: 581

Профиль | Отправить PM | Цитировать


Цитата Johny777:
помогите пожалуйста упростить код »
Не буду утверждать, что самый лучший вариант, т.к. совершенству нет предела...
читать дальше »

Код: Выделить весь код
function OnlyInt(const Value: string): string; /// оставлять только цифры
var
  i, len: Integer;
begin
  Result := '';
  len := Length(Value);
  if len > 0 then
    for i := 1 to len do
      case Value[i] of
        0..9: Result := Result + Value[i];
      end;
end;

function IsInt(const Value: string): Boolean;   /// цифры ли
var
  i: Integer;
begin
  Result := False;
  if Length(Value) > 0 then
    for i := 0 to 9 do
      begin
        Result := Pos(IntToStr(i), Value) > 0;
        if Result then
          Break;
      end;
end;

Функция GetText1 вернёт пустую строку, при таком варианте GetText1('<tag>', '</tag><tag>Test</tag>', '</tag>'), я бы написал её так:
читать дальше »

Код: Выделить весь код
function GetText1(const OpenTag, aText, CloseTag: string): string;
var
  pos_tag: Integer;
  s: string;
begin
  Result := '';
  pos_tag := Pos(OpenTag, aText);
  if pos_tag > 0 then
    try
      s := Copy(aText, pos_tag + Length(OpenTag), Length(aText) - pos_tag);
      pos_tag := Pos(CloseTag, s);
      if pos_tag > 0 then
        Result := Copy(s, 1, pos_tag - 1);
    finally
      SetLength(s, 0);
    end;
end;

-------
Книги нужны, чтобы напоминать человеку, что его оригинальные мысли не так уж новы... Авраам Линкольн.

Это сообщение посчитали полезным следующие участники:

Отправлено: 17:48, 17-09-2012 | #942


Аватара для Johny777

Ветеран


Сообщения: 649
Благодарности: 444

Профиль | Отправить PM | Цитировать


Serega,
вот спасибо!
правда Inno ругалась на отсутствие двоеточия
поменял 0..9:
на '0','1','2','3','4','5','6','7','8','9':

Цитата Serega:
Функция GetText1 вернёт пустую строку »
тут проблема
дело в том что не совсем известно каким будет закрывающий тег
это может быть - (для например -dev) или + (для +cl_chowfps)
при использовании с предыдущим кодом возвращает 0

может можно по другому ?
лучший вариант :
заюзать Trim
и искать после заданного слова всё что там находится вплоть до + или - тк все параметры с них и начинаются
+fps_max60-console - возвращать 60 из между +fps_max и -
-dev-console возвращать пустую строку (у параметра dev может не быть значения а может быть 1 или 2)
весь этот поиск значений нужен мне тк у меня реализовано следующее
если во время работающего инсталла вводить значения
например +fps_max 60 то 60 пишется в переменную а вся строка в эдит
если ввести +fps_max 50 то слово и значение удалится и заменится на новые
но когда текст в эдите при запуске уже есть я не могу(в отличии от слов) удалять значения пока они не будут найдены
а с поиском между параметром целиком и минусом или плюсом следующего параметра можно будет даже выловить название карты
+map MyMapName -console
вот ранняя версия целевого кода для наглядности
читать дальше »
Код: Выделить весь код
[Setup]
AppName=My Application
AppVersion=1.5
DefaultDirName={pf}\My Application



[  code]
const
  gwl_style = (-16);
  ES_NUMBER = $2000;

function GetSystemMenu(hWnd: HWND; bRevert: BOOL): LongWord; external 'GetSystemMenu@user32.dll stdcall';
function DeleteMenu(hMenu: LongWord; uPosition, uFlags: UINT): BOOL; external 'DeleteMenu@user32.dll stdcall';
function GetClassLong(Wnd: HWnd; Index: Integer): Longint; external 'GetClassLongA@user32.dll stdcall';
function SetClassLong(Wnd: HWnd; Index: Integer; NewLong: Longint): Longint; external 'SetClassLongA@user32.dll stdcall';

function GetDC(HWND: DWord): DWord; external 'GetDC@user32.dll stdcall';
function GetDeviceCaps(DC: DWord; Index: Integer): Integer; external 'GetDeviceCaps@gdi32.dll stdcall';
function ReleaseDC(HWND: DWord;DC: DWord): Integer; external 'ReleaseDC@user32.dll stdcall';

function SetWindowLong(Wnd: HWnd; Index: Integer; NewLong: Longint): Longint; external 'SetWindowLongA@user32.dll stdcall';
function GetWindowLong(Wnd: HWnd; Index: Integer): Longint; external 'GetWindowLongA@user32.dll stdcall';



var
  Param_Edit, Add_Param_Edit, wEdit, hEdit, Empty_Edit: TEdit;
  OK_Button: TButton;
  Param_PopMenu: TPopupMenu;
  h, w, hi, wi, RefrehRate: Integer;
  
  User_FPS, Dev_Value, DX_Value: Integer;
  User_Map: String;
    

procedure Edits_OnKeyPress(Sender: TObject; var Key: Char);    ///добавть переход на кнопку Ok для всех эдитов
begin
  case TEdit(Sender) of
    wEdit:
    begin
    // if Pos(Key, '0123456789'#8) = 0 then Key := #0;
    /// if Pos(Key, '0123456789'#13) = 0 then hEdit.SetFocus; как правильно нажать на ентер
    end else
    begin
    //  if Pos(Key, '0123456789'#8) = 0 then Key := #0;
      ///if Pos(Key, #13) = 0 then OK_Button.SetFocus;
    end;
  end;
end;


// Удаление начальных, конечных и повторных пробелов
function DelSp(const st: String): String;
var
  c, i: integer;
  stt, st1: string;
begin
  c := 0;

  for i := 1 to Length(st) do
  begin
    stt := copy(st, i, 1);
    if (stt = ' ') and (c >= 1) then
    begin
      st1 := st1;
      c := c + 1;
    end
    else if (stt = ' ') and (c = 0) then
    begin
      c := c + 1;
      st1 := st1 + stt;
    end
    else if (stt <> ' ') then
    begin
      c := 0;
      st1 := st1 + stt;
    end
  end;

  Result := st1;
end;


function OnlyInt(const Value: string): string; /// оставлять только цифры
var
  i, len: Integer;
begin
  Result := '';
  len := Length(Value);
  if len > 0 then
    for i := 1 to len do
      case Value[i] of
        '0','1','2','3','4','5','6','7','8','9': Result := Result + Value[i];
      end;
end;

function IsInt(const Value: string): Boolean;   /// цифры ли
var
  i: Integer;
begin
  Result := False;
  if Length(Value) > 0 then
    for i := 0 to 9 do
      begin
        Result := Pos(IntToStr(i), Value) > 0;
        if Result then
          Break;
      end;
end;



procedure Num_Edit_OnChange(Sender:TObject);
begin
  case TEdit(Sender).Tag of
    0: if RefrehRate > 0 then OK_Button.Enabled := (TEdit(Sender).Text <> '') and (StrToInt(TEdit(Sender).Text) > 0) and (StrToInt(TEdit(Sender).Text) <= RefrehRate) else OK_Button.Enabled := (TEdit(Sender).Text <> '') and (StrToInt(TEdit(Sender).Text) > 0) and (StrToInt(TEdit(Sender).Text) <= 250);
    1: OK_Button.Enabled := (TEdit(Sender).Text <> '')  and (StrToInt(TEdit(Sender).Text) = 0) and (StrToInt(TEdit(Sender).Text) = 1);
    2: OK_Button.Enabled := (TEdit(Sender).Text <> '') and (StrToInt(TEdit(Sender).Text) = 1) and (StrToInt(TEdit(Sender).Text) = 2) and (StrToInt(TEdit(Sender).Text) = 3);
    4: OK_Button.Enabled := (TEdit(Sender).Text <> '') and ((StrToInt(TEdit(Sender).Text) = 70) or (StrToInt(TEdit(Sender).Text) = 80) or (StrToInt(TEdit(Sender).Text) = 90));
    5: OK_Button.Enabled := (TEdit(Sender).Text <> '') and (StrToInt(TEdit(Sender).Text) <= w) and (StrToInt(TEdit(Sender).Text) >= 640);
    6: OK_Button.Enabled := (TEdit(Sender).Text <> '') and (StrToInt(TEdit(Sender).Text) <= h) and (StrToInt(TEdit(Sender).Text) >= 480);
    7: OK_Button.Enabled := (TEdit(Sender).Text <> '') and (StrToInt(TEdit(Sender).Text) >= 0) and (StrToInt(TEdit(Sender).Text) <= w-wi);
    8: OK_Button.Enabled := (TEdit(Sender).Text <> '') and (StrToInt(TEdit(Sender).Text) >= 0) and (StrToInt(TEdit(Sender).Text) <= h-hi);
    10: OK_Button.Enabled := (TEdit(Sender).Text = '') or (TEdit(Sender).Text = '1') or (TEdit(Sender).Text = '2');
    11: OK_Button.Enabled := (TEdit(Sender).Text <> '');///  not IsStringCyrillic(TEdit(Sender).Text);
  end;                                                                                                                                                               
end;


function GetMonitorResolutionInfo(MetricType:Boolean): Integer; /// True для высоты, false для ширины  /// соединить с нижней
var
  dc: DWord;
begin
  Result := 0;
  if MetricType = True then
  begin                                                                                  
    dc := GetDC(MainForm.Handle);
    Result := GetDeviceCaps(dc,10);
    ReleaseDC(MainForm.Handle,dc);
  end else
  begin
    dc := GetDC(MainForm.Handle);
    Result := GetDeviceCaps(dc,8);
    ReleaseDC(MainForm.Handle,dc);
  end;
end;


function GetRefreshRate:Integer;
var
  dc: DWord;
begin
  Result := 0;
  dc := GetDC(MainForm.Handle);
  Result := GetDeviceCaps(dc,116);
  ReleaseDC(MainForm.Handle,dc);
end;


function Param_Num(Param, Info_Text: String; Edit_Tag: Byte; Input_Text_Length: Longint): String;
var
  NumForm: TForm;
  Num_Edit: TEdit;
begin
  Result := '';

// Input_Value
// 0 - fps
// 1 - значения 0,1
// 2 - значения 1,2,3
// 4 - значения директа 80, 90, 70
// 5 - расширение по горизонтали
// 6 - расширение по вертикали

// 7 - расположение по ширине
// 8 - расположение по высоте

// 9 - частота обновления экрана
// 10 - dev параметр
// 11 - карта пользователя (НЕ фоновая)

  NumForm := TForm.Create(nil);
  with NumForm do
  begin
    ClientWidth := ScaleX(260);
    ClientHeight := ScaleY(80);
    Position := poScreenCenter;
    DeleteMenu(GetSystemMenu(NumForm.Handle,False), $F060,0); /// сделать кнопку "закрыть" неактивной
    SetClassLong(NumForm.Handle, -26, GetClassLong(NumForm.Handle, -26) or $200); /// блокировка комбинации alt + f4
    BorderIcons := [];

    with TLabel.Create(nil) do
    begin
      WordWrap := True;
      AutoSize := False;
      SetBounds(ScaleX(10), ScaleY(0), ScaleX(240), ScaleY(45));
      Caption := Info_Text;
      Parent := NumForm;
      Font.Size := 7;
    end;

    Num_Edit := TNewEdit.Create(nil);
    with Num_Edit do
    begin
      Parent := NumForm;
      SetBounds(ScaleX(10), ScaleY(50), ScaleX(160), ScaleY(21));
      Text := '';
      OnChange := @Num_Edit_OnChange;
      OnKeyPress := @Edits_OnKeyPress;
      Tag := Edit_Tag;
      MaxLength := Input_Text_Length;
    end;
    
    if Edit_Tag <> 11 then SetWindowLong( Num_Edit.Handle, GWL_STYLE, GetWindowLong( Num_Edit.Handle, GWL_STYLE ) or ES_NUMBER );

    OK_Button := TButton.Create(nil)
    with OK_Button do     // ok
    begin
      SetBounds(NumForm.ClientWidth - ScaleX(80), ScaleY(49), ScaleX(70), ScaleX(23));
      Parent := NumForm;
      Caption := ExpandConstant(SetupMessage(msgButtonOK));
      ModalResult := mrOk;
      Enabled := Edit_Tag = 10; // те параметр dev где может не быть значения
    end;

    if ShowModal = mrOk then
    begin
      case Param of
        '-dxlevel <значение>', '+fps_max <значение>': Delete(Param,Pos('<значение>',Param),Length(Param));
        '-w <широта>': Delete(Param,Pos('<широта>',Param),Length(Param));
        '-h <высота>': Delete(Param,Pos('<высота>',Param),Length(Param));
        '-x <позиция>', '-y <позиция>': Delete(Param,Pos('<позиция>',Param),Length(Param));
        '-refresh <значение>', '+cl_showfps <значение>', '+sv_cheats <значение>', '+skill <значение>', '+mat_dxlevel <значение>': Delete(Param,Pos('<значение>',Param),Length(Param));
        '+map <имя карты>', '+map_background <имя карты>': Delete(Param,Pos('<имя карты>',Param),Length(Param));
        '+exec <название конфига.cfg>': Delete(Param,Pos('<название конфига.cfg>',Param),Length(Param));
        '+playdemo <название>': Delete(Param,Pos('<название>',Param),Length(Param));
      end;
      
      case Edit_Tag of
        0: User_FPS := StrToInt(Num_Edit.Text);
        4: DX_Value := StrToInt(Num_Edit.Text);
        11: User_Map := Trim(Num_Edit.Text);
      end;

      Result := TrimRight(Param) + ' ' + Num_Edit.Text;
      
     /// зсдеь в завсимости от тега писать значения в переменные (например скорость фпс) чтоб потом их удалять
    end;

    Free;
  end;
end;


procedure wh_Edits_OnChange(Sender:TObject);
begin
  OK_Button.Enabled := (wEdit.Text <> '') and (StrToInt(wEdit.Text) <= w) and (StrToInt(wEdit.Text) >= 640) and
  (hEdit.Text <> '') and (StrToInt(hEdit.Text) <= h) and (StrToInt(hEdit.Text) >= 480);
end;

procedure Set_Window_Width_Hight(wLength,hLength:Byte);
var
  SizeForm: TForm;
begin
  SizeForm := TForm.Create(nil);
  with SizeForm do
  begin
    ClientWidth := ScaleX(260);
    ClientHeight := ScaleY(80);
    Position := poScreenCenter;
    DeleteMenu(GetSystemMenu(SizeForm.Handle,False), $F060,0); /// сделать кнопку "закрыть" неактивной
    SetClassLong(SizeForm.Handle, -26, GetClassLong(SizeForm.Handle, -26) or $200); /// блокировка комбинации alt + f4
    BorderIcons := [];

    with TLabel.Create(nil) do
    begin
      WordWrap := True;
      AutoSize := False;
      SetBounds(ScaleX(10), ScaleY(0), ScaleX(240), ScaleY(45));
      Caption := 'Введите сначала ширину и высоту';
      Parent := SizeForm;
      Font.Size := 7;
    end;

    wEdit := TNewEdit.Create(nil);
    with wEdit do
    begin
      Parent := SizeForm;
      SetBounds(ScaleX(10), ScaleY(50), ScaleX(50), ScaleY(21));
      Text := '';
      OnChange := @wh_Edits_OnChange;
      OnKeyPress := @Edits_OnKeyPress;
      MaxLength := wLength;
    end;

    hEdit := TNewEdit.Create(nil);
    with hEdit do
    begin
      Parent := SizeForm;
      SetBounds(wEdit.Left + wEdit.Width + ScaleX(10), ScaleY(50), ScaleX(50), ScaleY(21));
      Text := '';
      OnChange := @wh_Edits_OnChange;
      OnKeyPress := @Edits_OnKeyPress;
      MaxLength := hLength;
    end;
    
    SetWindowLong(wEdit.Handle, GWL_STYLE, GetWindowLong(wEdit.Handle, GWL_STYLE) or ES_NUMBER);
    SetWindowLong(hEdit.Handle, GWL_STYLE, GetWindowLong(hEdit.Handle, GWL_STYLE) or ES_NUMBER);

    OK_Button := TButton.Create(nil)
    with OK_Button do     // ok
    begin
      SetBounds(SizeForm.ClientWidth - ScaleX(80), ScaleY(49), ScaleX(70), ScaleX(23));
      Parent := SizeForm;
      Caption := ExpandConstant(SetupMessage(msgButtonOK));
      ModalResult := mrOk;
      Enabled := False;
    end;

    if ShowModal = mrOk then
    begin
      hi := StrToInt(hEdit.Text);
      wi := StrToInt(wEdit.Text);
    end;

    Free;
  end;
end;

/// добавть элемент меню "показать описание параметров" выкатывающий панель



function DeleteWord(AllText,Word_1,Word_2,Param,Value: String): String;    /// заменить на замену слова
var
  SpDeletedAllText: String;
begin
  SpDeletedAllText := DelSp(AllText);
  
  if Word_1  <> '' then while pos(Word_1,SpDeletedAllText)>0 do delete (SpDeletedAllText,pos(Word_1,SpDeletedAllText),length(Word_1));
  if Word_1  <> '' then while pos(Word_2,SpDeletedAllText)>0 do delete (SpDeletedAllText,pos(Word_2,SpDeletedAllText),length(Word_2));
  if Param  <> '' then while pos(Param,SpDeletedAllText)>0 do delete (SpDeletedAllText,pos(Param,SpDeletedAllText),length(Param)+Length(Value)+1);
  
  Result := SpDeletedAllText;
end;


function Replace(Str, X, Y: string): string; //// замена слова
{Str - строка, в которой будет производиться замена.
 X - подстрока, которая должна быть заменена.
 Y - подстрока, на которую будет произведена заменена}
var
  buf1, buf2, buffer: string;
begin
  buf1 := '';
  buf2 := Str;
  Buffer := Str;
  while Pos(X, buf2) > 0 do
  begin
    buf2 := Copy(buf2, Pos(X, buf2), (Length(buf2) - Pos(X, buf2)) + 1);
    buf1 := Copy(Buffer, 1, Length(Buffer) - Length(buf2)) + Y;
    Delete(buf2, Pos(X, buf2), Length(X));
    Buffer := buf1 + buf2;
  end;
  Result := Buffer;
end;


//procedure InitializeWizard();
//begin
//  MsgBox(Replace('-dev -console +fps_max 60','-console','-gl'), mbConfirmation, MB_OK);
//end;


procedure Paste(Sender:TObject);
var
  StrRefrehRate: String;
  StrRefrehRateLength: Integer;
begin
  case TMenuItem(Sender).Caption of
                                                                                               
    '-console':            if Empty_Edit.Text = '' then Empty_Edit.Text := TMenuItem(Sender).Caption else Empty_Edit.Text := DelSp(DeleteWord(Empty_Edit.Text,'-console','','','') + ' ' + TMenuItem(Sender).Caption); // готово
    '-hideconsole':        if Empty_Edit.Text = '' then Empty_Edit.Text := TMenuItem(Sender).Caption else Empty_Edit.Text := DelSp(DeleteWord(Empty_Edit.Text,'-hideconsole','','','') + ' ' + TMenuItem(Sender).Caption); // готово
    '-safe':               if Empty_Edit.Text = '' then Empty_Edit.Text := TMenuItem(Sender).Caption else Empty_Edit.Text := DelSp(DeleteWord(Empty_Edit.Text,'-safe','','','') + ' ' + TMenuItem(Sender).Caption);  // готово
    '-dev':                if Empty_Edit.Text = '' then Empty_Edit.Text := Param_Num(TMenuItem(Sender).Caption, 'Возможные значения: 1, 2, нет значения', 10, 1) else Empty_Edit.Text := DelSp(DeleteWord(Empty_Edit.Text,'','','-dev',IntToStr(Dev_Value)) + ' ' + Param_Num(TMenuItem(Sender).Caption, 'Возможные значения: 1, 2, нет значения', 10, 1));  // готово
    '-condebug':           if Empty_Edit.Text = '' then Empty_Edit.Text := TMenuItem(Sender).Caption else Empty_Edit.Text := DelSp(DeleteWord(Empty_Edit.Text,'-condebug','','','') + ' ' + TMenuItem(Sender).Caption);  // готово
    '-autoconfig':         if Empty_Edit.Text = '' then Empty_Edit.Text := TMenuItem(Sender).Caption else Empty_Edit.Text := DelSp(DeleteWord(Empty_Edit.Text,'-autoconfig','','','') + ' ' + TMenuItem(Sender).Caption);  // готово
    '-dxlevel <значение>': if Empty_Edit.Text = '' then Empty_Edit.Text := Param_Num(TMenuItem(Sender).Caption, 'Задайте версию DirectX. Например для DirectX 8.0 - значение 80 (возможные значения: 70, 80, 90)', 4, 2) else Empty_Edit.Text := DelSp(DeleteWord(Empty_Edit.Text,'','','-dxlevel',IntToStr(DX_Value)) + ' ' + Param_Num(TMenuItem(Sender).Caption, 'Задайте версию DirectX. Например для DirectX 8.0 - значение 80 (возможные значения: 70, 80, 90)', 4, 2));  // готово
    '-32bit':              if Empty_Edit.Text = '' then Empty_Edit.Text := TMenuItem(Sender).Caption else Empty_Edit.Text := DelSp(DeleteWord(Empty_Edit.Text,'-32bit','','','') + ' ' + TMenuItem(Sender).Caption); // готово
    '-fullscreen':         if Empty_Edit.Text = '' then Empty_Edit.Text := TMenuItem(Sender).Caption else Empty_Edit.Text := DelSp(DeleteWord(Empty_Edit.Text,'-fullscreen','-windowed','','') + ' ' + TMenuItem(Sender).Caption); // готово /// образец качества
    '-windowed':           if Empty_Edit.Text = '' then Empty_Edit.Text := TMenuItem(Sender).Caption else Empty_Edit.Text := DelSp(DeleteWord(Empty_Edit.Text,'-fullscreen','-windowed','','') + ' ' + TMenuItem(Sender).Caption); // готово

    
    '-w <широта>':
    begin
      if (w = 0) then w := GetMonitorResolutionInfo(False);
      if Empty_Edit.Text = '' then Empty_Edit.Text := Param_Num(TMenuItem(Sender).Caption, 'Укажите разрешение по горизонтали. Максимальное значение - ' + IntToStr(w) + '. Минимальное - 640', 5, Length(IntToStr(w))) else
      Empty_Edit.Text := Empty_Edit.Text + ' ' + Param_Num(TMenuItem(Sender).Caption, 'Укажите разрешение по горизонтали. Максимальное значение - ' + IntToStr(w) + '. Минимальное - 640', 5, Length(IntToStr(w)));
    end;
    
    '-h <высота>':
    begin
      if (h = 0) then h := GetMonitorResolutionInfo(True);
      if Empty_Edit.Text = '' then Empty_Edit.Text := Param_Num(TMenuItem(Sender).Caption, 'Укажите разрешение по вертикали. Максимальное значение - ' + IntToStr(h) + '. Минимальное - 480', 6, Length(IntToStr(h))) else
      Empty_Edit.Text := Empty_Edit.Text + ' ' + Param_Num(TMenuItem(Sender).Caption, 'Укажите разрешение по горизонтали. Максимальное значение - ' + IntToStr(h) + '. Минимальное - 480', 6, Length(IntToStr(h)));
    end;
    
    '-x <позиция>':
    begin
      if (w = 0) then w := GetMonitorResolutionInfo(False);
      if (h = 0) then h := GetMonitorResolutionInfo(True);
      
      Set_Window_Width_Hight(Length(IntToStr(w)),Length(IntToStr(h)));
      
      /// ограничить ввод разрешения до стандартныз (сделать комбобоксы?)
      
      if not (hi = h) and not (wi = w) then
      
      if Empty_Edit.Text = '' then Empty_Edit.Text :='-w' + ' ' + IntToStr(wi) + ' ' + '-h' + ' ' + IntToStr(hi) + ' ' + Param_Num(TMenuItem(Sender).Caption, 'Укажите расположение окна от левого края. Максимальное значение - ' + IntToStr(w-wi) + '. Минимальное - 0', 7, Length(IntToStr(w))) else
      Empty_Edit.Text := Empty_Edit.Text + ' ' + '-w' + ' ' + IntToStr(wi) + ' ' + '-h' + ' ' + IntToStr(hi) + ' ' + Param_Num(TMenuItem(Sender).Caption, 'Укажите расположение окна от левого края. Максимальное значение - ' + IntToStr(w-wi) + '. Минимальное - 0', 7, Length(IntToStr(w)));
    end;

    '-y <позиция>':  
    begin
      if (w = 0) then w := GetMonitorResolutionInfo(False);
      if (h = 0) then h := GetMonitorResolutionInfo(True);

      Set_Window_Width_Hight(Length(IntToStr(w)),Length(IntToStr(h)));
      
      if not (hi = h) and not (wi = w) then /// если значение сдвига 0 (введённое разрешение совпадаетс с реальным) то не добавлять параметр и е создавать форму

      if Empty_Edit.Text = '' then Empty_Edit.Text := Param_Num(TMenuItem(Sender).Caption, 'Укажите расположение окна от верхнего края. Максимальное значение - ' + IntToStr(h-hi) + '. Минимальное - 0', 8, Length(IntToStr(h))) else
      Empty_Edit.Text := Empty_Edit.Text + ' ' + Param_Num(TMenuItem(Sender).Caption, 'Укажите расположение окна от верхнего края. Максимальное значение - ' + IntToStr(h-hi) + '. Минимальное - 0', 8, Length(IntToStr(h)));
    end;
    
    '-nocrashdialog':                 if Empty_Edit.Text = '' then Empty_Edit.Text := TMenuItem(Sender).Caption else Empty_Edit.Text := Empty_Edit.Text + ' ' + TMenuItem(Sender).Caption;
    '-novid':                         if Empty_Edit.Text = '' then Empty_Edit.Text := TMenuItem(Sender).Caption else Empty_Edit.Text := Empty_Edit.Text + ' ' + TMenuItem(Sender).Caption;
    '-noborder':                      if Empty_Edit.Text = '' then Empty_Edit.Text := TMenuItem(Sender).Caption else Empty_Edit.Text := Empty_Edit.Text + ' ' + TMenuItem(Sender).Caption;
    '-nojoy':                         if Empty_Edit.Text = '' then Empty_Edit.Text := TMenuItem(Sender).Caption else Empty_Edit.Text := Empty_Edit.Text + ' ' + TMenuItem(Sender).Caption;
    '-noforcemspd':                   if Empty_Edit.Text = '' then Empty_Edit.Text := TMenuItem(Sender).Caption else Empty_Edit.Text := Empty_Edit.Text + ' ' + TMenuItem(Sender).Caption;
    '-noforcemparms':                 if Empty_Edit.Text = '' then Empty_Edit.Text := TMenuItem(Sender).Caption else Empty_Edit.Text := Empty_Edit.Text + ' ' + TMenuItem(Sender).Caption;
    '-noforcemaccel':                 if Empty_Edit.Text = '' then Empty_Edit.Text := TMenuItem(Sender).Caption else Empty_Edit.Text := Empty_Edit.Text + ' ' + TMenuItem(Sender).Caption;
    
//    '-refresh <значение>': 


    '-d3d':                           if Empty_Edit.Text = '' then Empty_Edit.Text := TMenuItem(Sender).Caption else Empty_Edit.Text := Empty_Edit.Text + ' ' + TMenuItem(Sender).Caption;
    '-gl':                            if Empty_Edit.Text = '' then Empty_Edit.Text := TMenuItem(Sender).Caption else Empty_Edit.Text := Empty_Edit.Text + ' ' + TMenuItem(Sender).Caption;
    '-wavonly':                       if Empty_Edit.Text = '' then Empty_Edit.Text := TMenuItem(Sender).Caption else Empty_Edit.Text := Empty_Edit.Text + ' ' + TMenuItem(Sender).Caption;
//
    '+cl_showfps <значение>':
//    '+map <имя карты>':    if Empty_Edit.Text = '' then Empty_Edit.Text := Param_Num(TMenuItem(Sender).Caption, 'Введите имя карты. Расширение .bsp добавлять не нужно', 11, 60) else Empty_Edit.Text := DelSp(DeleteWord(Empty_Edit.Text,'','','+map',User_Map) + ' ' + Param_Num(TMenuItem(Sender).Caption, 'Введите имя карты. Расширение .bsp добавлять не нужно', 11, 60));  // готово
//    '+map_background <имя карты>':
//    '+sv_cheats <значение>':
//    '+exec <название конфига.cfg>':
//    '+fps_max <значение>':
    begin
      if RefrehRate = 0 then
      begin
        RefrehRate := GetRefreshRate;
        if RefrehRate > 0 then
        begin
          StrRefrehRate := IntToStr(RefrehRate);
          StrRefrehRateLength := Length(StrRefrehRate);
        end else
        begin
          StrRefrehRate := '250';
          StrRefrehRateLength := 3;
        end;
      end;
      if Empty_Edit.Text = '' then Empty_Edit.Text := Param_Num(TMenuItem(Sender).Caption, 'сколько кадров в секунду?Максимальное значение - ' + StrRefrehRate, 0, StrRefrehRateLength) else Empty_Edit.Text := DelSp(DeleteWord(Empty_Edit.Text,'','','+fps_max',IntToStr(User_FPS)) + ' ' + Param_Num(TMenuItem(Sender).Caption, 'сколько кадров в секунду?Максимальное значение - ' + StrRefrehRate, 0, StrRefrehRateLength));   /// образец качества
    end;
//    '+skill <значение>':
//    '+playdemo <название>':
//    '+mat_dxlevel <значение>':

    'описание параметров': /// выкатить панель
    begin
//      RollControl(SettingPanel, 1000, $0);
//      with ConsoleSpeedButton do
//      begin
//        Enabled := False;
//        ShowHint := False;
//      end;
    end;
  end;
end;                                                                                                                             

procedure Param_Button_OnClick(Sender:TObject);
var
  pt: TPoint;
begin
  case TButton(Sender).Tag of
    71: Empty_Edit := Param_Edit;
    90: Empty_Edit := Add_Param_Edit;
  end;
  
  pt := TButton(Sender).ClientToScreen(pt);
  Param_PopMenu.Popup(pt.x, pt.y);
end;



//берет из текста участок текста, который заключен между первым словом (OpenTag) и любым другим (CloseTag). Работает блестяще.
function GetText1(OpenTag,aText,CloseTag:string):string;
begin
  Result:=Copy(aText,Pos(OpenTag,aText)+Length(OpenTag),Pos(CloseTag,aText)-Length(CloseTag)-1);
end;


procedure InitializeWizard();
var
  Temp_Value_String, Params:String;
begin
  WizardForm.OuterNotebook.Hide;
  
  /// добавть менб как в авторане те если   Pos('параметр', текст эдита) больше нуля то не добавлять ацтем меню
  Param_PopMenu := NewPopupMenu(WizardForm, 'MyPopupMenu', paLeft, True, [
    NewItem('-console', 0, False, True, @Paste, 11, ''),
    NewItem('-hideconsole', 0, False, True, @Paste, 11, ''),
    NewItem('-safe', 0, False, True, @Paste, 11, ''),
    NewItem('-dev', 0, False, True, @Paste, 11, ''), // Включает режим разработки. Для отключения загрузки стандартных фоновых карт и сообщения с подтверждением выхода из игры по причине быстродействия, используйте параметр командной строки -dev. Используйте  команды 'dev 1' и 'dev 2' для вывода служебных сообщений в консоль.
    NewItem('-condebug', 0, False, True, @Paste, 11, ''),
    NewItem('-autoconfig', 0, False, True, @Paste, 11, ''),
    NewItem('-dxlevel <значение>', 0, False, True, @Paste, 11, ''),  //  - Задает версию DirectX, используемую игровым движком. Например, для DirectX 8.0 необходимо использовать -dxlevel 80.
    NewItem('-32bit', 0, False, True, @Paste, 11, ''),
    NewItem('-fullscreen', 0, False, True, @Paste, 11, ''),
    NewItem('-windowed', 0, False, True, @Paste, 11, ''),
    NewItem('-w <широта>', 0, False, True, @Paste, 11, ''),  // <широта> или -width <ширина> - Принудительно запускает движок с установленной <шириной>. Пример: -w 1024
    NewItem('-h <высота>', 0, False, True, @Paste, 11, ''),  // <высота> или -height <высота> - Принудительно запускает движок с установленной <высотой>. Пример: -h 768
    NewItem('-x <позиция>', 0, False, True, @Paste, 11, ''), //  <позиция> - Устанавливает расположение окна по горизонтали в оконном режиме . Пример: -x 0
    NewItem('-y <позиция>', 0, False, True, @Paste, 11, ''), // <позиция> - Устанавливает расположение окна по вертикали в оконном режиме . Пример: -y 0
    NewItem('-nocrashdialog', 0, False, True, @Paste, 11, ''),
    NewItem('-novid', 0, False, True, @Paste, 11, ''),
    NewItem('-noborder', 0, False, True, @Paste, 11, ''),
    NewItem('-nojoy', 0, False, True, @Paste, 11, ''),
    NewItem('-noforcemspd', 0, False, True, @Paste, 11, ''), /// Работает только с -useforcedmparms
    NewItem('-noforcemparms', 0, False, True, @Paste, 11, ''), /// Работает только с -useforcedmparms
    NewItem('-noforcemaccel', 0, False, True, @Paste, 11, ''), /// Работает только с -useforcedmparms
    NewItem('-refresh <значение>', 0, False, True, @Paste, 11, ''), /// <периодичность> - Устанавливает особую периодичность обновления экрана. Пример: -refresh 60.
    NewItem('-d3d', 0, False, True, @Paste, 11, ''),
    NewItem('-gl', 0, False, True, @Paste, 11, ''),
    NewItem('-wavonly', 0, False, True, @Paste, 11, ''),
    NewLine,
    NewItem('+cl_showfps <значение>', 0, False, True, @Paste, 11, ''), //     отображать количество кадров в секунду
    NewItem('+map <имя карты>', 0, False, True, @Paste, 11, ''), //     -  Загружает заданную карту сразу после запуска движка. Примечание: расширение .BSP не требуется.
    NewItem('+map_background <имя карты>', 0, False, True, @Paste, 11, ''), //     - Задает необходимую фоновую карту. Полезно для тестирования собственных фоновых карт.
    NewItem('+sv_cheats <значение>', 0, False, True, @Paste, 11, ''),  //    - Когда установлено в 1, запускает игру с возможностью использования консольных читов.
    NewItem('+exec <название конфига.cfg>', 0, False, True, @Paste, 11, ''),  //     - Автоматически исполняет конфигурационный файл при запуске. Например, можно выполнить ваш специальный конфиг с настройками.
    NewItem('+fps_max <значение>', 0, False, True, @Paste, 12, ''),
    NewItem('+skill <значение>', 0, False, True, @Paste, 11, ''), //     - Устанавливает уровень сложности; 1=лёгкий, 2=средний, 3=сложный. Например +skill 3.
    NewItem('+playdemo <название>', 0, False, True, @Paste, 11, ''),

    NewItem('+mat_dxlevel <значение>', 0, False, True, @Paste, 11, ''),
    //     – установливает версию шейдера
    //    Пример:
    //    mat_dxlevel 90 - DX9 with Shader Model 2
    //    mat_dxlevel 95 - DX9 with Shader Model 3
    //    mat_dxlevel 98 - DX9 on DX10 hardware (SM 4)
    
    NewLine,
    NewItem('описание параметров', 0, False, True, @Paste, 11, '')
  ]);

  Param_Edit := TNewEdit.Create(nil);
  with Param_Edit do
  begin
    Parent := WizardForm;
    SetBounds(ScaleX(40), ScaleY(100), ScaleX(300), ScaleY(21));
    Text := '+fps_max 60 -console';
  end;
  
  Params := Param_Edit.Text;
  
  if Params <> '' then
  begin
    if Pos('+fps_max',Param_Edit.text) >0 then
    begin
      Temp_Value_String := GetText1('+fps_max',Param_Edit.Text,' ');
      if IsInt(Temp_Value_String) = True then User_FPS := StrToInt(OnlyInt(Temp_Value_String));
      MsgBox(IntToStr(User_FPS), mbConfirmation, MB_OK);
    end;
  end;

  //



  // if pos('+fps_max',Param_Edit.Text)>0 then искать слово

  Add_Param_Edit := TNewEdit.Create(nil);
  with Add_Param_Edit do
  begin
    Parent := WizardForm;
    SetBounds(ScaleX(40), ScaleY(160), ScaleX(300), ScaleY(21));
    Text := '';
  end;
  
  with TButton.Create(nil) do
  begin
    Parent := WizardForm;
    SetBounds(Param_Edit.Left + Param_Edit.Width + ScaleX(5), Param_Edit.Top, ScaleX(75), Param_Edit.Height);
    Caption := 'Push Me';
    Cursor := crHand;
    OnClick := @Param_Button_OnClick;
    Tag := 71;
  end;
  
  with TButton.Create(nil) do
  begin
    Parent := WizardForm;
    SetBounds(Add_Param_Edit.Left + Add_Param_Edit.Width + ScaleX(5), Add_Param_Edit.Top, ScaleX(75), Add_Param_Edit.Height);
    Caption := 'Push Me 2';
    Cursor := crHand;
    OnClick := @Param_Button_OnClick;
    Tag := 90;
  end;
  
    

end;


procedure CurPageChanged(CurPageID: Integer);
begin
  WizardForm.NextButton.Hide;
end;

procedure CancelButtonClick(CurPageID: Integer; var Cancel, Confirm: Boolean);
begin
  Confirm := False;
end;

Последний раз редактировалось Johny777, 18-09-2012 в 01:53.


Отправлено: 18:39, 17-09-2012 | #943


Старожил


Сообщения: 184
Благодарности: 12

Профиль | Отправить PM | Цитировать


Доброй ночи. У кого есть скрипт для растягивания картинки на первую и последнюю страницы. и если можно скрипт для вставки скина.

-------
Стремись не к тому, чтобы добиться успеха, а к тому, чтобы твоя жизнь имела смысл.(Альберт Эйнштейн)


Отправлено: 00:02, 18-09-2012 | #944


Аватара для Johny777

Ветеран


Сообщения: 649
Благодарности: 444

Профиль | Отправить PM | Цитировать


LinkOFF,
простое растягивание картинки
читать дальше »
Код: Выделить весь код
[Setup]
AppName=My Application
AppVersion=1.5
DefaultDirName={pf}\My Application

[  code]
procedure InitializeWizard();
begin
  with WizardForm do
  begin
    WizardBitmapImage.Align := alClient;
    WizardBitmapImage2.Align := WizardBitmapImage.Align;
  end;
end;

версия с прозрачными лейблами в шапке под названием "Картинка на страницах инсталлятора"

скин для инсталлятора и деинсталлятора был не так давно в моём сообщении в этой ветке
листай назад и найдёшь!
Это сообщение посчитали полезным следующие участники:

Отправлено: 02:00, 18-09-2012 | #945


Аватара для SatHan

Пользователь


Сообщения: 98
Благодарности: 14

Профиль | Отправить PM | Цитировать


LinkOFF, здесь было.
Цитата wertulll:
как убрать эту белую точку »
так, ничего лишнего не заметил а по скрипту этих точек там тьма тьмущая. смотри у себя в скриптах фриарка или де там ещё. картинки за тебя делать не охото, дополнительные компоненты искать тоже, без того чего не хватает даже разбираться лень.

Отправлено: 16:40, 18-09-2012 | #946


Ветеран


Сообщения: 1133
Благодарности: 581

Профиль | Отправить PM | Цитировать


Цитата Johny777:
правда Inno ругалась на отсутствие двоеточия »
Извиняюсь, в анси версии компилятора забыл проверить, на юникоде ошибок нет.
Цитата Johny777:
может можно по другому ? »
Если я правильно понял, то вам нужен такой вариант:
читать дальше »

Код: Выделить весь код
function GetParam(const StartStr, Value: string): string;
var
  pos_start, pos_end, len: Integer;
begin
  Result := '';
  len := Length(Value);
  pos_start := Pos(StartStr, Value);
  // проверяем, что строка не пустая и начальное значение есть в исходной строке
  if (len > 0) and (pos_start > 0) then
    begin
      pos_start := pos_start + Length(StartStr);
      pos_end := pos_start;
      // перебираем посимвольно до тех пор пака не встретим '+' или '-', или же не будет достигнут конец строки
      while (pos_end < len) and (Value[pos_end] <> '+') and (Value[pos_end] <> '-') do
        pos_end := pos_end + 1;
      case pos_end = len of
        True : Result := Trim(Copy(Value, pos_start, pos_end - pos_start + 1));
        False: Result := Trim(Copy(Value, pos_start, pos_end - pos_start));
      end;
    end;
end;

-------
Книги нужны, чтобы напоминать человеку, что его оригинальные мысли не так уж новы... Авраам Линкольн.


Последний раз редактировалось Serega, 19-09-2012 в 20:36. Причина: исправил функцию

Это сообщение посчитали полезным следующие участники:

Отправлено: 20:40, 18-09-2012 | #947


Ветеран


Сообщения: 1133
Благодарности: 581

Профиль | Отправить PM | Цитировать


Цитата Johny777:
вот ранняя версия »
Аналог вашей функции Replace, только работает раза в 1,5 быстрее:
читать дальше »

Код: Выделить весь код
function ReplaceStr(const S, OldStr, NewStr: string): string;
var
  pos_simbol: Integer;
begin
  Result := S;
  pos_simbol := Pos(OldStr, Result);
  while pos_simbol > 0 do
    begin
      Delete(Result, pos_simbol, Length(OldStr));
      Insert(NewStr, Result, pos_simbol);
      pos_simbol := Pos(OldStr, Result);
    end;
end;


P.S.
При проведении тестов на скорость работы функции, обратил внимание на интересную вещь. В анси версии компилятора, работа со строками происходит приблизительно раз в 10 быстрей юникодовой версии...

-------
Книги нужны, чтобы напоминать человеку, что его оригинальные мысли не так уж новы... Авраам Линкольн.

Это сообщение посчитали полезным следующие участники:

Отправлено: 21:10, 18-09-2012 | #948


Аватара для Johny777

Ветеран


Сообщения: 649
Благодарности: 444

Профиль | Отправить PM | Цитировать


Цитата Serega:
Если я правильно понял, то вам нужен такой вариант: »
Спасибо! Работает отлично но вот если поместить +fps_max 60 в конец строки функция возвращает 6 (ноль куда-то слетает)
но извратившись(удалил все пробелы) сделал так:

читать дальше »

Код: Выделить весь код
[Setup]
AppName=My Application
AppVersion=1.5
DefaultDirName={pf}\My Application

[  code]
function DeleteAllSp(const st: String): String;
begin
  while pos(' ',st)>0 do delete(st,pos(' ',st),1);
  Result := st;
end;


function GetParam(const StartStr, Value: string): string;
var
  pos_start, pos_end, len: Integer;
begin
  Result := '';
  len := Length(Value);
  pos_start := Pos(StartStr, Value);
  // проверяем, что строка не пустая и начальное значение есть в исходной строке
  if (len > 0) and (pos_start > 0) then
    begin
      pos_start := pos_start + Length(StartStr);
      pos_end := pos_start;
      // перебираем посимвольно до тех пор пака не встретим '+' или '-', или же не будет достигнут конец строки
      while (pos_end < len) and (Value[pos_end] <> '+') and (Value[pos_end] <> '-') do
        pos_end := pos_end + 2;
      Result := Trim(Copy(Value, pos_start, pos_end - pos_start));
    end;
end;


procedure InitializeWizard();
var
  Temp_Value_String, Params:String;
  Param_Edit: TEdit;
begin
  WizardForm.OuterNotebook.Hide;

  Param_Edit := TNewEdit.Create(nil);
  with Param_Edit do
  begin
    Parent := WizardForm;
    SetBounds(ScaleX(40), ScaleY(100), ScaleX(300), ScaleY(21));
    Text := '-console +fps_max 60';
  end;

  Params := DeleteAllSp('-console +fps_max 60');
  
  if Params <> '' then
  if Pos('+fps_max',Param_Edit.text) >0 then
  MsgBox(GetParam('+fps_max',Params), mbConfirmation, MB_OK);
end;

возвращает нужное число
Цитата Serega:
Аналог вашей функции Replace, только работает раза в 1,5 быстрее: »
спасибо!
Цитата Serega:
В анси версии компилятора, работа со строками происходит приблизительно раз в 10 быстрей юникодовой версии... »
может потому что юникодная инно может вмещать сложные символ типа иероглифов
те обработка текста сложнее и выделение оперативки больше?

Последний раз редактировалось Johny777, 19-09-2012 в 12:26.


Отправлено: 12:16, 19-09-2012 | #949


Аватара для Ivan_009

Ветеран


Сообщения: 608
Благодарности: 58

Профиль | Цитировать


Как сделать деинсталятор в стиле инсталлятора на ботве.. На примере скрипта L.A. Noire.
Подскажите пожалуйста, пробовал не получается.

Отправлено: 13:51, 19-09-2012 | #950



Компьютерный форум OSzone.net » Автоматическая установка Windows » Автоматическая установка приложений » Скрипты Inno Setup. Помощь и советы [часть 5]

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
Скрипты Inno Setup. Помощь и советы [часть 4] El Sanchez Автоматическая установка приложений 2099 22-05-2012 23:16
Скрипты Inno Setup. Помощь и советы [часть 3] Serega Автоматическая установка приложений 3755 26-10-2011 17:58
[архив] Скрипты Inno Setup. Помощь и советы [часть 2] Serega Автоматическая установка приложений 2651 08-11-2010 18:34
Скрипты Inno Setup Compiler QAZAK Автоматическая установка приложений 7 15-01-2007 17:59
Inno Setup tradeukraine Вебмастеру 3 13-06-2006 20:39




 
Переход