Jump to content
Korean Random
EvilAlex

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

Recommended Posts

Так что говорить ужас по уроку не стоит:) там все ясно рассказано как по самому коду

Всё ясно рассказано по коду?!

Неет. Чтобы понять код, нужно знать хотя бы Паскаль.

Для всех остальных секций, всё (почти всё) расписано в справке.

Edited by Kotyarko_O

Share this post


Link to post

Short link
Share on other sites

 

 

а не брать исходник и клепать готовые модпаки

Прикольно наблюдать, как в большинстве случаев так и получается. Всё у всех одинаковое и только единицы знают откуда "ноги растут".

Share this post


Link to post

Short link
Share on other sites

 

 

Всё у всех одинаковое

 

 

в большинстве случаев
 

Просто добавил ясности.

Share this post


Link to post

Short link
Share on other sites

Просто оставлю это здесь: https://bitbucket.org/Kotyarko_O/kmp-installator.

Надеюсь, мои наработки, кому-то чем-то помогут.
Если возникнут вопросы, можете задавать здесь или комментировать интересующие вас строки прямо в коммитах. Будет время - возможно, отвечу.

  • Upvote 2

Share this post


Link to post

Short link
Share on other sites

Просто оставлю это здесь: https://bitbucket.org/Kotyarko_O/kmp-installator.

Надеюсь, мои наработки, кому-то чем-то помогут.

Если возникнут вопросы, можете задавать здесь или комментировать интересующие вас строки прямо в коммитах. Будет время - возможно, отвечу.

Вопрос: скинбилдером отредактировал скин, сохранил, всё норм, но есть одно но - забыл (это не смешно) как передвинуть имя сборки на центр хедера скина, итак, как передвинуть имя установщика в скине?

Share this post


Link to post

Short link
Share on other sites

Вопрос: скинбилдером отредактировал скин, сохранил, всё норм, но есть одно но - забыл (это не смешно) как передвинуть имя сборки на центр хедера скина, итак, как передвинуть имя установщика в скине?

это самое простое 

Share this post


Link to post

Short link
Share on other sites

это самое простое 

Дрон, я в курсе, что это просто, я просто забыл.

Upd: Спасибо что напомнил.

Edited by Darksoul

Share this post


Link to post

Short link
Share on other sites

Господа а не подскажите плагин скачивания через торрент.....

В смысле выбираем компонент и он скачивается через торрент.

Как в протанки.

Share this post


Link to post

Short link
Share on other sites

Господа а не подскажите плагин скачивания через торрент.....

В смысле выбираем компонент и он скачивается через торрент.

Если выбран определённый компонент, просто запускается через explorer заранее упакованный в программу соответствующий торрент-файл, ничего сложного.

Edited by Kotyarko_O

Share this post


Link to post

Short link
Share on other sites

Если выбран определённый компонент, просто запускается через explorer заранее упакованный в программу соответствующий торрент-файл, ничего сложного.

Поподробнее в лс:)

Share this post


Link to post

Short link
Share on other sites

privet kto mojat pamagti izmeniti razmer na "ProgresivBar i ScrollBar-v (Faq)"v atat skript! spsiba / prastite no ea ne tak harasho znaiu ruskii eazik!

#define MyAppName "ModPack" ;Название инстоллятора
#define MyInfoVer "" ;Версия инсталлятора
#define MyAppVer "" ;Версия игры
#define Patch "0.9.10" ;версия патча (чтобы не менять после каждого патча числа в скрипте, можно использовать это)
#define MyAppPublisher "" ;Имя компании или человека кто делал
#define MyAppURL "#" ;Ссылка для лого

//#include "Components.iss" ;Компаненты, они же моды
#include "Messages.iss" ;Сообщение, надписи на кнопках и т.д.
#include "BackUpPage.iss" ;Резерное копирование или удаление res_mods
#include "CustomMessages.iss" ;Описание модов
#include "Music.iss" ;Музыка в инсталляторе

