Genri, если QuickeneR просматривает форум, то возможно. Но если "реально это значение в инно есть", то может лучше спросить у самого автора - почему оно недоступно?
» Inno Setup (создание инсталяционных пакетов)
Kindly -- автору аналогичный вопрос в конференции на офсайте задавался. Ответ: "Используйте FileSize из препроцессора".
Innounp 0.19 уже не подходит к IS 5.1.13
Прийдеться подождать!
Ребята, плиз, обьсните в кратце, что такого нового в версии 5.1.13, я очень плохо знаю английский. В частности меня очень интересует, что такого намудрили в:
Цитата:
Прийдеться подождать!
Ребята, плиз, обьсните в кратце, что такого нового в версии 5.1.13, я очень плохо знаю английский. В частности меня очень интересует, что такого намудрили в:
Цитата:
Components/tasks-related changes
boss911 -- ну, работая с инно, на таком-то уровне знать имхо надо. По крайней мере со словарем.
[more=Вольный перевод изменений вер.5.1.13]
5.1.13 (2007-07-22)
Добавлен новый lzma/ultra64 уровень сжатия. То же, что и lzma/ultra, но использует вдвое больший словарь (64 Мбайта).
Добавлена новая директива SetupLogging в секции [Setup]. Если установлено в yes, установщик будет создавать лог (аналогично параметру /LOG в командной строке).
Добавлена новая директива AppSupportPhone в секции [Setup].
Добавлен новый флаг solidbreak в секции [Files].
Добавлен новый параметр Verb в секциях [Run] и [UninstallRun]. При использовании с флагом shellexec, определяет действие, которое будет выполнено с файлом.
При использовании флага shellexec в секциях [Run] и [UninstallRun], теперь будет использоваться действие по умолчанию, определенное для файлов данного типа, вместо жестко закодированного ранее действия "открыть". (В случае необходимости, Вы можете изменить это, используя параметр Verb.)
Установщик теперь поддерживает параметр /TYPE, который изменяет установленный по умолчанию тип установки.
Изменения, связанные с параметрами /COMPONENTS и /TASKS:
/COMPONENTS и /TASKS: Установка родительского компонента/задачи, автоматически не устанавливает дочерние компоненты/задачи. При необходимости использования прежнего режима, необходимо указать в качестве префикса родительского компонента/задачи символ "*", или перечислить каждый дочерний компонент/задачу индивидуально.
/COMPONENTS теперь возможно принудительно снять выделение дочернего компонента включением в его название в списке префикса "!". (в параметре /TASKS это поддерживалось и ранее.)
/COMPONENTS теперь игнорируется, если не определен тип по выбору пользователя.
/SAVEINF теперь сохраняет выбранный тип установки в INF-файл. Ранее, при использовании /LOADINF всегда загружался тип по выбору пользователя.
/SAVEINF теперь сохраняет выбранные задачи в INF-файл.
Если один из параметров MinVersion/OnlyBelowVersion/Languages/Check/Components скрывает родительский компонент/задачу, дочерние элементы также будут теперь скрыты. (Ранее было необходимо включить те же самые условия на каждом дочернем элементе для того, чтобы скрыть вместе с родительским элементом.)
Исправлено: добавленные новые дочерние компоненты/задачи при новой установке, всегда по умолчанию выбраны, если родительский компонент/задача при предыдущей инсталляции был выбран.
Исправлено: при использовании параметра /LOADINF, выбираются дочерние компоненты, которые не были выбраны в процессе начальной установки.
Исправлено: при использовании параметра /COMPONENTS, больше нет необходимости перечислять компоненты с флагом fixed для их выбора.
Изменения в Pascal Scripting:
FindFirst/FindNext: в структуру TFindRec добавлены поля CreationTime, LastAccessTime, LastWriteTime, AlternateName.
TInputFileWizardPage: Добавлено новое свойство IsSaveButton. Установка свойства может использоваться для открытия по нажатию кнопки диалогового окна "Сохранить Как", вместо установленного по умолчанию диалогового окна "Открыть".
TNewCheckListBox: установка свойства Checked[] в True, больше не будет автоматически отмечать дочерние элементы. Теперь, для выполнения данного действия, необходимо вызвать новый метод CheckItem с установленным в coCheckWithChildren параметром AOperation.
ParamStr/ParamCount: пустые параметры ("") больше не пропускаются.
/LOG: сохраненное время теперь включает миллисекунды.
Изменения интегрированной среды разработки компилятора:
В течении компиляции, строка состояния теперь показывает предполагаемый остаток времени и скорость сжатия ( Кб/сек )
Комбинация горячих клавиш для Edit | Redo - теперь Ctrl+Y. Предыдущая комбинация (Shift+Ctrl+Z) работает также.
Исправлено: В секции [INI], если Имя файла было пустым, флаги uninsdelete* фактически ничего не удаляли.
Версия программы деинсталляции - 51.47.0.0.
Небольшие улучшения.
[/more]
[more=Вольный перевод изменений вер.5.1.13]
5.1.13 (2007-07-22)
Добавлен новый lzma/ultra64 уровень сжатия. То же, что и lzma/ultra, но использует вдвое больший словарь (64 Мбайта).
Добавлена новая директива SetupLogging в секции [Setup]. Если установлено в yes, установщик будет создавать лог (аналогично параметру /LOG в командной строке).
Добавлена новая директива AppSupportPhone в секции [Setup].
Добавлен новый флаг solidbreak в секции [Files].
Добавлен новый параметр Verb в секциях [Run] и [UninstallRun]. При использовании с флагом shellexec, определяет действие, которое будет выполнено с файлом.
При использовании флага shellexec в секциях [Run] и [UninstallRun], теперь будет использоваться действие по умолчанию, определенное для файлов данного типа, вместо жестко закодированного ранее действия "открыть". (В случае необходимости, Вы можете изменить это, используя параметр Verb.)
Установщик теперь поддерживает параметр /TYPE, который изменяет установленный по умолчанию тип установки.
Изменения, связанные с параметрами /COMPONENTS и /TASKS:
/COMPONENTS и /TASKS: Установка родительского компонента/задачи, автоматически не устанавливает дочерние компоненты/задачи. При необходимости использования прежнего режима, необходимо указать в качестве префикса родительского компонента/задачи символ "*", или перечислить каждый дочерний компонент/задачу индивидуально.
/COMPONENTS теперь возможно принудительно снять выделение дочернего компонента включением в его название в списке префикса "!". (в параметре /TASKS это поддерживалось и ранее.)
/COMPONENTS теперь игнорируется, если не определен тип по выбору пользователя.
/SAVEINF теперь сохраняет выбранный тип установки в INF-файл. Ранее, при использовании /LOADINF всегда загружался тип по выбору пользователя.
/SAVEINF теперь сохраняет выбранные задачи в INF-файл.
Если один из параметров MinVersion/OnlyBelowVersion/Languages/Check/Components скрывает родительский компонент/задачу, дочерние элементы также будут теперь скрыты. (Ранее было необходимо включить те же самые условия на каждом дочернем элементе для того, чтобы скрыть вместе с родительским элементом.)
Исправлено: добавленные новые дочерние компоненты/задачи при новой установке, всегда по умолчанию выбраны, если родительский компонент/задача при предыдущей инсталляции был выбран.
Исправлено: при использовании параметра /LOADINF, выбираются дочерние компоненты, которые не были выбраны в процессе начальной установки.
Исправлено: при использовании параметра /COMPONENTS, больше нет необходимости перечислять компоненты с флагом fixed для их выбора.
Изменения в Pascal Scripting:
FindFirst/FindNext: в структуру TFindRec добавлены поля CreationTime, LastAccessTime, LastWriteTime, AlternateName.
TInputFileWizardPage: Добавлено новое свойство IsSaveButton. Установка свойства может использоваться для открытия по нажатию кнопки диалогового окна "Сохранить Как", вместо установленного по умолчанию диалогового окна "Открыть".
TNewCheckListBox: установка свойства Checked[] в True, больше не будет автоматически отмечать дочерние элементы. Теперь, для выполнения данного действия, необходимо вызвать новый метод CheckItem с установленным в coCheckWithChildren параметром AOperation.
ParamStr/ParamCount: пустые параметры ("") больше не пропускаются.
/LOG: сохраненное время теперь включает миллисекунды.
Изменения интегрированной среды разработки компилятора:
В течении компиляции, строка состояния теперь показывает предполагаемый остаток времени и скорость сжатия ( Кб/сек )
Комбинация горячих клавиш для Edit | Redo - теперь Ctrl+Y. Предыдущая комбинация (Shift+Ctrl+Z) работает также.
Исправлено: В секции [INI], если Имя файла было пустым, флаги uninsdelete* фактически ничего не удаляли.
Версия программы деинсталляции - 51.47.0.0.
Небольшие улучшения.
[/more]
Genri
Цитата:
С твоим имхо полностью согласен, но языки мне не поддаются, как в школе, так и сейчас, вот и приходится работать на угад, где-то, что-то уловлю и на этом все!
Большое спасибо за чудесный перевод, но я чего так и не вкурил, что там они сделали по поводу изменений связанных с параметрами /COMPONENTS и /TASKS, уж слишком мудрено написано, хотя бы примеры дали! Блин, опять прийдеться лезть в английский хелп! Надеюсь, что трудностей с этими ключами у меня не возникнут!
Так это получается, что русский хелп уже требует обновления с текущими изменениями?
Что скажет BagIra для таких неутов как я в английском?
Цитата:
ну, работая с инно, на таком-то уровне знать имхо надо.
С твоим имхо полностью согласен, но языки мне не поддаются, как в школе, так и сейчас, вот и приходится работать на угад, где-то, что-то уловлю и на этом все!
Большое спасибо за чудесный перевод, но я чего так и не вкурил, что там они сделали по поводу изменений связанных с параметрами /COMPONENTS и /TASKS, уж слишком мудрено написано, хотя бы примеры дали! Блин, опять прийдеться лезть в английский хелп! Надеюсь, что трудностей с этими ключами у меня не возникнут!
Так это получается, что русский хелп уже требует обновления с текущими изменениями?
Что скажет BagIra для таких неутов как я в английском?
boss911 -- а ты используешь запуск инсталлятора с параметрами ? Если нет, то это тебе и не надо. Или возьми файл Components.iss из примеров в поставке инно, скомпили и запусти - выбраны три компонента (програмные файлы, хелп и ридми). А теперь запусти с параметром :
/COMPONENTS="program,readme"
и посмотри, что поменялось на странице компонентов. Ну и так далее (пробуй параметры /SAVEINF="c:\temp\filename.inf" и /LOADINF="c:\temp\filename.inf" )
hint! Параметры можно прописать в меню Run -> Parameters...
/COMPONENTS="program,readme"
и посмотри, что поменялось на странице компонентов. Ну и так далее (пробуй параметры /SAVEINF="c:\temp\filename.inf" и /LOADINF="c:\temp\filename.inf" )
hint! Параметры можно прописать в меню Run -> Parameters...
Genri
Цитата:
Да, использую и очень активно!
Как только выйдет Innounp под 5.1.13, тогда и обновлюсь, сейчас для меня нет смылса, потом буду смотреть, что поменялось с параметрами запуска инсталла!
Цитата:
а ты используешь запуск инсталлятора с параметрами ?
Да, использую и очень активно!
Как только выйдет Innounp под 5.1.13, тогда и обновлюсь, сейчас для меня нет смылса, потом буду смотреть, что поменялось с параметрами запуска инсталла!
Вообще есть ли возможность связаться с bagira для обновления хелпа ? Он ведь уже очень давно не обновлялся !
Возможно, вопрос немного не в тему, но все-равно опытные программисты знают.
Как переделать из Inno Setup функцию в Delphi; Допустим эту:
Цитата:
Заранее спасибо за ответ
Как переделать из Inno Setup функцию в Delphi; Допустим эту:
Цитата:
[Files]
Source: get_hw_caps.dll; Flags: dontcopy noencryption
[Code]
function GetVideoCardName(): PChar;
external 'hwc_GetVideoCardName@files:get_hw_caps.dll stdcall';
Label1.Caption:=GetVideoCardName;
Заранее спасибо за ответ
Я не програмер, тем более не опытный, но имхо примерно так :
function GetVideoCardName (): PChar;
var
fName: function(): PChar; stdcall;
Handle: HWND;
dllName: string;
pdllName: PChar;
begin
try
dllName:= 'get_hw_caps.dll';
pdllName:= PChar(dllName);
Handle:= LoadLibrary(pdllName);
@fName := GetProcAddress(Handle, 'hwc_GetVideoCardName');
Result:= fName();
except
ShowMessage('Cannot load get_hw_caps.dll !');
end; { try }
end;
Вызов также как и в инно :
Label1.Caption:=GetVideoCardName;
а может и так :
Label1.Caption:= string(GetVideoCardName);
function GetVideoCardName (): PChar;
var
fName: function(): PChar; stdcall;
Handle: HWND;
dllName: string;
pdllName: PChar;
begin
try
dllName:= 'get_hw_caps.dll';
pdllName:= PChar(dllName);
Handle:= LoadLibrary(pdllName);
@fName := GetProcAddress(Handle, 'hwc_GetVideoCardName');
Result:= fName();
except
ShowMessage('Cannot load get_hw_caps.dll !');
end; { try }
end;
Вызов также как и в инно :
Label1.Caption:=GetVideoCardName;
а может и так :
Label1.Caption:= string(GetVideoCardName);
Genri
Большое спасибо! выручил!
Большое спасибо! выручил!
Chuvakstepan -- хм, любопытно. и что, работает ? с путями только разберись. и желательно Handle проверять на 0 после LoadLibrary. имхо.
Работает, отлично работает. Только эта функция "PChar" а как быть с функциями "Integer"? а то выставляю вторую функцию на определение оперативной памяти - ничего невыходит
Написал всё в личку
Написал всё в личку
Chuvakstepan -- в личку. все в личку. включая все примеры на инно, которые надо переделать.
Привет всем!
у меня есть свободное место на хостинге (хостинг на ягуаре jaguarpc.com)
место свободное есть и скорость там тоже нормальная
и для всех (и для себя в том числе) хотелось бы сделать шото полезное
предлагаю
мне присылаете в личку или по мылу
а) архив со своим (или чужим) скриптом, который возможно будет полезен для всех;
б) краткое описание скрипта (в описании желательно указать ключевые слова для поиска);
я у себя на сервере это выкладываю, а тут будет линк (если админ позволит) на мою страничку
обязуюсь выкладывать в течении суток (ну в крайнем случає 2-3 суток , если праздники или ешо какие-то непредвиденные обстоятельства)
стоит всем обсудить идею
или если уж кому-то хочется (может) написать php-код для такой странички
на протяжении 7-10 дней такую страничку смогу сделать (сейчас нет свободного времени)
но до того времени нужно чтоб желающие прислали свои архивы (хотя б несколько)
если идея не стоит внимания, то так сразу и скажите
у меня есть свободное место на хостинге (хостинг на ягуаре jaguarpc.com)
место свободное есть и скорость там тоже нормальная
и для всех (и для себя в том числе) хотелось бы сделать шото полезное
предлагаю
мне присылаете в личку или по мылу
а) архив со своим (или чужим) скриптом, который возможно будет полезен для всех;
б) краткое описание скрипта (в описании желательно указать ключевые слова для поиска);
я у себя на сервере это выкладываю, а тут будет линк (если админ позволит) на мою страничку
обязуюсь выкладывать в течении суток (ну в крайнем случає 2-3 суток , если праздники или ешо какие-то непредвиденные обстоятельства)
стоит всем обсудить идею
или если уж кому-то хочется (может) написать php-код для такой странички
на протяжении 7-10 дней такую страничку смогу сделать (сейчас нет свободного времени)
но до того времени нужно чтоб желающие прислали свои архивы (хотя б несколько)
если идея не стоит внимания, то так сразу и скажите
Genri
Цитата:
Всё прибедняетесь прибедняетесь, а в инно как царь и Бог разбираетесь.... ВО всяком случае лучше всех присутствующих на мой взгляд)))
Цитата:
Я не програмер, тем более не опытный, но имхо примерно так :
Всё прибедняетесь прибедняетесь, а в инно как царь и Бог разбираетесь.... ВО всяком случае лучше всех присутствующих на мой взгляд)))
maxdddca123 -- "Ватсон, Вы делаете совершенно неверные выводы!" ((С)Шерлок Холмс и Доктор Ватсон - Знакомство)
Подскажите пожалуйста как в разделе "code" можно выхватить значения отставок, выбранных на странице формируемой в "components"
Gerrr -- а что такое "отставки" ? Если имеются ввиду выбранные компоненты, то смотри в хелпе :
function WizardSelectedComponents(const Descriptions: Boolean): String;
- возвращает строку, состоящую из разделенных запятыми именами компонентов или их описаний (если Descriptions:= True)
или :
function IsComponentSelected(const Components: String): Boolean;
- проверка выбран ли конкретный компонент.
function WizardSelectedComponents(const Descriptions: Boolean): String;
- возвращает строку, состоящую из разделенных запятыми именами компонентов или их описаний (если Descriptions:= True)
или :
function IsComponentSelected(const Components: String): Boolean;
- проверка выбран ли конкретный компонент.
maxdddca123
Цитата:
Ну так обратись к ему в ПМ с просьбой! И будут тебе все благодарны, я в первую очередь!
Цитата:
Вообще есть ли возможность связаться с bagira для обновления хелпа ?
Ну так обратись к ему в ПМ с просьбой! И будут тебе все благодарны, я в первую очередь!
Как посчитать такую штуку в инно ? Пишет синтаксическая ошибка.
с:=с*(k+1)/(k+2);
с:=с*(k+1)/(k+2);
maxdddca123
Цитата:
c:=c*(k+1)/(k+2);
скопируй в свой код эту строку и попробуй понять в чем разница
Добавлено:
... в смысле, почему одна работает, а другая нет.
Цитата:
с:=с*(k+1)/(k+2);
c:=c*(k+1)/(k+2);
скопируй в свой код эту строку и попробуй понять в чем разница
Добавлено:
... в смысле, почему одна работает, а другая нет.
Дайте догадаюсь одна из букв - русская )
Gerrr -- ответ неверный. обе 'с' - русские.
Добавлено:
... именно поэтому не рекомендуется обозначать переменные одной буквой, за исключением локальной переменной, используемой в цикле (чаще используется 'i' )
Добавлено:
... именно поэтому не рекомендуется обозначать переменные одной буквой, за исключением локальной переменной, используемой в цикле (чаще используется 'i' )
В новом Inno Setup QuickStart Pack v5.1.13 выскакивает ошибка при сборке этого скрипта:
[more=Вот скрипт]
Код:
[Setup]
;Название программы - инсталлятора, а также заголовок инсталлятора, (пожеланию можно версию указать):
AppName=about.button
;Версия программы - инсталлятора, (пожеланию можно указать - название + версию):
AppVerName=about.button
;Директория установки для программы - инсталлятора:
DefaultDirName={pf}\about.button
;Название выходного файла компилятора:
OutputBaseFilename=about.button
[Code]
type
TFileTime = record
lowdatatime: longint;
highdatatime: longint;
end;
TSystemTime = record //Здесь ошибка Duplicate identifier 'TFileTime'
wYear: Word;
wMonth: Word;
wDayOfWeek: Word;
wDay: Word;
wHour: Word;
wMinute: Word;
wSecond: Word;
wMilliseconds: Word;
end;
const
MB_ICONINFORMATION = $40;
MB_ICONEXCLAMATION = $30;
MB_ICONQUESTION = $20;
MB_ICONSTOP = $10;
MB_ICONNONE = $0;
function MessageBox(hWnd: Integer; lpText, lpCaption: string; uType: Cardinal): Integer;
external 'MessageBoxA@user32.dll stdcall';
function GetFileTime(hfile: longint; var lpcreation, lpaccess, lpwrite: TFileTime): boolean;
external 'GetFileTime@kernel32.dll stdcall';
function FileTimeToSystemTime(var tftm: TFileTime; var systm: TSystemTime): boolean;
external 'FileTimeToSystemTime@kernel32.dll stdcall';
function FileTimeToLocalFileTime(utct: TFileTime; var loct: TFileTime): boolean;
external 'FileTimeToLocalFileTime@kernel32.dll stdcall';
function GetDateFormat(Locale: Integer; dwFlags: LongInt;
var lpDate: TSystemTime; lpFormat: PChar; lpDateStr: string;
cchDate: Integer): Integer; external
'GetDateFormatA@kernel32.dll';
function GetTimeFormat(Locale: Integer; dwFlags: LongInt;
var
lpTime: TSystemTime; lpFormat: PChar; lpTimeStr: string;
cchDate: Integer): Integer; external
'GetTimeFormatA@kernel32.dll';
var
strFile: string;
strCreTime: string;
strModTime: string;
strAccessTime: string;
function FormattedTime(t: TSystemTime): string;
var
s, fmt: string;
begin
fmt := StringOfChar(' ', 64);
GetDateFormat(0, 0, t, 'yyyy.MM.dd', fmt, 63);
fmt := CastIntegerToString(CastStringToInteger(fmt));
s := '' + fmt;
fmt := StringOfChar(' ', 64);
GetTimeFormat(0, 0, t, 'hh:mm:ss tt', fmt, 63);
fmt := CastIntegerToString(CastStringToInteger(fmt));
s := s + ' at ' + fmt;
Result := s;
end;
function GetFileSysTime(nomef: string; var stime: string; idx: Integer): TSystemTime;
var
fs: TFileStream;
risul: TSystemTime;
creat, access, write, local: TFileTime;
begin
fs := TFileStream.Create(nomef, fmOpenRead);
GetFileTime(fs.handle, creat, access, write);
fs.Free;
case idx of
1: FileTimeToLocalFileTime(creat, local);
2: FileTimeToLocalFileTime(access, local);
3: FileTimeToLocalFileTime(write, local);
end;
FileTimeToSystemTime(local, risul);
stime := FormattedTime(risul);
Result := risul;
end;
procedure AboutButtonOnClick(Sender: TObject);
var
hWnd: Integer;
begin
hWnd := StrToInt(ExpandConstant('{wizardhwnd}'));
MessageBox(hWnd, '' +
+#13 'Released: ' + strCreTime, 'Инфо', MB_OK or $40);
end;
procedure InitializeWizard();
var
Width, Height, I: Integer;
AboutButton, CancelButton: TButton;
filename, s: string;
t: TSystemTime;
begin
filename := ExpandConstant('{srcexe}');
strFile := filename;
t := GetFileSysTime(filename, s, 1);
strCreTime := s;
t := GetFileSysTime(filename, s, 2);
strAccessTime := s;
t := GetFileSysTime(filename, s, 3);
strModTime := s;
CancelButton := WizardForm.CancelButton;
AboutButton := TButton.Create(WizardForm);
AboutButton.Left := WizardForm.ClientWidth - CancelButton.Left - CancelButton.Width;
AboutButton.Top := CancelButton.Top;
AboutButton.Width := CancelButton.Width;
AboutButton.Height := CancelButton.Height;
AboutButton.Caption := 'About';
AboutButton.ShowHint := True
AboutButton.Hint := 'О программе'
AboutButton.OnClick := @AboutButtonOnClick;
AboutButton.Parent := WizardForm;
AboutButton.Cursor := crHand;
//AboutButton.Font.Style := AboutButton.Font.Style + [fsUnderline];
end;
[more=Вот скрипт]
Код:
[Setup]
;Название программы - инсталлятора, а также заголовок инсталлятора, (пожеланию можно версию указать):
AppName=about.button
;Версия программы - инсталлятора, (пожеланию можно указать - название + версию):
AppVerName=about.button
;Директория установки для программы - инсталлятора:
DefaultDirName={pf}\about.button
;Название выходного файла компилятора:
OutputBaseFilename=about.button
[Code]
type
TFileTime = record
lowdatatime: longint;
highdatatime: longint;
end;
TSystemTime = record //Здесь ошибка Duplicate identifier 'TFileTime'
wYear: Word;
wMonth: Word;
wDayOfWeek: Word;
wDay: Word;
wHour: Word;
wMinute: Word;
wSecond: Word;
wMilliseconds: Word;
end;
const
MB_ICONINFORMATION = $40;
MB_ICONEXCLAMATION = $30;
MB_ICONQUESTION = $20;
MB_ICONSTOP = $10;
MB_ICONNONE = $0;
function MessageBox(hWnd: Integer; lpText, lpCaption: string; uType: Cardinal): Integer;
external 'MessageBoxA@user32.dll stdcall';
function GetFileTime(hfile: longint; var lpcreation, lpaccess, lpwrite: TFileTime): boolean;
external 'GetFileTime@kernel32.dll stdcall';
function FileTimeToSystemTime(var tftm: TFileTime; var systm: TSystemTime): boolean;
external 'FileTimeToSystemTime@kernel32.dll stdcall';
function FileTimeToLocalFileTime(utct: TFileTime; var loct: TFileTime): boolean;
external 'FileTimeToLocalFileTime@kernel32.dll stdcall';
function GetDateFormat(Locale: Integer; dwFlags: LongInt;
var lpDate: TSystemTime; lpFormat: PChar; lpDateStr: string;
cchDate: Integer): Integer; external
'GetDateFormatA@kernel32.dll';
function GetTimeFormat(Locale: Integer; dwFlags: LongInt;
var
lpTime: TSystemTime; lpFormat: PChar; lpTimeStr: string;
cchDate: Integer): Integer; external
'GetTimeFormatA@kernel32.dll';
var
strFile: string;
strCreTime: string;
strModTime: string;
strAccessTime: string;
function FormattedTime(t: TSystemTime): string;
var
s, fmt: string;
begin
fmt := StringOfChar(' ', 64);
GetDateFormat(0, 0, t, 'yyyy.MM.dd', fmt, 63);
fmt := CastIntegerToString(CastStringToInteger(fmt));
s := '' + fmt;
fmt := StringOfChar(' ', 64);
GetTimeFormat(0, 0, t, 'hh:mm:ss tt', fmt, 63);
fmt := CastIntegerToString(CastStringToInteger(fmt));
s := s + ' at ' + fmt;
Result := s;
end;
function GetFileSysTime(nomef: string; var stime: string; idx: Integer): TSystemTime;
var
fs: TFileStream;
risul: TSystemTime;
creat, access, write, local: TFileTime;
begin
fs := TFileStream.Create(nomef, fmOpenRead);
GetFileTime(fs.handle, creat, access, write);
fs.Free;
case idx of
1: FileTimeToLocalFileTime(creat, local);
2: FileTimeToLocalFileTime(access, local);
3: FileTimeToLocalFileTime(write, local);
end;
FileTimeToSystemTime(local, risul);
stime := FormattedTime(risul);
Result := risul;
end;
procedure AboutButtonOnClick(Sender: TObject);
var
hWnd: Integer;
begin
hWnd := StrToInt(ExpandConstant('{wizardhwnd}'));
MessageBox(hWnd, '' +
+#13 'Released: ' + strCreTime, 'Инфо', MB_OK or $40);
end;
procedure InitializeWizard();
var
Width, Height, I: Integer;
AboutButton, CancelButton: TButton;
filename, s: string;
t: TSystemTime;
begin
filename := ExpandConstant('{srcexe}');
strFile := filename;
t := GetFileSysTime(filename, s, 1);
strCreTime := s;
t := GetFileSysTime(filename, s, 2);
strAccessTime := s;
t := GetFileSysTime(filename, s, 3);
strModTime := s;
CancelButton := WizardForm.CancelButton;
AboutButton := TButton.Create(WizardForm);
AboutButton.Left := WizardForm.ClientWidth - CancelButton.Left - CancelButton.Width;
AboutButton.Top := CancelButton.Top;
AboutButton.Width := CancelButton.Width;
AboutButton.Height := CancelButton.Height;
AboutButton.Caption := 'About';
AboutButton.ShowHint := True
AboutButton.Hint := 'О программе'
AboutButton.OnClick := @AboutButtonOnClick;
AboutButton.Parent := WizardForm;
AboutButton.Cursor := crHand;
//AboutButton.Font.Style := AboutButton.Font.Style + [fsUnderline];
end;
NightW0lf -- в новой версии тип TFileTime уже изначально определен (посмотри в хелпе описание функции FindFirst - там есть определение TFileTime).
Для работоспособности указанного скрипта, достаточно убрать определение типа TFileTime. Оно теперь не нужно.
Для работоспособности указанного скрипта, достаточно убрать определение типа TFileTime. Оно теперь не нужно.
Genri,
А можно ли переделать твой скрипт удаления файлов
http://forum.ru-board.com/topic.cgi?forum=5&topic=23235&start=991&limit=1&m=1#1
чтобы он был вот так
http://img171.imageshack.us/my.php?image=innogi3.jpg
А можно ли переделать твой скрипт удаления файлов
http://forum.ru-board.com/topic.cgi?forum=5&topic=23235&start=991&limit=1&m=1#1
чтобы он был вот так
http://img171.imageshack.us/my.php?image=innogi3.jpg
Chanka -- если это запрос моего разрешения, то я не возражаю - можешь переделывать Если речь идет о дизайне, то каких-либо сложностей я не вижу. Разве что больше компонентов - больше кода.
Страницы: 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768
Предыдущая тема: Mail.ru агент - вход не выполнен
Форум Ru-Board.club — поднят 15-09-2016 числа. Цель - сохранить наследие старого Ru-Board, истории становления российского интернета. Сделано для людей.