понедельник, 21 сентября 2009 г.

Три способа открытия файлов

Многие программы создают собственные файлы, например файлы отчётов, а некоторые - даже свои форматы файлов типа MSOffice. И конечно, в большинстве случаев возникает необходимость эти файлы открывать в программе.
Нет, рассматривать процедуры получения данных из файлов я не буду, потому что для каждого файла они свои. Моя задача скромнее - рассказать, как можно передать программе имя открываемых файлов.

Если подумать, то можно вспомнить, что файлы того же MSWord открываются двойным щелчком. Да и блокнотовские - тоже. Редко, но всё же используется способ открытия через диалог. Ну и совсем уж нечасто встретишь открытие файлов путём сбрасывания файла в окно открытой программы. Тем не менее такой способ тоже есть.

И сечас я расскажу, как в HiAsm произвести открытие файлов такими способами и какие для этого нужны компоненты.

Открытие файлов через диалог. Этот способ я показывал и в предыдущих постах, но сейчас повторю.



Эта схема, конечно же, файл не открывает, а лишь получает путь к нему и отображает его в надписи. А если нужно загрузить текст из файла, то используется компонент Memo, т.е. многострочное поле. Впрочем, про него я тоже говорил в посте про создание блокнота.

Открытие путём сбрасывания иконки файла в окно программы. Этот способ тоже имеет право на существование, так как иногда очень удобен. Для его реализации нам понадобится всего один компонент - DropFile, который находится на вкладке "Контролы". У него две видимых и две спрятанных точки.



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

Наконец, третий способ.
Открытие файлов из параметров программы. Когда файл открывается двойным щелчком по иконке, запускается соответствующая программа и ей в качестве параметров передаются имена файлов. Эти имена можно получить с помощью компонента Application со вкладки "Контролы".

У этого компонента есть точка Params, которая содержит массив имён файлов. А для массивов тоже есть компоненты, на вкладке "Массивы".



Здесь при входе в программу сразу перебирается весь массив переданных имён. Киньте на иконку программы любые файлы и увидите результат.

Но здесь хотелось бы ещё настроить открытие "своих" файлов в своей программе, т.е. связать определённый тип файлов с программой. Это делается с помощью Реестра. Необходимо знать, ЧТО же необходимо добавить в Реестр. Если вы этого не знаете, не беда. Сейчас я всё покажу.



Здесь вам придётся разобраться с компонентом для Реестра, который находится на вкладке "Система". Целых три таких компонента употреблено в схеме. Все действия с ними происходят при входе в программу, одно за другим.

Сначала в раздел CLASSES_ROOT Реестра, в ключ .myext записывается идентификатор. myext - это расширение ваших файлов. Его можно выбрать любым, помните лишь о точке в начале. Идентификатор - тоже любая строка, но обычно к расширению просто прибавляют "file" и используют как идентификатор.

Второй компонент для Реестра пишет в тот же раздел, ключ myextfile\shell\open, название команды (параметр компонента Data). myextfile - это как раз тот самый идентификатор.

И последний компонент Реестра пишет в ключ myextfile\shell\open\command того же раздела путь к пргограмме в кавычках и "%1", чтобы имя файла передавалось как параметр программы (компонент "память" нужен для того, чтобы параметр Value не брался из потока, ведь в самом-то параметре ничего нет и не нужно).

В общем, теперь можете создавать файлы с расширением myext и открывать их двойным щелчком в вашей программе. Даже если вы перенесёте программу, то при входе в неё в Реестр запишется новый путь, и всё будет работать.

Напоследок покажу, как убрать из Реестра данные о вашем расширении, если вы не захотите больше открывать файлы в своей программе таким образом.
Это делается тоже через компонент для Реестра.



Здесь происходит удаление соответствующих ключей из Реестра, и расширение больше не связано с вашей программой.

6 комментариев:

  1. Регистрация своих расширений в реестре - тема не для новичков. А вот первый пример может им пригодиться: буксировка файла на файл программы-примера высвечивает полный путь к файлу. Такой путь часто требуется для закачки в интернет-архивы.
    Вопрос не в тему урока: если быстро щелкнуть правой мыiкой на поле HiAsm? то в контекстном меню есть пункты "Вставить шаблон" и "Комнаты".
    Что они значат и как ими пользоваться?

    ОтветитьУдалить
  2. Насчёт комнат не знаю - ни разу не пользовался.
    Шаблон - это часть схемы, которую можно сохранить для последующей быстрой вставки через это меню. Нужно выделить часть схемы и выполнить Правка - Добавить шаблон. Придумываем ему имя и группу, куда хотим его поместить. А затем через контекстное меню можно этот кусок схемы вставить. Стоит отметить, что шаблоны сохраняются в папке \Elements\Delphi\tpls, откуда их можно удалить.

    ОтветитьУдалить
  3. На сайте HiAsm в разделе Справка среди команд среды упоминается rooms = Комнаты (описание: Открыть "комнаты" с сайта программы)

    ОтветитьУдалить
  4. Возможно, это что-то вроде своего места для хранения схем прямо на сайте, чтобы обмениваться ими с другими участниками.

    ОтветитьУдалить
  5. Подскажите, пожалуйста, как в своей программе реализовать захват мышью какого-нибудь файла и сбрасывания его на окно другой программы. какой элемент нужен для этого?

    ОтветитьУдалить
  6. Нашел на 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

    ОтветитьУдалить