[setup]
AppName={#MyAppName}
AppVersion={#MyAppVer}
AppPublisher={#MyAppPublisher}

//====={ Ссылки }=====\\
AppPublisherURL={#MyAppURL}
AppSupportURL={#MyAppURL}
AppUpdatesURL={#MyAppURL}

//====={ Папка устанвки }=====\\
DefaultDirName={code:MyDirName}
AppendDefaultDirName=no
DirExistsWarning=no
CreateUninstallRegKey=yes
Uninstallable=yes

//====={ Картинки }=====\\
SetupIconFile=Files\WorldOfTanks.ico
UninstallDisplayIcon={app}\unins000.exe
WizardImageFile=Files\img12.bmp
WizardSmallImageFile=Files\Small2.bmp
//====={ Отключение строниц }=====\\
DisableProgramGroupPage=yes

//====={ Лицензия и Фак }=====\\
LicenseFile=licensia.txt
InfoBeforeFile=faq.rtf

//====={ Сжатие сетапа }=====\\
InternalCompressLevel=max
Compression=lzma2/max

//--------------- ваши картинки ---------------\\
[Files]
Source: Files\logo.bmp; Flags: dontcopy noencryption noencryption
Source: MODS\XVM\XVMSymbol.ttf; DestDir: "{fonts}"; FontInstall: "XVMSymbol"; Flags: onlyifdoesntexist uninsneveruninstall
DestName: "WizardForm.BitmapImage1.bmp"; Source: "Files\img2.bmp"; Flags: dontcopy solidbreak




function NextButtonClick(CurPageID: Integer): Boolean;
begin
Result := True;
case CurPageID of
wpSelectDir:
if not FileExists(ExpandConstant('{app}\WorldOfTanks.exe')) then
begin
MsgBox('Не верно указана папка World of Tanks!', mbError, MB_OK);
Result := False;
end;
end;
end;

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;



procedure LogoOnClick(Sender: TObject);
var ResCode: Integer;
begin
ShellExec('', '{#MyAppURL}', '' , '', SW_SHOW, ewNoWait, ResCode)
end;
var
BitmapImage1: TBitmapImage;
procedure RedesignWizardForm;
var
i: integer;
BtnPanel: TPanel;
BtnImage: TBitmapImage;
begin
ExtractTemporaryFile('logo.bmp')
BtnPanel:=TPanel.Create(WizardForm)
with BtnPanel do begin
Left:=220
Top:=537
Width:=160
Height:=40
Cursor:=crHand
OnClick:=@logoOnClick
Parent:=WizardForm
end;
BtnImage:=TBitmapImage.Create(WizardForm)
with BtnImage do begin
AutoSize:=True;
Enabled:=True;
Bitmap.LoadFromFile(ExpandConstant('{tmp}')+'\logo.bmp')
Parent:=BtnPanel
end;
{ BitmapImage1 }
BitmapImage1 := TBitmapImage.Create(WizardForm);
with BitmapImage1 do
begin
Parent := WizardForm.SelectDirPage;
Left:=0;//ScaleX(0);
Top:=115;//ScaleY(115);
Width:=837;//ScaleX(837);
Height:=320;//ScaleY(320);
ExtractTemporaryFile('WizardForm.BitmapImage1.bmp');
Bitmap.LoadFromFile(ExpandConstant('{tmp}\WizardForm.BitmapImage1.bmp'));
end;
end;

function WindowResize(): Boolean;
var
HeightOffset, WidthOffset: Integer;
begin
HeightOffset:=220;
WidthOffset:=340;

WizardForm.Height:=WizardForm.Height + HeightOffset;
WizardForm.Width:=WizardForm.Width + WidthOffset;

WizardForm.NextButton.Top:=WizardForm.NextButton.Top + HeightOffset;
WizardForm.BackButton.Top:=WizardForm.BackButton.Top + HeightOffset;
WizardForm.CancelButton.Top:=WizardForm.CancelButton.Top + HeightOffset;
WizardForm.NextButton.Left:=WizardForm.NextButton.Left + WidthOffset;
WizardForm.BackButton.Left:=WizardForm.BackButton.Left + WidthOffset;
WizardForm.CancelButton.Left:=WizardForm.CancelButton.Left + WidthOffset;

WizardForm.OuterNotebook.Height:=WizardForm.OuterNotebook.Height + HeightOffset;
WizardForm.InnerNotebook.Height:=WizardForm.InnerNotebook.Height + HeightOffset;
WizardForm.OuterNotebook.Width:=WizardForm.OuterNotebook.Width + WidthOffset;
WizardForm.InnerNotebook.Width:=WizardForm.InnerNotebook.Width + WidthOffset;
WizardForm.WizardSmallBitmapImage.Left:= WizardForm.WizardSmallBitmapImage.Left + WidthOffset;
WizardForm.Bevel.Top:=WizardForm.Bevel.Top + HeightOffset;
WizardForm.BeveledLabel.Top:=WizardForm.BeveledLabel.Top + HeightOffset;
WizardForm.Bevel.Width:=WizardForm.Bevel.Width + WidthOffset;
WizardForm.Bevel1.Width:=WizardForm.Bevel1.Width + WidthOffset;
WizardForm.MainPanel.Width:=WizardForm.MainPanel.Width + WidthOffset;
WizardForm.BeveledLabel.Width:=WizardForm.BeveledLabel.Width + WidthOffset;
WizardForm.Center;

{ /// --- Раскомментировать при желании ---- ///
WizardForm.WelcomeLabel1.Hide;
WizardForm.WelcomeLabel2.Hide;
WizardForm.FinishedLabel.Hide;
WizardForm.FinishedHeadingLabel.Hide;
WizardForm.WizardBitmapImage.Width:=600;
WizardForm.WizardBitmapImage.Height:=400;
WizardForm.WizardBitmapImage2.Width:=600;
WizardForm.WizardBitmapImage2.Height:=400;
WizardForm.PageNameLabel.Hide;
WizardForm.PageDescriptionLabel.Hide;
WizardForm.WizardSmallBitmapImage.Top:=0;
WizardForm.WizardSmallBitmapImage.Left:=0;
WizardForm.WizardSmallBitmapImage.Width:=WizardForm.Width;
WizardForm.WizardSmallBitmapImage.Height:=58;
/// --- Конец ---- ///
}
WizardForm.WelcomeLabel1.Hide;
WizardForm.WelcomeLabel2.Hide;
WizardForm.WizardBitmapImage.Width:=837;
WizardForm.WizardBitmapImage.Height:=550;

WizardForm.FinishedHeadingLabel.Hide;
WizardForm.FinishedLabel.Hide;
WizardForm.YesRadio.Hide;
WizardForm.NoRadio.Hide;
WizardForm.WizardBitmapImage2.Width:=837;
WizardForm.WizardBitmapImage2.Height:=550;

WizardForm.PageNameLabel.Hide;
WizardForm.PageDescriptionLabel.Hide;
WizardForm.WizardSmallBitmapImage.Top:=0;
WizardForm.WizardSmallBitmapImage.Left:=0;
WizardForm.WizardSmallBitmapImage.Width:=837;
WizardForm.WizardSmallBitmapImage.Height:=58;

WizardForm.WelcomeLabel1.Width:=WizardForm.WelcomeLabel1.Width + WidthOffset;
WizardForm.WelcomeLabel1.Height:=WizardForm.WelcomeLabel1.Height + HeightOffset;
WizardForm.WelcomeLabel1.Width:=WizardForm.WelcomeLabel1.Width + WidthOffset;

WizardForm.WelcomeLabel2.Width:=WizardForm.WelcomeLabel2.Width + WidthOffset;
WizardForm.WelcomeLabel2.Height:=WizardForm.WelcomeLabel2.Height + HeightOffset;
WizardForm.WelcomeLabel2.Width:=WizardForm.WelcomeLabel2.Width + WidthOffset;


WizardForm.LicenseLabel1.Width:=WizardForm.LicenseLabel1.Width + WidthOffset;
WizardForm.LicenseMemo.Height:=WizardForm.LicenseMemo.Height + HeightOffset;
WizardForm.LicenseMemo.Width:=WizardForm.LicenseMemo.Width + WidthOffset;
WizardForm.LicenseNotAcceptedRadio.Top:=WizardForm.LicenseNotAcceptedRadio.Top + HeightOffset;
WizardForm.LicenseAcceptedRadio.Top:=WizardForm.LicenseAcceptedRadio.Top + HeightOffset;

WizardForm.InfoBeforeClickLabel.Width:=WizardForm.InfoBeforeClickLabel.Width + WidthOffset;
WizardForm.InfoBeforeMemo.Height:=WizardForm.InfoBeforeMemo.Height + HeightOffset;
WizardForm.InfoBeforeMemo.Width:=WizardForm.InfoBeforeMemo.Width + WidthOffset;

WizardForm.SelectDirLabel.Width:=WizardForm.SelectDirLabel.Width + WidthOffset;
WizardForm.SelectDirBrowseLabel.Width:=WizardForm.SelectDirBrowseLabel.Width + WidthOffset;
WizardForm.DiskSpaceLabel.Top:=WizardForm.DiskSpaceLabel.Top + HeightOffset;
WizardForm.DirBrowseButton.Left:=WizardForm.DirBrowseButton.Left + HeightOffset;
WizardForm.DirEdit.Width:=WizardForm.DirEdit.Width + HeightOffset;

WizardForm.ComponentsDiskSpaceLabel.Top:=WizardForm.ComponentsDiskSpaceLabel.Top + HeightOffset;
WizardForm.SelectComponentsLabel.Width:=WizardForm.SelectComponentsLabel.Width + WidthOffset;
WizardForm.ComponentsList.Height:=WizardForm.ComponentsList.Height + HeightOffset;
WizardForm.ComponentsList.Width:=WizardForm.ComponentsList.Width + WidthOffset;

WizardForm.ReadyLabel.Width:=WizardForm.ReadyLabel.Width + WidthOffset;
WizardForm.ReadyMemo.Height:=WizardForm.ReadyMemo.Height + HeightOffset;
WizardForm.ReadyMemo.Width:=WizardForm.ReadyMemo.Width + WidthOffset;

WizardForm.ProgressGauge.Width:=WizardForm.ProgressGauge.Width + HeightOffset;
WizardForm.FilenameLabel.Width:=WizardForm.FilenameLabel.Width + HeightOffset;
WizardForm.StatusLabel.Width:=WizardForm.StatusLabel.Width + HeightOffset;
end;

/// --- /// --- /// --- /// --- /// --- /// --- /// --- /// --- /// --- /// --- /// --- ///

type
TComponentDesc = record
Description: String;
ImageName: String;
Index: Integer;
end;

var
CompDescs: array of TComponentDesc;
CompDescPanel, CompDescImgPanel: TPanel;
CompDescText: array[1..2] of TLabel;
CompIndex, LastIndex: Integer;
CompDescImg: TBitmapImage;

procedure ShowCompDescription(Sender: TObject; X, Y, Index: Integer; Area: TItemArea);
var
i: Integer;
begin
if Index = LastIndex then Exit;
CompIndex := -1;
for i := 0 to GetArrayLength(CompDescs) -1 do
begin
if (CompDescs[i].Index = Index) then
begin
CompIndex := i;
Break;
end;
end;
if (CompIndex >= 0) and (Area = iaItem) then
begin
if not FileExists(ExpandConstant('{tmp}\') + CompDescs[CompIndex].ImageName) then
ExtractTemporaryFile(CompDescs[CompIndex].ImageName);
CompDescImg.Bitmap.LoadFromFile(ExpandConstant('{tmp}\') + CompDescs[CompIndex].ImageName);
CompDescImg.Show;

CompDescText[2].Caption := CompDescs[CompIndex].Description;
CompDescText[2].Enabled := True;
end else
begin
CompDescText[2].Caption := CustomMessage('ComponentsInfo');
CompDescText[2].Enabled := False;
CompDescImg.Hide;
end;
LastIndex := Index;
end;

procedure CompListMouseLeave(Sender: TObject);
begin
CompDescImg.Hide;
CompDescText[2].Caption := CustomMessage('ComponentsInfo');
CompDescText[2].Enabled := False;
LastIndex := -1;
end;

procedure AddCompDescription(AIndex: Integer; ADescription: String; AImageName: String);
var
i: Integer;
begin
i := GetArrayLength(CompDescs);
SetArrayLength(CompDescs, i + 1);
CompDescs[i].Description := ADescription;
CompDescs[i].ImageName := AImageName;
CompDescs[i].Index := AIndex - 1
end;

procedure InitializeWizard();
begin
RedesignWizardForm;
InitializeWizard1(); {из BackUpPage.iss}
//InitializeWizard2(); {из Music.iss}
RedesignWizardForm;
WindowResize();

begin
WizardForm.SelectComponentsLabel.Hide;
WizardForm.TypesCombo.Hide;
WizardForm.ComponentsList.SetBounds(ScaleX(405), ScaleY(5), ScaleX(350), ScaleY(430));
WizardForm.ComponentsList.OnItemMouseMove:= @ShowCompDescription;
WizardForm.ComponentsList.OnMouseLeave := @CompListMouseLeave;

CompDescImgPanel := TPanel.Create(WizardForm);
with CompDescImgPanel do
begin
Parent := WizardForm.SelectComponentsPage;
SetBounds(ScaleX(0), ScaleY(5), ScaleX(400), ScaleY(290)); //рамка картинки
BevelInner := bvLowered;
end;

CompDescText[1] := TLabel.Create(WizardForm);
with CompDescText[1] do
begin
Parent := CompDescImgPanel;
SetBounds(ScaleX(5), ScaleY(5), CompDescImgPanel.Width - ScaleX(10), CompDescImgPanel.Height - ScaleY(10));
AutoSize := False;
WordWrap := True;
Enabled := False;
Caption := CustomMessage('ComponentsImgInfo');
end;

CompDescImg := TBitmapImage.Create(WizardForm);
with CompDescImg do
begin
Parent := CompDescImgPanel;
SetBounds(ScaleX(5), ScaleY(5), CompDescImgPanel.Width - ScaleX(10), CompDescImgPanel.Height - ScaleY(10));
Stretch := True;
Hide;
end;

CompDescPanel := TPanel.Create(WizardForm);
with CompDescPanel do
begin
Parent := WizardForm.SelectComponentsPage;
SetBounds(ScaleX(0), ScaleY(300), ScaleX(400), ScaleY(135)); //Нижния рамка
BevelInner := bvLowered;
end;

CompDescText[2] := TLabel.Create(WizardForm);
with CompDescText[2] do
begin
Parent := CompDescPanel;
SetBounds(ScaleX(5), ScaleY(5), CompDescPanel.Width - ScaleX(10), CompDescPanel.Height - ScaleY(10));
AutoSize := False;
WordWrap := True;
Enabled := False;
Caption := CustomMessage('ComponentsInfo');
end;

AddCompDescription(1, CustomMessage('CompDesc1'), 'CompDescImg1.bmp');
AddCompDescription(2, CustomMessage('CompDesc2'), 'CompDescImg2.bmp');
AddCompDescription(3, CustomMessage('CompDesc3'), 'CompDescImg3.bmp');
AddCompDescription(4, CustomMessage('CompDesc4'), 'CompDescImg4.bmp');
AddCompDescription(5, CustomMessage('CompDesc5'), 'CompDescImg5.bmp');
AddCompDescription(6, CustomMessage('CompDesc6'), 'CompDescImg6.bmp');
AddCompDescription(7, CustomMessage('CompDesc7'), 'CompDescImg7.bmp');
AddCompDescription(8, CustomMessage('CompDesc8'), 'CompDescImg8.bmp');
AddCompDescription(9, CustomMessage('CompDesc9'), 'CompDescImg9.bmp');
AddCompDescription(10, CustomMessage('CompDesc10'), 'CompDescImg10.bmp');
AddCompDescription(11, CustomMessage('CompDesc11'), 'CompDescImg11.bmp');
AddCompDescription(12, CustomMessage('CompDesc12'), 'CompDescImg12.bmp');
AddCompDescription(13, CustomMessage('CompDesc13'), 'CompDescImg13.bmp');
AddCompDescription(14, CustomMessage('CompDesc14'), 'CompDescImg14.bmp');
AddCompDescription(15, CustomMessage('CompDesc15'), 'CompDescImg15.bmp');
AddCompDescription(16, CustomMessage('CompDesc16'), 'CompDescImg16.bmp');
AddCompDescription(17, CustomMessage('CompDesc17'), 'CompDescImg17.bmp');
AddCompDescription(18, CustomMessage('CompDesc18'), 'CompDescImg18.bmp');
AddCompDescription(19, CustomMessage('CompDesc19'), 'CompDescImg19.bmp');
AddCompDescription(20, CustomMessage('CompDesc20'), 'CompDescImg20.bmp');
AddCompDescription(21, CustomMessage('CompDesc21'), 'CompDescImg21.bmp');
AddCompDescription(22, CustomMessage('CompDesc22'), 'CompDescImg22.bmp');
AddCompDescription(23, CustomMessage('CompDesc23'), 'CompDescImg23.bmp');
AddCompDescription(24, CustomMessage('CompDesc24'), 'CompDescImg24.bmp');
AddCompDescription(25, CustomMessage('CompDesc25'), 'CompDescImg25.bmp');
AddCompDescription(26, CustomMessage('CompDesc26'), 'CompDescImg26.bmp');
AddCompDescription(27, CustomMessage('CompDesc27'), 'CompDescImg27.bmp');
AddCompDescription(28, CustomMessage('CompDesc28'), 'CompDescImg28.bmp');
AddCompDescription(29, CustomMessage('CompDesc29'), 'CompDescImg29.bmp');
AddCompDescription(30, CustomMessage('CompDesc30'), 'CompDescImg30.bmp');
AddCompDescription(31, CustomMessage('CompDesc31'), 'CompDescImg31.bmp');
AddCompDescription(32, CustomMessage('CompDesc32'), 'CompDescImg32.bmp');
AddCompDescription(33, CustomMessage('CompDesc33'), 'CompDescImg33.bmp');
AddCompDescription(34, CustomMessage('CompDesc34'), 'CompDescImg34.bmp');
AddCompDescription(35, CustomMessage('CompDesc35'), 'CompDescImg35.bmp');
AddCompDescription(36, CustomMessage('CompDesc36'), 'CompDescImg36.bmp');
AddCompDescription(37, CustomMessage('CompDesc37'), 'CompDescImg37.bmp');
AddCompDescription(38, CustomMessage('CompDesc38'), 'CompDescImg38.bmp');
AddCompDescription(39, CustomMessage('CompDesc39'), 'CompDescImg39.bmp');
AddCompDescription(40, CustomMessage('CompDesc40'), 'CompDescImg40.bmp');
AddCompDescription(41, CustomMessage('CompDesc41'), 'CompDescImg41.bmp');
AddCompDescription(42, CustomMessage('CompDesc42'), 'CompDescImg42.bmp');
AddCompDescription(43, CustomMessage('CompDesc43'), 'CompDescImg43.bmp');
AddCompDescription(44, CustomMessage('CompDesc44'), 'CompDescImg44.bmp');
AddCompDescription(45, CustomMessage('CompDesc45'), 'CompDescImg45.bmp');
end;
end;


Edited by asterix93

Share this post


Link to post

Short link
Share on other sites

 

 

privet kto mojat pamagti izmeniti razmer na "Progresiv bar"v atat skript!
WizardForm.ProgressGauge.Width

Share this post


Link to post

Short link
Share on other sites

Если возникнут вопросы, можете задавать здесь или комментировать интересующие вас строки прямо в коммитах. Будет время - возможно, отвечу.

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

Share this post


Link to post

Short link
Share on other sites

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

Это как не так?

В cm пиши

Share this post


Link to post

Short link
Share on other sites

Это как не так?

В cm пиши

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

Share this post


Link to post

Short link
Share on other sites

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

Или ставь юникод версию инно или в Notepad++ открываешь > кодировки > преобразовать в ansi > сохранить, тогда анси версия инно нормально читает

Edited by ADBokaT57

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...