| ||
Ещe больше окон!Просто Строители Ни одно включение компьютера, на котором установлена ОС Windows, не обходится без того, чтобы перед нами не возникали различные окна, с помощью которых операционная система организует диалог с пользователем или обозначает какие-либо длительные процессы, не давая, таким образом, усомниться в своей работоспособности на данный момент. Это, в свою очередь, определяет вполне конкретный стандарт, которого следует придерживаться при написании программ, запускаемых под Windows. Понятно, что пользователю намного проще разобраться с работой программы, если перед ним появляются все те же стандартные окна, постоянно встречающиеся и в других приложениях. Например, всем привычны окна навигации по файловому пространству, которые мы видим в "Проводнике", диалоги открытия или сохранения документа в Word`е. Описанию методов добавления подобных окон в свои программы при работе в среде Borland C++ Builder и посвящена данная статья. Сразу отметим, что в данной статье мы не будем касаться приемов работы непосредственно с компонентами из вкладки Dialogs, которые дают возможность удивительно просто вводить в свою программу разнообразнейшие диалоговые окна. Наша цель - малоизвестные VCL-функции, а также наборы функций из API (Application Programming Interface) - Интерфейса Прикладного Программирования. Для совсем начинающих поясним: API представляет собой огромную коллекцию из сотен Си-функций и структур. Применение их дает возможность наиболее полно использовать функциональные возможности операционной системы и аппаратные средства компьютера. Как правило, доступ к этим функциям и структурам носит глобальный характер и лишь иногда требует подключения заголовочных файлов и библиотек. Окна, позволяющие выбрать директорию Согласитесь, вид такого окна вряд ли способен придать элемент профессионализма программе, особенно на фоне Windows XP, но, тем не менее, функционально свои задачи оно выполняет. И если вас не оттолкнул трогательный примитивизм в стиле Windows 3.11, то приведенный ниже код будет небесполезен: #include Выбранный путь будет содержаться в строковой переменной NameOfDir, естественно, после положительного завершения диалога. Намного приятней, с эстетической точки зрения, выглядит окно, которое мы видим на рис.2. #define NO_WIN32_LEAN_AND_MEAN Как видите, сложность заключается лишь в понимании, какими структурами и функциями следует воспользоваться в каждом конкретном случае, а дальше следует инициализация экземпляра структуры и передача его по ссылке функции. Окна, позволяющие выбрать файл AnsiString NameOfFile; Полное имя файла, как нетрудно догадаться, содержит строковая переменная NameOfFile. Второй и третий параметр задают, соответственно, фильтр по расширению при отображении списка файлов и расширение по умолчанию, присоединяющееся к имени файла при положительном завершении диалога. Последний параметр в PromptForFileName определяет, какой диалог будет вызван. Когда он равен истине, то мы получаем стандартный диалог сохранения файла, в противном случае - открытия. Безусловно, вызов подобных диалоговых окон можно реализовать и не используя VCL. Для этого API предлагает нам функции GetOpenFileName, GetSaveFileName и структуру OPENFILENAME: Окно Свойств файла или папки
Научимся вызывать его программным путем. Для этого следует обратиться к функции ShellExecuteEx и структуре SHELLEXECUTEINFO. И, как это ни покажется утомительным, снова создать экземпляр структуры, проинициализировать его члены и передать по ссылке в функцию. Ниже приведен код, реализующий эти действия: SHELLEXECUTEINFO sh; Окна удаления, копирования и перемещенияРассмотрим еще один тип окон, которые полезны в случае, когда вы предусмотрели возможность производить из своей программы удаление, копирование или перемещение файлов. Такой файловый менеджер "всех времен и народов", как Windows Commander, предлагает пользователю в течение обозначенных выше операций полюбоваться происходящим процессом, тот же "Проводник" в этих случаях не упускает возможность лишний раз поместить на экран монитора очередное окно, да к тому же с анимацией. А это, в свою очередь, создает иллюзию подконтрольности ситуации, что не напрягает. Согласитесь, это выглядит намного солиднее, чем просто замена курсора мышки на вращающиеся песочные часы! Попробуем и мы вызвать подобное окно, например, при копировании файла. Подчеркнем, файл должен быть достаточно большого размера или находиться на таком медленном носителе информации, как дискета, в противном случае окно исчезнет раньше, чем вы успеете его заметить. SHFILEOPSTRUCT fop; На этом, пожалуй, ограничимся. Напоследок отметим три обстоятельства. Частичный отказ от VCL-компонент и методов в вашей программе путем прямого обращения к API позволяет, в ряде случаев, получить выигрыш в скорости. Как правило, прямое использование API снимает многие ограничения в функциональности, присущие VCL-компонентам и методам, и в то же время дает возможность лучше разобраться в самой библиотеке визуальных компонент. При планировании пользовательского интерфейса программы следует в первую очередь исходить из соображений целесообразности и без необходимости не перегружать ее, пусть даже симпатичными, окнами. Источник: "Компьютер Price", http://www.comprice.ru
| ||
Copyright © "Internet Zone", http://www.izcity.com/, info@izcity.com |