Jump to content
Korean Random
EvilAlex

Создание инсталляторов для модпаков на базе Inno Setup

Recommended Posts

я тебе уже ответил, в редакторе создай новую стр и на ней делай

Share this post


Link to post

Short link
Share on other sites

я тебе уже ответил, в редакторе создай новую стр и на ней делай

ты имеешь виду сделать страницу в редакторе форм и потом вставить код бекапа в эту страницу?

Share this post


Link to post

Short link
Share on other sites

@Hatsan, подскажу:

  1. К лейблам нужно применять их же свойство Transparent;
  2. Без ботвы с любыми контролами (Button, CheckBox, RadioButton) ничего красивого не сделать - по краям будут такие же обрезки фона, как и у кнопок, которые есть на представленном тобой скрине.
Edited by Kotyarko_O
  • Upvote 1

Share this post


Link to post

Short link
Share on other sites

ты имеешь виду сделать страницу в редакторе форм и потом вставить код бекапа в эту страницу?

не весь код а функции на чеки, а текст, чеки и лейблалы рисуй в редакторе на новой стр

Edited by Dark_Knight_MiX

Share this post


Link to post

Short link
Share on other sites

Каким образом можно считать информацию из файла на сервере, не скачивая его?

Share this post


Link to post

Short link
Share on other sites

Каким образом можно считать информацию из файла на сервере, не скачивая его?

Текстовик?

А хотя что я спрашиваю.. текстовик, вроде, можно спарсить из html страницы (точно - яхз), php\xml точно можно. Но в пределах Inno это большой велосипед.

А вообще, для такого уже клиент-серверное делать надо) (и опять же, почти без инно)

Edited by Kotyarko_O

Share this post


Link to post

Short link
Share on other sites

Каким образом можно считать информацию из файла на сервере, не скачивая его?

 

Берет текст из файла

 

#define URLFile        "http://1337modpack.com/file.txt"

[C0de]

function DownloadFile(const URL: string; var Response: string): Boolean;
var
  WinHttpRequest: Variant;
begin
  Result := True;
  try
    WinHttpRequest := CreateOleObject('WinHttp.WinHttpRequest.5.1');
    WinHttpRequest.SetTimeouts(7000, 7000, 7000, 7000);
    WinHttpRequest.Open('GET', URL, False);
    WinHttpRequest.Send;
    Response := WinHttpRequest.ResponseText;
  except
    MsgBox('Нет подключения.', mbError, MB_OK);
    Result := False;
    Response := GetExceptionMessage;
  end;
end;

function InitializeSetup:boolean;
var
  blahblahblah: string;
begin
  Result:=True;
  begin
  if DownloadFile(ExpandConstant('{#URLFile}'), blahblahblah) then
    begin
      MsgBox(blahblahblah, mbInformation, MB_OK);
    end;
  end;
end;
Edited by ADBokaT57

Share this post


Link to post

Short link
Share on other sites

Неплохо, сам как-то не подумал про оле.

Через него проще всего сделать такие вещи. По такому же принципу можно сделать отправку запроса на сервер (читай количество установок). Но там нужно ещё что бы сервер лог вёл запросов на него и обработать всё это дело правильно.

Share this post


Link to post

Short link
Share on other sites
возможно ли HTML код прикрутить на завершение установки?

Если ещё актуально..

Порылся в стандартных примерах, сделал вывод: возможно. Есть такой модуль WebCtrl, от китайцев с ResTools (авторов расширенного компилятора). С его помощью, на страницу можно вешать html-скрипты (тянуть рекламку из сети тоже можно).

Edited by Kotyarko_O

Share this post


Link to post

Short link
Share on other sites

