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

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

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

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

Ветеран


Contributor


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


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

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


Изменения
Автор: El Sanchez
Дата: 22-10-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] - Скачать;

  • RegExporter - Фриварная утилита для экспорта реестра и конвертации файлов *.reg и *.ini в инсталляционные скрипты Inno Setup и NSIS.
    Последняя версия: 1.2.0 [23.09.2014] - Скачать;



Предыдущие ветки обсуждения по ссылкам ниже и в прикреплённых архивах:

Скрипты Inno Setup. Помощь и советы [часть 6]
Скрипты Inno Setup. Помощь и советы [часть 7]

Отправлено: 08:52, 02-02-2015

 

Аватара для MogilShik2007

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


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

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


Вложения
Тип файла: rar ReDrawText v.1.5f.rar
(5.2 Kb, 18 просмотров)

Вот модуль работы с текстом, цвета, правка и т.д.

Отправлено: 17:10, 07-02-2015 | #71



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

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


Аватара для Dodakaedr

Ветеран


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

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


Цитата MogilShik2007:
Вот модуль работы с текстом, цвета, правка и т.д. »
судя из примера должно работать, но увы...нет, для компонентов не подходит:
Скрытый текст
Код: Выделить весь код
#include "ReDrawText v.1.5e4.iss"

[Setup]
AppName=MyProgram
AppVerName=1.0
DefaultDirName={pf}\MyProgram
OutputDir=.


[Components]
Name: one; Description: "Компонент 1"; Types: full custom;
Name: one\two; Description: "Компонент 2"; Types: full custom;

[Code]

var
  Label1: TLabel;
  Label1Rdw: TRedrawedLabel;

procedure RedesignWizardForm;
begin
  Label1 := TLabel.Create(WizardForm);
  with Label1 do
  begin
    Hint:=IntToStr($00FF00);
    AutoSize:=False;
    Parent := WizardForm.WelcomePage;
    Alignment:=taCenter;
    Left := ScaleX(216);
    Top := ScaleY(256);
    Width := ScaleX(40);
    Height := ScaleY(14);
//звездочки удалите
    Caption := '[*name=Verdana][*size=8][*i][*color=$FF0000]Крутая Игра[/color][/i][/size][/name]';
  end;
  Label1Rdw:= ReDrawText(Label1);
end;

procedure InitializeWizard();
begin
RedesignWizardForm;
WizardForm.ComponentsList.ItemCaption[0] := Label1.Caption;
end;

Модуль ReDrawText v.1.5e4.iss
Код: Выделить весь код
[code]
type
  TSize = record
    cx: Longint;
    cy: Longint;
  end;
  ABC = record
    abcA: Integer;
    abcB: UINT;
    abcC: Integer;
  end;
  HDC = Longword;
  HGDIOBJ = Longword;
  TRedrawedLabel = record Base: TLabel; Parts, Shadow: array of Tlabel; end;
  #ifdef UNICODE
    #define A "W"
    PChar = PAnsiChar;
  #else
    #define A "A"
  #endif

const
  FS_SOLID = $8;
  FS_MINIMIZE = $10;
  
function GetTextExtentPoint32(DC: HDC; S: String; Len: Integer; var Size: TSize): Boolean; external 'GetTextExtentPoint32{#A}@gdi32.dll stdcall';
function GetTextExtentExPoint(DC: HDC; lpszStr: PChar; cchString, nMaxExtent: Integer; var lpnFit: Integer; alpDx: Integer; var lpSize: TSize): Boolean; external 'GetTextExtentExPoint{#A}@gdi32.dll stdcall';
function GetClientDC(hWnd: HWND): HDC; external 'GetDC@user32.dll stdcall';
function ReleaseClientDC(hWnd: HWND; hDC: HDC): Integer; external 'ReleaseDC@user32.dll stdcall';
function SelectObject(DC: HDC; p2: HGDIOBJ): HGDIOBJ; external 'SelectObject@gdi32.dll stdcall';
function SetRect(var lpRect: TRect; xLeft,yTop,xRight,yBottom: Integer): Boolean; external 'SetRect@user32.dll stdcall';
function InvalidateRect(hWnd: HWND; lpRect: TRect; bErase: BOOL): BOOL; external 'InvalidateRect@user32.dll stdcall';
function GetCharABCWidths(DC: HDC; uFirstChar, uLastChar: UINT; var lpAbc: ABC): Boolean; external 'GetCharABCWidths{#A}@gdi32.dll stdcall';

