Нет, рассматривать процедуры получения данных из файлов я не буду, потому что для каждого файла они свои. Моя задача скромнее - рассказать, как можно передать программе имя открываемых файлов.
Если подумать, то можно вспомнить, что файлы того же MSWord открываются двойным щелчком. Да и блокнотовские - тоже. Редко, но всё же используется способ открытия через диалог. Ну и совсем уж нечасто встретишь открытие файлов путём сбрасывания файла в окно открытой программы. Тем не менее такой способ тоже есть.
И сечас я расскажу, как в HiAsm произвести открытие файлов такими способами и какие для этого нужны компоненты.
Открытие файлов через диалог. Этот способ я показывал и в предыдущих постах, но сейчас повторю.
Эта схема, конечно же, файл не открывает, а лишь получает путь к нему и отображает его в надписи. А если нужно загрузить текст из файла, то используется компонент Memo, т.е. многострочное поле. Впрочем, про него я тоже говорил в посте про создание блокнота.
Открытие путём сбрасывания иконки файла в окно программы. Этот способ тоже имеет право на существование, так как иногда очень удобен. Для его реализации нам понадобится всего один компонент - DropFile, который находится на вкладке "Контролы". У него две видимых и две спрятанных точки.
Вот такая схема позволит отображать имя брошенного в окно программы файла в заголовке этого окна. Помните только, что у компонента DropFile есть и другие события, может быть, они вам пригодятся.
Наконец, третий способ.
Открытие файлов из параметров программы. Когда файл открывается двойным щелчком по иконке, запускается соответствующая программа и ей в качестве параметров передаются имена файлов. Эти имена можно получить с помощью компонента Application со вкладки "Контролы".
У этого компонента есть точка Params, которая содержит массив имён файлов. А для массивов тоже есть компоненты, на вкладке "Массивы".
Здесь при входе в программу сразу перебирается весь массив переданных имён. Киньте на иконку программы любые файлы и увидите результат.
Но здесь хотелось бы ещё настроить открытие "своих" файлов в своей программе, т.е. связать определённый тип файлов с программой. Это делается с помощью Реестра. Необходимо знать, ЧТО же необходимо добавить в Реестр. Если вы этого не знаете, не беда. Сейчас я всё покажу.
Здесь вам придётся разобраться с компонентом для Реестра, который находится на вкладке "Система". Целых три таких компонента употреблено в схеме. Все действия с ними происходят при входе в программу, одно за другим.
Сначала в раздел CLASSES_ROOT Реестра, в ключ .myext записывается идентификатор. myext - это расширение ваших файлов. Его можно выбрать любым, помните лишь о точке в начале. Идентификатор - тоже любая строка, но обычно к расширению просто прибавляют "file" и используют как идентификатор.
Второй компонент для Реестра пишет в тот же раздел, ключ myextfile\shell\open, название команды (параметр компонента Data). myextfile - это как раз тот самый идентификатор.
И последний компонент Реестра пишет в ключ myextfile\shell\open\command того же раздела путь к пргограмме в кавычках и "%1", чтобы имя файла передавалось как параметр программы (компонент "память" нужен для того, чтобы параметр Value не брался из потока, ведь в самом-то параметре ничего нет и не нужно).
В общем, теперь можете создавать файлы с расширением myext и открывать их двойным щелчком в вашей программе. Даже если вы перенесёте программу, то при входе в неё в Реестр запишется новый путь, и всё будет работать.
Напоследок покажу, как убрать из Реестра данные о вашем расширении, если вы не захотите больше открывать файлы в своей программе таким образом.
Это делается тоже через компонент для Реестра.
Здесь происходит удаление соответствующих ключей из Реестра, и расширение больше не связано с вашей программой.
Регистрация своих расширений в реестре - тема не для новичков. А вот первый пример может им пригодиться: буксировка файла на файл программы-примера высвечивает полный путь к файлу. Такой путь часто требуется для закачки в интернет-архивы.
ОтветитьУдалитьВопрос не в тему урока: если быстро щелкнуть правой мыiкой на поле HiAsm? то в контекстном меню есть пункты "Вставить шаблон" и "Комнаты".
Что они значат и как ими пользоваться?
Насчёт комнат не знаю - ни разу не пользовался.
ОтветитьУдалитьШаблон - это часть схемы, которую можно сохранить для последующей быстрой вставки через это меню. Нужно выделить часть схемы и выполнить Правка - Добавить шаблон. Придумываем ему имя и группу, куда хотим его поместить. А затем через контекстное меню можно этот кусок схемы вставить. Стоит отметить, что шаблоны сохраняются в папке \Elements\Delphi\tpls, откуда их можно удалить.
На сайте HiAsm в разделе Справка среди команд среды упоминается rooms = Комнаты (описание: Открыть "комнаты" с сайта программы)
ОтветитьУдалитьВозможно, это что-то вроде своего места для хранения схем прямо на сайте, чтобы обмениваться ими с другими участниками.
ОтветитьУдалитьПодскажите, пожалуйста, как в своей программе реализовать захват мышью какого-нибудь файла и сбрасывания его на окно другой программы. какой элемент нужен для этого?
ОтветитьУдалитьНашел на svn обновленный DropFile. В него добавлена возможность захвата мышью файла
ОтветитьУдалитьhttp://svn.hiasm.com/packs/delphi/conf/DropFile.ini
http://svn.hiasm.com/packs/delphi/code/hiDropFile.pas
http://svn.hiasm.com/packs/delphi/code/DropSourcek.pas