Как изменить Result:=ExpandConstant('C:\Games\World_of_Tanks\'); чтоб при выборе папки не создавало папку.

 

[setup]

DefaultDirName={code:GetInstDir}

 

function MyDirName(S:String): String;
var
  InsPath: String;
  er: boolean;
  myFile:String;
begin
  Result:=ExpandConstant('C:\Games\World_of_Tanks\'); //если ключа нет то будем ставить сюда
  er := RegQueryStringValue(HKLM, 'SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\{1EAC1D02-C6AC-4FA6-9A44-96258C37C812RU}_is1', 'InstallLocation', InsPath);
  if er and (InsPath<>'') then //если ключ существует и там что-то записано
  begin
    Result := InsPath;
  end;
end;

Share this post


Link to post

Short link
Share on other sites

Как изменить Result:=ExpandConstant('C:\Games\World_of_Tanks\'); чтоб при выборе папки не создавало папку.

[Setup]
DirExistsWarning=no
AppendDefaultDirName=no

Share this post


Link to post

Short link
Share on other sites
Как изменить Result:=ExpandConstant('C:\Games\World_of_Tanks\'); чтоб при выборе папки не создавало папку.

Хватит этого:

[Setup]
AppendDefaultDirName=no
Edited by Kotyarko_O

Share this post


Link to post

Short link
Share on other sites
Берет текст из файла

хм.. а как сделать если файл  xml  и мне нужны из него определенные значения?

Например локально у меня эта байда выглядит так:

#include "XML.iss"
[C0de]
XMLFileReadValue(ExpandConstant('{src}\Test.xml'), 'Settings\Info1', InfoValue);
XMLFileReadValue(ExpandConstant('{src}\Test.xml'), 'Settings\Info2', InfoValue2);

и тд.

 

 

 

Если ещё актуально.. Порылся в стандартных примерах, сделал вывод: возможно. Есть такой модуль WebCtrl, от китайцев с ResTools (авторов расширенного компилятора). С его помощью, на страницу можно вешать html-скрипты (тянуть рекламку из сети тоже можно).

Выложи пример и он тут же уйдет в массы  =)

Edited by -zav-

Share this post


Link to post

Short link
Share on other sites

 

 

хм.. а как сделать если файл xml и мне нужны из него определенные значения?

'Легко:'

#include "XML.iss"
#define URLFile "http://chto-to.tam/file.xml"

[Code]
Var
 XMLS: XMLString;
 Response, InfoValue: String;

function DownloadFile(const URL: string): Boolean;
var
  WinHttpRequest: Variant;
begin
  Result := True;
  try
    WinHttpRequest := CreateOleObject('WinHttp.WinHttpRequest.5.1');
    WinHttpRequest.SetTimeouts(7000, 7000, 7000, 7000);
    WinHttpRequest.Open('GET', URL, False);
    WinHttpRequest.Send;
    Response := WinHttpRequest.ResponseText;
  except
    MsgBox('Нет подключения.', mbError, MB_OK);
    Result := False;
    Response := GetExceptionMessage;
  end;
end;

Function InitializeSetup(): Boolean;
begin
 if DownloadFile(ExpandConstant('{#URLFile}')) then
 begin
  XMLStringReadValue(Response, 'Settings\Info', InfoValue);
  MsgBox(InfoValue, mbInformation, MB_OK);
 end;
 Result := True;
end;


Выложи пример и он тут же уйдет в массы =)

Inno WebCtrl v2.1.rar

Share this post


Link to post

Short link
Share on other sites

 

 

Легко:

И действительно. Работает.
Но вот решил я вывести информацию русскими символами и тут пришла проблема.
Сам xml файл на сервере в utf-8 кодировке, и даже заголовок имеет  <?xml version="1.0" encoding="utf-8" standalone="yes"?>
как я не пытался сменить ему кодировку  один фиг программа выводит кракозябры.
Вопрос знатокам, как победить это?

Share this post


Link to post

Short link
Share on other sites

И действительно. Работает.

Но вот решил я вывести информацию русскими символами и тут пришла проблема.

Сам xml файл на сервере в utf-8 кодировке, и даже заголовок имеет  <?xml version="1.0" encoding="utf-8" standalone="yes"?>

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

Вопрос знатокам, как победить это?

 

Не надо ему кодировку менять. Он на сервере и должен в универсальной кодировке хранится. Нуно после того как считаел его с сервера перекодировать содержимое в ANSI и усе. Тыц.

Share this post


Link to post

Short link
Share on other sites

@StranikS_Scan, а там и так перекодировка есть.

Function MultiByteToWideChar(CodePage: UINT; dwFlags: DWORD; lpMultiByteStr: PAnsiChar; cbMultiByte: integer; lpWideCharStr: PAnsiChar; cchWideChar: integer): longint; external '[email protected] stdcall';
Function WideCharToMultiByte(CodePage: UINT; dwFlags: DWORD; lpWideCharStr: PAnsiChar; cchWideChar: integer; lpMultiByteStr: PAnsiChar; cbMultiByte: integer; lpDefaultChar: integer; lpUsedDefaultChar: integer): longint; external '[email protected] stdcall';

Function Utf8ToAnsi(strSource: String): string;
var
  nRet2, len: integer;
  WideCharBuf, MultiByteBuf: AnsiString;
begin
  Len:= Length(strSource);
  SetLength(WideCharBuf, Len*2);
  SetLength(MultiByteBuf, Len*2);
  MultiByteToWideChar(CP_UTF8, 0, PAnsiChar(strSource), -1, WideCharBuf, Length(WideCharBuf));
  nRet2:= WideCharToMultiByte(CP_ACP, 0, PAnsiChar(WideCharBuf), -1, MultiByteBuf, Length(MultiByteBuf), 0, 0);
  Result:= Trim(Copy(MultiByteBuf, 1, nRet2));
end;

 

@-zav-, а у тебя не юникодовская версия разве?

Edited by Kotyarko_O

Share this post


Link to post

Short link
Share on other sites

 

 

-zav-, а у тебя не юникодовская версия разве?

Юникодовская расширенная

Share this post


Link to post

Short link
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.


  • Recently Browsing   0 members

    No registered users viewing this page.

×
×
  • Create New...