function FindSpace(s: string; Min, Max: Integer): Integer;
var n: integer;
begin
  Result:= -1;
  if (Max=0)or(s='') then Exit;
  if Max>Length(S) then Max:=Length(S);
  if Min<=0 then Min:=1;
  if s[Max]=' ' then begin
    Result:= Max;
    Exit;
  end;
  for n:=Max downto min do begin
    if s[n]=' ' then begin
      Result:= n;
      Break;
    end;
  end;
end;

function GetTextWidth(aFont: TFont; Text: String): Integer;
var DC: HDC; aSize: TSize; OldObj: Longword; abc1, abc2: ABC;
begin
  DC:= GetClientDC(0);
  try
    if Text='' then Exit;
    OldObj:= SelectObject(DC, aFont.Handle);
    GetTextExtentPoint32(DC, PChar(Text), Length(Text), aSize);
    GetCharABCWidths(DC, Ord(Text[1]), Ord(Text[1]), abc1);
    GetCharABCWidths(DC, Ord(Text[Length(text)]), Ord(Text[Length(text)]), abc2);
    Result:= aSize.cx;
    if (Length(Text)<>1)and(aFont.Style + [fsItalic]=aFont.Style) then begin
      if abc1.abcA<0 then Result:= Result-abc1.abcA;
      if abc2.abcC<0 then Result:= Result-abc2.abcC
    end;
  finally
    SelectObject(DC, OldObj);
    ReleaseClientDC(0, DC);
  end;
end;

function GetTextHeight(aFont: TFont; Text: String): Integer;
var DC: HDC; aSize: TSize; OldObj: Longword;
begin
  DC:= GetClientDC(0);
  try
    OldObj:= SelectObject(DC, aFont.Handle);
    GetTextExtentPoint32(DC, PChar(Text), Length(Text), aSize);
    Result:= aSize.cy;
  finally
    SelectObject(DC, OldObj);
    ReleaseClientDC(0, DC);
  end;
end;

function GetTextLen(aFont: TFont; Text: String; MaxWidth: Integer): Integer;
var DC: HDC; aSize: TSize; OutLen: Integer; OldObj: Longword;
begin
  DC:= GetClientDC(0);
  try
    OldObj:= SelectObject(DC, aFont.Handle);
    GetTextExtentExPoint(DC, PChar(Text), Length(Text), MaxWidth, OutLen, 0, aSize);
    Result:= OutLen;
  finally
    SelectObject(DC, OldObj);
    ReleaseClientDC(0, DC);
  end;
end;

function TrimEx(S: String): String;
begin
  if S <> '' then begin
    while (Length(S)>0)and(S[1]=' ') do Delete(S, 1, 1);
    while (Length(S)>0)and(S[length(S)]= ' ') do Delete(S, Length(S), 1);
  end;
  Result:= S;
end;

procedure DestroyRWlabel(var Lbl: TRedrawedlabel);
var n: Integer; r: TRect;
begin
  for n:=0 to GetArrayLength(Lbl.Shadow)-1 do Lbl.Shadow[n].Free;
  for n:=0 to GetArrayLength(Lbl.Parts)-1 do Lbl.Parts[n].Free;
  SetArrayLength(lbl.Shadow, 0);
  SetArrayLength(lbl.Parts, 0);
  if Lbl.Base <> nil then begin
    SetRect(r, Lbl.Base.Left, Lbl.base.Top, Lbl.base.left+Lbl.Base.Width, Lbl.Base.Top+Lbl.Base.Height);
    InvalidateRect(Lbl.Base.Parent.Handle, r, true);
  end;
  Lbl.Base:= nil;
end;

procedure ShowRWLabel(var Lbl: TRedrawedlabel);
var n: Integer;
begin
  if Lbl.Base.Enabled then for n:=0 to getArraylength(Lbl.Shadow)-1 do Lbl.Shadow[n].Show;
  for n:=0 to getArraylength(Lbl.Parts)-1 do Lbl.Parts[n].Show;
end;

procedure HideRWLabel(var Lbl: TRedrawedlabel);
var n: Integer;
begin
  if Lbl.Base.Enabled then for n:=0 to getArraylength(Lbl.Shadow)-1 do Lbl.Shadow[n].Hide;
  for n:=0 to getArraylength(Lbl.Parts)-1 do Lbl.Parts[n].Hide;
