Menu 4. 2. 2. 5. 6 - Menu - Menu.
Написание инсталлятора на Delphi - delphi - Программные продукты. Если вы хотя бы однажды инсталлировали какую- нибудь программу под Windows, то, вероятно, заметили, что процесс инсталляции происходит поэтапно. Поэтапно - это ключевое слово, поскольку именно оно подводит нас к этапам инсталляции. Если мы подумаем ещё чуть- чуть, то обнаружим, что сложность реализации различных этапов очень и очень неодинакова. Из всех статей цикла есть один практический вывод: не все этапы инсталляции будут описаны в этом руководстве подробно. Почему? Потому что реализация этих этапов тривиальна или, по крайней мере, не очень сложна. По большому счёту, здесь вы не встретите реализации, здесь вы найдёте информацию: много и на русском языке : )Поскольку информации действительно много, она будет выкладываться небольшими порциями..
Сначала определим основные этапы построения инсталлятора: Копирование программы во временный каталог Запугивание пользователя законами об авторских правах Как получить важные системные данные Копирование Копирование (продолжение) Системный реестр Создание группы программ Создание группы программ (продолжение) Деинсталляция. Ну а теперь перейдём непосредственно к написанию инсталлятора.. Запомните одно важное правило: инсталлировать программу можно с человеческих носителей (винчестеры, компакт- диски, ZIP- диски) и с дискет : ) Если вы собираетесь написать инсталляцию с дискет, которая явно не поместится на одну дискету, то у вас есть шанс хорошо провести время : ) Как вы знаете, Windows сбрасывает ненужную ей в данный момент информацию на диск. Это правильно, но это касается данных. Программы никогда на диск не сбрасываются, поскольку в Windows сегмент кода программы не может быть изменён.
Когда Windows нужна память и ей под руку подворачивается ваша программа, она её просто выкидывает - и всё. Когда ваша программа снова становится нужна, Windows снова загружает её из выполняемого файла. Эта в высшей степени корректная техника перестаёт работать при инсталляции с дискет. Ваша программа, например, копирует четвёртую дискету и тут выясняется, что у неё (у программы) пропал кусок кода.
- В программе 2 варианта примерного 10-ти дневного меню на 2-х разовое питание и на 4-х разовое питание, а также 10-ти дневное меню свободного стола. Составление и печать меню.
- Составление меню. Формирование блюд для заказов. Запустить программу 'Кулинарные рецепты' и открыть данную БД, выбрав в меню 'Файл' -> 'Открыть базу данных.'.
Какие проблемы? - Windows пытается прочитать файл a: setup. Только не паникуйте!
Забудьте о сложностях с написанием меню, наша система рассчитает его. Минска» использует программу MASHA для написания меню с 01.06.12.
Эта проблема давно решена, иначе вы не могли бы установить на свой компьютер ни одной программы! Всё очень просто - программа инсталляции копирует себя и все необходимые файлы во временный каталог на жёсткий диск и перезапускает себя с жёсткого диска. Это и есть первый этап инсталляции. В зарубежных программах он обычно называется "Prepare to install". Ещё раз обратите внимание на то, что совсем не обязательно выполнять этот этап, если вы инсталлируетесь не с дискет, или если ваша инсталляция умещается на одну дискету. На втором этапе программа инсталляции обычно показывает пользователю несколько страшных предупреждений; что- то типа "если вы не заплатите за эту программу, то сидеть вам в тюрьме три пожизненных срока". Я слышал, что некоторые пользователи со слабым сердецем даже умирали за компьютером от таких угроз : ) Реализация этого этапа до идиотизма тривиальна, поэтому мы и не будем на нём останавливаться подробно.
Следущий этап - третий. Здесь программа установки дотошно выспрашивает у пользователя кучу всяких важных данных: имя пользователя и его огранизацию, тип установки, куда будем ставить, как будет называться группа программ и так далее.
. создание индивидуально оформленных DVD меню или выбор из списка заготовок. MP4Joiner это простая бесплатная программа для соединения . Программа не предназначена для автоматического составления меню, так как это практически невозможно автоматизировать.
На этом этапе нам встретятся некоторые технические трудности, но их несложно обойти. Четвёртый этап - копирование. Конечно, это не очень сложно, но некоторые проблемы у нас всё- таки возникнут. Во- первых, надо проверить наличие свободного места на целевом диске. Во- вторых, надо удостовериться, что у нас есть доступ к нужному каталогу. В- третьих, надо проверять, нет ли уже такого файла.. Вы ещё не передумали писать программу инсталляции?
Следующий, пятый, этап - настройка системного реестра (registry). Достаточно тривиальная процедура, правда, при инсталляции большого продукта, записывать придётся очень много. Предпоследний, шестой, этап, заключается в создании группы программ в меню "Пуск". Или, возможно, вы захотите вынести ярлык на рабочий стол. Наконец, финальная часть включает демонстрацию нескольких файлов (например, readme), затем онлайновую регистрацию (подробно на ней я останавливаться не буду) и последнее сообщение "Инсталляция успешно завершена". Теперь мы можем перейти к подробному рассмотрению этапов. Чтобы не смущать высокое собрание подробным рассмотрением алгоритма, приведу конкретный пример исходника.
Setup; uses Windows, Sys. Utils; const Re. Run. Parameter = '/install_from_temp_directory'; var Temp. Path: array [0. MAX_PATH] of Char; Src. Path: String ; begin if Param. Str(1) = Re. Run.
Parameter then Src. Path : = Param. Str(2) else if Get. Drive. Type(PChar(Param. Str(0)[1] + ': ')) = DRIVE_REMOVABLE then begin // Если программа была запущена без ключа и с дискеты, то // копируем её во временный каталог и перезапускам // Текущее приложение завершаем. Get. Temp. Path(MAX_PATH, Temp. Path); // Добавлям к пути временного каталога символ '', если его там нет if (Str. Len(Temp. Path) > 0) and (Temp.
Path[Str. Len(Temp. Path)] < > '') then Str. Cat(Temp. Path, ''); // Копируем файл через вызов функции Copy. File из Win. API Copy. File(PChar(Param. Str(0)), PChar(String(Temp.
Path) + Extract. File. Name(Param. Str(0))), False ); // Запускаем файл с двумя параметрами Win. Exec(PChar(String(Temp. Path) + Extract. File. Name(Param. Str(0)) + ' ' + Re.
Run. Parameter + ' ' + Extract. File. Path(Param. Str(0))), Cmd. Show); Exit; end else Src. Path : = Extract. File. Path(Param. Str(0)); // Здесь начинается программа инсталляции // Переменная Src. Path показывает нам, откуда надо копировать файлы end.
Есть две грабли, на которые можно наступить в приведённом примере. Первые лежат в вызове функции Get. Temp. Path . Если у вас нет переменных окружения TMP и TEMP , то временным каталогом станет текущий каталог программы , то есть, фактически, ваша дискета. Вы можете проверять, не находится ли временный каталог на сменном диске (с помощью вызова Get. Drive. Type ), и, если находиться, считать временным каталогом C: TEMP (если его нет - создайте самостоятельно).
Вторые грабли заключаются в том, что после завершения инсталляции программу из временного каталога желательно удалить, но сделать этого вы не сможете, поскольку программа в этот момент выполняется. Вспомните, что в Windows выполняющуся программу удалять нельзя. В общем случае, решения этой проблемы я не знаю.
Собственно, поскольку файл останется во временном каталоге, он будет одним из первых кандидатов на удаление (если пользователь хоть когда- нибудь чистит свой временный каталог : ) Тем не менее, есть один хитрый способ удаления этого файла, о котором я расскажу ниже, в параграфе о деинсталляции. Примечание: Если для вас важен размер вашей инсталляции, вы можете взять только тот кусочек, который приведён выше, и сделать из него отдельную программу (которая будет очень небольшого объёма). Саму программу инсталляции вы предварительно сжимаете, а перед запуском распаковываете её во временный каталог (а не копируете, как это сделано здесь). Обратите внимание, что в этом случае программа должна распаковываться в любом случае, а не только если она запущена с дискеты. Да, есть и такой этап. Если вы пишете программу, которая будет распространяться как freeware, вам всё равно придётся вывести небольшое окно и поставить пользователя в известность о том, что вы не отвечаете за все неприятности, которые могут с ним произойти во время использования вашей программы. Как это делается?
Если вы не знаете, как сделать диалоговое окно, то, по моему, вам ещё рано писать инсталляции. Если знаете, то выведите окно и поместите в нём нужный текст.
Примечание: Поместить несколько строк текста можно разными способами. Во- первых, вы можете обрабатывать событие On. Paint диалоговой формы и рисовать многострочный текст на ней с помощью функции Windows API, которя называется Draw. Text. Во- вторых, вы можете вывести текст через компонент TRich.
Edit, предварительно установив у него свойство Border в bs. None, свойство Color - в cl. Btn. Face,а свойство Enabled - в False.
Запрещённый (disabled) компонент TRich. Edit выглядит не так, как запрещённый компонент TMemo; и отличие заключается в том, что он не меняет цвет текста на серый (что нам, собственно, и нужно). Зачем делать компонент запрещённым? Дело в том, что в этом случае он выглядит просто как многострочный TLabel, например, его нельзя редактировать, из него нельзя выделить текст, ему не передаётся фокус, если вы пробегаете по компонентам с помощью клавиши TAB - несомненно, это то, что нам нужно.
На этом этапе нам потребуются некоторые системные данные: имя пользователя и организация, путь, куда потребуется инсталлировать программу и некоторые другие. Сейчас мы разберёмся, как и откуда эти данные можно получить. Имя пользователя и организация Во время инсталляции, программы иногда запрашивают имя пользователя и его организацию. Возможно, для работы вашей программы эти данные не понадобятся, но если они вам нужны, вы должны их запросить. Как правило, программа инсталляции берёт эти данные из Windows (поскольку при установке Windows пользователь их уже вводил) и просит всего лишь изменить их, если это необходимо. Наш вопрос звучит так: где Windows хранит имя пользователя и организацию? В реестре есть всего два местп, где записаны эти данные: HKEY_LOCAL_MACHINESoftwareMicrosoftWindowsCurrent.
Version HKEY_LOCAL_MACHINESoftwareMicrosoftWindows NTCurrent. Version Registered. Owner = 'Имя' Registered. Organization = 'Организация' В "обычных" версиях Windows, эти значения хранятся в ключе Windows, а в Windows NT - Windows NT. Поскольку "единства" здесь нет, можно проверить версию Windows с помощью функции Get. Version. Ex или проверять оба вышеописанных ключа.
Куда копировать программу Можно сформулировать наш вопрос и по другому: где находиться каталог Program Files? Некоторые инсталляции считают, что это C: Program Files .