Рассылка закрыта
При закрытии подписчики были переданы в рассылку "Интернет: Образование, Работа и Бизнес" на которую и рекомендуем вам подписаться.
Вы можете найти рассылки сходной тематики в Каталоге рассылок.
Программирование на DELPHI в вопросах и ответах #14
Информационный Канал Subscribe.Ru |
Программирование на Delphi. Выпуск №14 от 05.01.05.
|
|||||||||||||||
1. Публикация всего вопроса, перед ответами на него, вместо основной темы, - для лучшего понимания... Согласен, будет лучше и легче. [Feniks]. По-моему сразу писать весь вопрос целиком не стоит. Предлагаю сделать выбор пользователю: если он пожелает поподробнее узнать о вопросе, то сделать для него соответствующую ссылку или всплывающее hint сообщение. [fil]. Действительно, если вы забыли вопрос, откройте предыдущие выпуски рассылки (или спец-выпуски - так гораздо удобнее) или загляните на наш сайт, где есть все вопросы и ответы. В связи с этим публикация вопроса полностью отменяется. Тема закрыта. 2. Открытие раздела, в котором содержатся ссылки на документацию по Delphi... В принципе, раздел открыть можно - он поможет опытным программистам. Рассылка то задумывалась как помощь начинающим, так что личный ответ человека, а не набор найденных статей и кусков кода компьютером я считаю как лучшую помощь "чайникам". [fil]. Думается, что ответы, состоящие из кусков документации или статей тоже имеют полное право на жизнь, потому что их сначала надо найти, а потом - не полениться донести до вопрошающего! Это правильно (далеко не все знают где что можно прочитать)! Мало бы кому хотелось бы получить ответ на простой вопрос в виде ссылки на длинную статью, в которой ответ надо еще найти (или понять)... Ведь, если немного вдуматься, то получается, что бОльшая часть ответов - собственная интерпретация прочитанного, увиденного или услышанного. А на счет ссылок, это - обязательно (помимо авторства, что немаловажно!), потому, как одного куска, обычно, для понятия всего механизма решения вопроса, недостаточно, а умный человек всегда постарается постичь, то что ему нужно (хотя здесь сам себя поправлю - иногда достаточно просто идеи). [Андрей Лучников]. Это точно. открыть такое крайне необходимо. Хотя ... других "программистов" тоже понять можно. Зачем гдето рыться, если можно спросить. Во всяком случае такого народа, и даже не среди программистов уж очень много, отвыкли оне думать головой. Ну сделаете вы такой раздел, с уймой ссылок и очень хороший, заходит туда юзверь и ищет ответ на вопрос "как мне создать картинку при загрузке программы...". Ну нет там такого, а есть "Создание всплывающего логотипа при загрузке приложения". Результат - вопрос в форум, быстрый ответ админа, мысли админа о том самом кролике, юзвере и его матери... тогда и прийдется интеллектуальный поиск к этому разделу прикручивать. И встанет вопрос - а спать я когда буду ? За любые добрые дела надо расплачиваться... [Звягинцев Павел]. В догонку к предыдущему письму. Сижу во многих технических рассылках, так там ситуация та-же. Бороться бесполезно. В КАЖДОЙ рассылке есть вопрос "меня выкидывает из интернета и через минуту комп перегружается" и в каждой второй"какие дне дрова поставить, чтобы мой сидюк начал читать ДВД". Уж и ругались, и в архив отсылали, и к первоисточнику (органу от которого этот юзер произошел), бесполезно ... :((( Естественно на такие вопросы не то что отвечать не хочется, оне вызывают раздражение. А что делать - неизвестно. [Звягинцев Павел]. Да!!! [Vasiliy Gorshkov]. Я бы хотел чтобы в этом разделе были не только ссылки по Delphi но и по OpenGL, WinAPI, DX и т.д. и т.п.(а они бывают и на Си). [Рудов Антон]. Да будем….!!!!!! [Шишкин Максим]. Ну что же, давайте откроем этот раздел! Но только со следующего выпуска. Публиковать мы будем по 3 ссылки в каждом выпуске - не больше, чтобы всегда было, что оставить на следующий раз. Итак, жду ваших ссылок. Присылайте их сюда. Наш конкурс продолжается! Напомню вкратце его правила. Найдите на нашем сайте на одной из страниц секретный текст и расшифруйте его. Зашифрован он был без каких-либо программ. Затем пришлите его нам по этой ссылке. Первые 10 правильно ответивших читателей получат на свой счёт 25 баллов, а в конце февраля читатель, набравший наибольшее количество баллов, получит в подарок CD! Желаю удачи! Top-3 (читатели, лидирующие по кол-ву баллов).
Правила нашей рассылки: |
|||||||||||||||
41. Как в Popupmenu напротив пункта поместить иконку? [Ответить]. 42. Здравствуйте, Как мне можно определить MAC - адрес компа? Можно ли найти его по IP-адресу? Или наоборот, по MAC - адресу - IP-адрес? Спасибо. [Ответить]. 43. Подскажите как мне написать прогу - генератор паролей, только чтобы там можно было указывать самому из каких символов генерировать пароль. Или подскажите где найти исходник такой проги. [Ответить].
|
|||||||||||||||
4. (Изменение параметров экрана). [Отвечает: Садовников Владимир]: Есть очень хорошая функция - EnumDisplaySettings(DeviceName,ModeNum,DevMode).
Первый параметр - имя устройства. Если монитор один - смело ставь nil.
ModeNum - номер режима (можешь менять от 0 до тех пор, пока функция не вернёт False).
DevMode - структура типа TDevMode. В неё запихивается всё - и разрешение экрана, и количество бит на точку, и частота.
Чтобы узнать текущий режим работы монитора, в качестве ModeNum передай значение $ffffffff - и вернётся текущий режим.
Чтобы получить все доступные режимы - можешь написать следующее (будут выведены все доступные режимы):
procedure TForm1.FormCreate(Sender: TObject); 5. (Программы в стиле Windows XP). [Отвечает: Vasiliy Gorshkov]: Используй компонент XPManifest. 11. (Иконка программы в System Tray). [Отвечает: Vasiliy Gorshkov]: Я использовал компонент RXTrayIcon. Небольшой пример:
procedure TForm1.FormCreate(Sender: TObject); 33. (Отслеживание событий изменения дисплея). [Отвечает: Feniks]: В Винде предусмотрено сообщение WM_DISPLAYCHANGE. Это сообщение
Винда отправляет всем окнам и прогам, если изменилось:
1. частота обновления;
2. разрешение экрана;
3. количество цветов;
Так написана в хелпе, но там не указано, что оно срабатывает при
изменении частоты, а только при изменении разрешения и количество
цветов. Хотя у меня срабатывает по всем трем условиям на Вин ХР.
Есть еще одно сообщение WM_DEVMODECHANGE. Но я не знаю зачем оно, в
хелпе что-то сказано о смене устройств и изменений в файле win.ini и
сообщений WM_WININICHANGE и WM_SETTINGCHANGE.
ИМХО, тебе все-таки нужно ловить и обрабатывать WM_DISPLAYCHANGE.
Так что пробуй. Вот пример перехвата сообщений:type var implementation {$R *.DFM} procedure TForm1.WMDEVMODECHANGE(var Msg : TWMDEVMODECHANGE); Memo1.Lines.Add(DateTimeToStr(Now)+' - получено WM_DEVMODECHANGE'); procedure TForm1.WMDISPLAYCHANGE(var Msg : TWMDISPLAYCHANGE); Memo1.Lines.Add(DateTimeToStr(Now)+' - получено WM_DISPLAYCHANGE'); end. Вы также можете ответить на предыдущие вопросы. Поскольку на них уже ответили как минимум раз, они больше не публикуются в рассылке. Но если вы можете что-то добавить к ответам других, пожалуйста, отвечайте - ответы будут опубликованы. Найти предыдущие вопросы вы можете на нашем сайте: http://www.delphi-faq.fatal.ru/ или в спец-выпусках рассылки. |
|||||||||||||||
Написание инсталлятора на Delphi (Часть 7). Создание группы программ Менеджер программ (Program Manager) знаком многим из тех, кто работал в Windows ещё в незапамятные времена. Сейчас, когда в Windows появился Проводник, менеджер программ ушёл на второй план и исользуется сейчас, в основном, с одной-единственной целью — создавать группы программ во время инсталляции. :) Менеджер программ может быть сервером DDE-соединения. Если вы ничего не знаете о DDE — не беспокойтесь: всё, что нам потребуется, вы прочитаете в этой статье ниже. Для работы с DDE-серверами мы будем использовать компонент DdeClientConv, который находится на закладке System панели компонентов. Что такое DDE? DDE (Dynamic Data Excahnge) — это устаревшая технология, которая использовалась давным давно для передачи данных между программами (сейчас для этих целей используется OLE). Передача данных в DDE производится через соединения. Программа-клиент устанавливает соединение с программой-сервером, передаёт/принимает данные и разрывает соединение. Применительно к нашей задаче, менеджер программ будет выступать в роли DDE-сервера, а программа инсталляции — в роли DDE-клиента. DDE предоставляет двухуровневую схему связи с сервером: для её установления клиенту необходимо указать имя сервера и имя сервиса (topic), который клиент хочет у сервера запросить. Для больших и толстых серверов, имя сервиса является насущной необходимость, для маленьких и простых — непонятным параметром, необходимость которого очень трудно объяснить. Менеджер программ — простая и маленькая программа, поэтому имя сервиса у неё совпадает с именем сервера. Поместим на форму компонент DdeClientConv и настроим его в инспекторе объектов. Свойства DDEService и DDETopic должны быть установлены в PROGMAN. Свойство ConnectionMode переключите в ddeManual —устанавливать и разрывать соединение мы будем вручную. Почему? Одним из правил, которых я придерживаюсь, является правило не кушать ресурсы без необходимости. Я создаю объекты в программах сразу перед тем, как они мне понадобятся; выделяю память непосредственно перед операторами, её использующими; и открываю файл, только тогда, когда уже готов его читать. Зачастую. :) Именно поэтому открывать соединение с менеджером программ я предлагаю только тогда, когда вся остальная работа уже выполнена. Хорошо. Будем считать, это было лирическое отступление и вернёмся к нашим баранам. Может оказаться, что у нас под рукой нет подходящей формы для того, чтобы поместить на неё DdeClientConv. В этом случае можно создавать компонент DdeClientConv вручную: var Перед тем, как что-то сделать с сервером, вы должны вызвать метод OpenLink (установить соединение), а после работы — CloseLink (соответственно, разорвать). Помимо приёма и передачи данных, DDE-сервер может выполнять команды клиента. Всё очень просто: мы передаём серверу строку, говорим, что это команда — и он её исполняет. Методы ExecuteMacro или ExecuteMacroLines компонента DdeClientConv передают серверу команду (и команды, соответственно) для выполнения. Команды менеджера программ заключаются в квадратные скобки, и выглядят приблизительно так: [CreateGroup("SomeTools",0)] [ShowGroup("Стандартные")] [AddItem("c:\windows\notepad.exe")]. Эти команды мы подробнее рассмотрим ниже, а перед этим остановимся ещё на одном важном моменте работы с менеджером программ — получении информации о текущем состоянии дел. Что нас может интересовать? Какие группы уже созданы, какие элементы находятся в этих группах... Обратите внимание, что этой информацией мы можем и пренебречь — для того, чтобы создать группу, нам вовсе не требуется знать, какие группы уже созданы. Пример показывает, как можно прочитать список групп из менеджера программ: var
Прочитав список групп, мы можем прочитать содержимое любой группы из этого списка (например, первой): var Менеджер программ возвращает в первой строке название группы (в кавычках), имя файла группы (с расширением .GRP) и количество элементов в группе. Всё это разделяется запятыми. Далее идёт информация об элементах: командная строка (в кавычках), каталог по умолчанию, иконка, позиция в группе (по горизонтали и вертикали), номер иконки, клавиши быстрого доступа (в целочисленном виде) и флаг "свернуть при запуске". Вот содержимое группы Стандартные: "Стандартные",C:\WINDOWS\ГЛАВНО~1\ ПРОГРА~1\СТАНДА~1,7,1 По большому счёту, нам эта информация не потребуется. Но, может быть, вы захотите заменить один из элементов группы во время инсталляции — в этом случае, конечно, надо знать, что изменять. Далее я опишу способ создать группу и элемент в группе. var Полный список команд плюс описание вы найдёте в файле win32.hlp. Здесь я приведу только их список, чтобы вы знали, что искать: CreateGroup, ShowGroup, DeleteGroup, Reload, AddItem, ReplaceItem, DeleteItem и ExitProgman. Далее мы перейдём ко второму способу работать с группами программ — через интерфейсы, предоставляемые Проводником. Но об этом в следующем выпуске... Для завершения создания инсталлятора вам нужно будет прочитать 2 оставшиеся статьи. Если вы всё делаете так, как описано в статьях, то смело продолжайте, а мы в конце оценим ваш труд! Когда доделаете свой инсталлятор, то пришлёте его нам, а мы оценим ваши труды и прибавим на ваш счёт значительное количество баллов! Присылайте свои статьи по адресу delphi-faq@list.ru с темой 'Clause' (без кавычек), и они будут опубликованы в ближайших выпусках рассылки. Большая просьба: статью оформляйте в -txt или -doc формате и используйте -zip или -rar сжатие (без самораспаковки). |
|||||||||||||||
Итак, отныне данный раздел будет присутствовать в рассылке. Также он открыт и на сайте. Здесь могут находиться практически любые файлы, тем или иным образом, связанные с Delphi. Это могут компоненты, исходники программ, различные plug-in'ы для Delphi и всё, всё, всё... Если вам есть, что добавить сюда, - пишите, щёлкнув по этой ссылке. Только большая просьба: не присылайте файлы сразу! Итак, что же сегодня новенького? Компоненты: Gradient - Градиент, предоставляющий большие возможности: несколько десятков вариантов перетекания, эффекты, превращения и всё всё всё, чтобы сделать красивую программу. StatusBar Pro - Строка состояния с дополнительными возможностями изменения внешнего вида. Исходники программ: Transliterator - Транслитератор текста из русского в английский.
|
|||||||||||||||
Здесь представлены ссылки на дружественные сайты нашего портала. Если вы тоже хотите стать нашим другом, разместите баннер на главной странице своего сайта. Подробнее о том, как стать другом, можно прочитать здесь: http://www.delphi-faq.fatal.ru/banner.htm, а узнать о всех наших друзьях - на странице http://www.delphi-faq.fatal.ru/friends.htm http://infomania2004.webhost.ru/ - Этот сайт создан для того, чтобы вы могли получить интересующую вас информацию с минимальными затратами сил и времени. Если вы не нашли здесь нужной информации, вы можете оставить заявку на ее поиск. Как только информация будет найдена, она появится на сайте, а вам сообщат об этом. |
|||||||||||||||
Не ругайте Господа нашего. Представьте сеть, в которой 6 миллиардов юзеров. А каково там быть сисадмином?! - Чем хакер отличается от юзера? 60-ые: Sex & Drugs & Rock'n'Roll. Заходит учитель информатики в класс за 5 минут до начала урока. Смотрит - все ученики уже сидят за машинами, программы пишут. Учитель подходит к общему рубильнику и отключает напряжение во всем классе. По классу проносится взрыв возмущения: На Новый Год все одели разные маски: кто зайчика, кто лисичку: И только сисадмин одел свою любимую: 255.255.255.0. Присылайте свои "компьютерные" анекдоты по этой ссылке: delphi-faq@list.ru и они обязательно будут опубликованы! |
|||||||||||||||
Товарищи программисты! Проявляйте свою активность. Давайте помогать друг другу! |
|||||||||||||||
Сайт рассылки: http://www.delphi-faq.fatal.ru E-mail: Delphi-FAQ@list.ru Рассылка: http://subscribe.ru/catalog/comp.soft.prog.delphifaq |
http://subscribe.ru/
http://subscribe.ru/feedback/ |
Подписан адрес: Код этой рассылки: comp.soft.prog.delphifaq |
Отписаться |
В избранное | ||