end;

procedure CopyFont(InFnt: TFont; var OutFont: TFont);
begin
  OutFont.Height:= InFnt.Height;
  OutFont.Name:= InFnt.Name;
  OutFont.Pitch:= InFnt.Pitch;
  OutFont.Size:= InFnt.Size;
  OutFont.Style:= InFnt.Style;
  OutFont.PixelsPerInch:= InFnt.PixelsPerInch;
  OutFont.Color:= InFnt.Color;
end;

function ReDrawText(var Lbl: Tlabel): TRedrawedLabel;
var s, b: string; i, k, l, newline, aLeft, aTop, aWidth, aHeight, Space, TW,x: Integer;
    Flags: Dword; tp1, tp2, tp3, tp4, minlen, lens: Integer; tags, et, ev: string; aFont: TFont;
begin
  DestroyRWlabel(Result);
  Result.Base:= lbl; aFont:= TFont.Create;
  ALeft:=Lbl.Left; ATop:= LBL.Top; AWidth:=0; s:= Lbl.Caption; Space:= GetTextWidth(Lbl.Font, ' ');
  repeat
    s:=TrimEx(s); k:=Pos('[', s); Flags:=0; tags:=''; lens:= Length(S);
    CopyFont(lbl.Font, aFont);
    if k=1 then try
      repeat
        if (s='')or(s[1]<>'[')or((s[1]='[')and(s[2]='/')) then break;
        tp1:=2; while (tp1<lenS)and(s[tp1]<>']') do tp1:=tp1+1;
        tp2:=2; while (tp2<tp1)and(s[tp2]<>'=') do tp2:=tp2+1;
        et:= copy(s, 2, tp2-2);
        ev:= copy(s, tp2+1, tp1-tp2-1);
        case lowercase(et) of
          'b'    : aFont.Style:= aFont.Style + [fsBold];
          'i'    : aFont.Style:= aFont.Style + [fsItalic];
          'u'    : aFont.Style:= aFont.Style + [fsUnderline];
          's'    : aFont.Style:= aFont.Style + [fsStrikeOut];
          'color': aFont.Color:= StrToInt(ev);
          'min'  : begin
                    if StrToInt(ev) >= Lbl.Width then minlen:= Lbl.Width else minlen:= StrToInt(ev);
                    Flags:= Flags or FS_MINIMIZE or FS_SOLID;
                   end;
          'name' : aFont.Name:= ev;
          'size' : aFont.Size:= StrToInt(ev);
          'solid': Flags:= Flags or FS_SOLID;
        end;
        tags:= tags+copy(s, 1, tp1);
        delete(s, 1, tp1);
      until k=0;
    finally
      k:=Pos('[', s);
    end;
    aHeight:=GetTextHeight(aFont, s)+2;
    aWidth:=(Lbl.Left+Lbl.Width)-ALeft;
    newline:= Pos(#13#10, S);
    i:= Pos('%n', S);
    if (i<>0)and((i<newline)or(newline=0)) then newline:= i;
    if newline=1 then begin
      aLeft:= Lbl.Left;
      aTop:= ATop+AHeight;
      Delete(S, 1, 2);
      s:=tags+s;
      Continue;
    end;
    l:= GetTextLen(aFont, s, aWidth);
    while Pos(' ',Copy(s,1,l)) = 0 do begin
    l:=l+1;
    if l>=Length(s) then break;
    end;
    if (k<>0)and(l>k) then l:=k-1;
    if k=0 then if lenS<=l then l:= lenS;
    if (l>0)and(l<>(k-1))and(lenS>l)and(s[l]<>' ') then l:= FindSpace(s, 1, l);
    if (l<k-1)and(Flags and FS_SOLID <> 0) then l:= k-1;
    if ((newline-1)<l)and(newline<>0) then l:= newline-1;
    b:= copy(s, 1, l);
    Delete(s, 1, l);
    try
      repeat
        if (s='')or(s[1]<>'[')or((s[1]='[')and(s[2]<>'/')) then Break;
        tp2:=2; while s[tp2]<>']' do tp2:=tp2+1;
        tp3:= pos('['+copy(s, 3, tp2-3), tags);
        tp4:= tp3; while tags[tp4]<>']' do tp4:=tp4+1;
        delete(tags, tp3, tp4-tp3+1);
        delete(s, 1, tp2);
      until k=0;
    finally
      if tags<>'' then s:=tags+s;
    end;
    if b<>'' then begin
      b:= TrimEx(b); if Flags and FS_MINIMIZE <> 0 then b:= MinimizePathName(b, aFont, MinLen);
      i:= GetArrayLength(Result.Parts); SetArrayLength(Result.Parts, i+1); SetArrayLength(Result.Shadow, i+1);
      aWidth:= GetTextWidth(aFont, b);
      if ((aLeft+aWidth)-(Lbl.Left+Lbl.Width)>=0) then begin
      if Length(Lbl.Caption) <> Length(s+b+' ') then aTop:= aTop+aHeight;
      aLeft:= Lbl.Left;
      end;
      if aHeight+aTop > Lbl.Top+Lbl.Height then aHeight:=aHeight-((aHeight+aTop)-(Lbl.Top+Lbl.Height));
      Result.Parts[i]:= TLabel.Create(Lbl.Parent);
      with Result.Parts[i] do begin
        Autosize:= False; Font:= aFont;
        SetBounds(aLeft,aTop,aWidth,aHeight);
        Transparent:= True;
        Parent:= Lbl.Parent;
        Caption:= b;
        Alignment:=Lbl.Alignment;
      end;
      if Lbl.Enabled then begin
      Result.Shadow[i]:= TLabel.Create(Lbl.Parent);
      with Result.Shadow[i] do begin
        Autosize:= False; Font:= aFont;
        SetBounds(aLeft,aTop+1,aWidth,aHeight);
        Transparent:= True;
        Parent:= Lbl.Parent;
        Caption:= b;
        Font.Color:=StrToIntDef(Lbl.Hint,$000000);
        SendToBack;
        Alignment:=Lbl.Alignment;
      end;
      end;
      case Lbl.Alignment of
      taLeftJustify:
      begin
        if Result.Parts[i].Width > Lbl.Width then begin
          Result.Parts[i].Width:=Lbl.Width;
          if Lbl.Enabled then Result.Shadow[i].Width:=Result.Parts[i].Width;
          end;
        ALeft:= ALeft+AWidth+Space;
      end;
      taCenter:
      begin
        TW:=TW+aWidth+Space;
        if Result.Parts[i].Width > Lbl.Width then begin
          Result.Parts[i].Width:=Lbl.Width;
          if Lbl.Enabled then Result.Shadow[i].Width:=Result.Parts[i].Width;
          Result.Parts[i].Left:=Lbl.Left;
          if Lbl.Enabled then Result.Shadow[i].Left:=Result.Parts[i].Left+1;
          TW:=TW-aWidth;
          aWidth:=Lbl.Width;
          TW:=TW+aWidth;
        end;
        if aLeft = Lbl.Left then begin
          TW:=TW-aWidth-Space;
            while x > 0 do begin
              Result.Parts[i-x].Left:=(Result.Parts[i-x].Left+(Lbl.Width/2))-(TW/2);
              if Lbl.Enabled then Result.Shadow[i-x].Left:=Result.Parts[i-x].Left+1;
              x:=x-1;
            end;
          TW:=aWidth+Space;
          x:=1;
        end else x:=x+1;
          if Length(s)=0 then begin
          x:=x-1;
            while x >= 0 do begin
              Result.Parts[i-x].Left:=(Result.Parts[i-x].Left+(Lbl.Width/2))-(TW/2);
              if Lbl.Enabled then Result.Shadow[i-x].Left:=Result.Parts[i-x].Left+1;
              x:=x-1;
            end;
          end;
        ALeft:= ALeft+AWidth+Space;
      end;
      taRightJustify:
      begin
        TW:=TW+aWidth+Space;
        if Result.Parts[i].Width > Lbl.Width then begin
          Result.Parts[i].Width:=Lbl.Width;
          if Lbl.Enabled then Result.Shadow[i].Width:=Result.Parts[i].Width;
          Result.Parts[i].Left:=Lbl.Left;
          if Lbl.Enabled then Result.Shadow[i].Left:=Result.Parts[i].Left+1;
          TW:=TW-aWidth;
          aWidth:=Lbl.Width;
          TW:=TW+aWidth;
        end;
        if aLeft = Lbl.Left then begin
          TW:=TW-aWidth-Space;
            while x > 0 do begin
              Result.Parts[i-x].Left:=(Lbl.Left+Lbl.Width)-TW;
              if Lbl.Enabled then Result.Shadow[i-x].Left:=Result.Parts[i-x].Left+1;
              TW:=TW-Result.Parts[i-x].Width-Space;
              x:=x-1;
            end;
          TW:=aWidth+Space;
          x:=1;
        end else x:=x+1;
          if Length(s)=0 then begin
          x:=x-1;
            while x >= 0 do begin
              Result.Parts[i-x].Left:=(Lbl.Left+Lbl.Width)-TW;
              if Lbl.Enabled then Result.Shadow[i-x].Left:=Result.Parts[i-x].Left+1;
              TW:=TW-Result.Parts[i-x].Width-Space;
              x:=x-1;
            end;
          end;
        ALeft:= ALeft+AWidth+Space;
      end;
      end;
    end;
      if aHeight < 0 then begin
      Lbl.Hide;
      exit;
      end;
  until (Length(s)=0);
  Lbl.Hide; aFont.Free;
end;

-------
Inno Setup 5 Ultra Unicode


Отправлено: 17:58, 07-02-2015 | #72


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


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

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


Никто не пользуется PrecompInside и SRepInside ?!!!

Отправлено: 20:22, 07-02-2015 | #73


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


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

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


Okta_333, что это? Скрипты Inno Setup. Помощь и советы
http://krinkels.org/threads/precompinside.50/
http://krinkels.org/threads/srepinside.49/

Отправлено: 20:59, 07-02-2015 | #74


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


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

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


sergey3695
А разве вопрос не по теме?
Я же до этого описывала ситуацию.

И всё равно не понимаю что я делаю не так.....

Отправлено: 21:04, 07-02-2015 | #75


Аватара для MogilShik2007

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


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

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


Цитата Dodakaedr:
судя из примера должно работать, но увы...нет, для компонентов не подходит: »
Когда то давно, делал для себя репачок, цвет текста менял, все работает:
Тыц


ЗЫ. с моим скриптом то, кто поможет? Смотрю уже 4 человека скачало и тишина)))

Отправлено: 21:07, 07-02-2015 | #76


Аватара для Dodakaedr

Ветеран


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

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


Цитата MogilShik2007:
Когда то давно, делал для себя репачок, цвет текста менял, все работает: »
для компонент листа нет...

-------
Inno Setup 5 Ultra Unicode


Отправлено: 21:13, 07-02-2015 | #77


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


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

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


Okta_333, это не скрипты inno setup. пиши там куда ссылочки ведут.

Отправлено: 21:23, 07-02-2015 | #78


Аватара для MogilShik2007

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


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

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


Цитата Dodakaedr:
для компонент листа нет... »
Для любой страницы, здесь - обсуждение
Это сообщение посчитали полезным следующие участники:

Отправлено: 22:55, 07-02-2015 | #79


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

Ветеран


Contributor


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

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


Цитата Farser21:
но я немного не понял, где именно в коде это использовать »
Цитата Farser21:
теперь код не может понять индефикатор GWL_EXSTYLE »
Цитата Farser21:
теперь Handle не понимает. »
Farser21, для ленивых подробно:
Код: Выделить весь код
#define A = (Defined UNICODE) ? "W" : "A"
const
    GWL_EXSTYLE = (-20);
    WS_EX_COMPOSITED = $02000000;

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 InitializeWizard;
begin
    with WizardForm.ComponentsList do
        SetWindowLong(Handle, GWL_EXSTYLE, GetWindowLong(Handle, GWL_EXSTYLE) or WS_EX_COMPOSITED);
end;
Это сообщение посчитали полезным следующие участники:

Отправлено: 16:19, 08-02-2015 | #80



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

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

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
Скрипты Inno Setup. Помощь и советы [часть 7] El Sanchez Автоматическая установка приложений 2499 02-02-2015 08:59
Скрипты Inno Setup. Помощь и советы [часть 6] El Sanchez Автоматическая установка приложений 2494 10-03-2014 11:51
Скрипты Inno Setup. Помощь и советы [часть 5] El Sanchez Автоматическая установка приложений 1999 28-03-2013 19:09
Скрипты Inno Setup. Помощь и советы [часть 4] El Sanchez Автоматическая установка приложений 2099 22-05-2012 23:16
Скрипты Inno Setup. Помощь и советы [часть 3] Serega Автоматическая установка приложений 3755 26-10-2011 17:58




 
Переход