Рассылка закрыта
При закрытии подписчики были переданы в рассылку "Интернет: Образование, Работа и Бизнес" на которую и рекомендуем вам подписаться.
Вы можете найти рассылки сходной тематики в Каталоге рассылок.
← Декабрь 2004 → | ||||||
3
|
4
|
|||||
---|---|---|---|---|---|---|
6
|
7
|
8
|
10
|
11
|
||
13
|
14
|
15
|
16
|
17
|
19
|
|
20
|
21
|
22
|
23
|
24
|
26
|
|
27
|
28
|
30
|
31
|
Статистика
-1 за неделю
Программирование на DELPHI в вопросах и ответах #10
Информационный Канал Subscribe.Ru |
Программирование на Delphi в вопросах и ответах.
|
||||||
Итак, это уже десятый выпуск рассылки. Надеюсь, вас радует то, что рассылка выходит достаточно часто (как минимум раз в неделю), ведь есть такие рассылки, которые хоть и объявили частую периодичность выхода, но выходят в несколько раз реже, а то и не выходят вообще. Наша рассылка постоянно совершенствуется. Особенно стал замечательным сайт. Думаю, что его переработка прошла не зря. Ждём, кстати, ваших мнений о нём. Приносим также свои извинения за возможные неудобства 12 декабря, когда обновлённый сайт был запущен - некоторые страницы не работали или работали неправильно. На следующий день всё было исправлено. Опрос читателей насчёт того, есть ли у них собственный сайт, скоро подойдёт к концу. Его результаты будут опубликованы в следующем выпуске рассылки. Но теперь голосование будет проводиться более "естественным" способом. Отправка писем на e-mail - не самый удачный вариант. Отныне опросы проводятся через наш сайт. Они будут находиться на его главной странице (http://www.delphi-faq.fatal.ru/), а также в выпусках рассылки (см. ниже). Ссылки с вариантами ответа будут приводить уже на сайт и голос сразу будет учтён, что гораздо удобнее. Также частично изменён дизайн рассылки. Оценивать как всегда вам... Есть ли у вас собственный сайт? Предлагается создание нового раздела "Новости из мира Delphi". Публиковать в этом разделе хотелось бы ссылки на различные компоненты, плагины и вообще всего для Delphi. Пожалуйста, выскажете своё мнение по данному поводу и предлагайте свои идеи - может быть стоит открыть ещё какой интересный раздел? Правила нашей рассылки:
|
||||||
Написание инсталлятора на Delphi (часть 3) Да, есть и такой этап. Если вы пишете программу, которая будет распространяться как freeware, вам всё равно придётся вывести небольшое окно и поставить пользователя в известность о том, что вы не отвечаете за все неприятности, которые могут с ним произойти во время использования вашей программы. Как это делается? Если вы не знаете, как сделать диалоговое окно, то, по моему, вам ещё рано писать инсталляции. Если знаете, то выведите окно и поместите в нём нужный текст.
На этом этапе нам потребуются некоторые системные данные: имя пользователя и организация, путь, куда потребуется инсталлировать программу и некоторые другие. Сейчас мы разберёмся, как и откуда эти данные можно получить. Имя пользователя и организация Во время инсталляции, программы иногда запрашивают имя пользователя и его организацию. Возможно, для работы вашей программы эти данные не понадобятся, но если они вам нужны, вы должны их запросить. Как правило, программа инсталляции берёт эти данные из Windows (поскольку при установке Windows пользователь их уже вводил) и просит всего лишь изменить их, если это необходимо. Наш вопрос звучит так: где Windows хранит имя пользователя и организацию? В реестре есть всего два местп, где записаны эти данные: HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\ В "обычных" версиях Windows, эти значения хранятся в ключе Windows, а в Windows NT — Windows NT. Поскольку "единства" здесь нет, можно проверить версию Windows с помощью функции GetVersionEx или проверять оба вышеописанных ключа. Куда копировать программу Можно сформулировать наш вопрос и по другому: где находиться каталог Program Files? Некоторые инсталляции считают, что это C:\Program Files . В действительности, конечно, он может находиться на другом диске, поэтому мы попробуем поискать его по другому... в реестре. HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\ Можно воспользоваться функцией SHGetSpecialFolderLocation (это даже более корректно с точки зрения Microsoft). Для изменения каталога вы можете вызывать функции SelectDirectory или SHBrowseForFolder . Можно также создать собственное окно диалога "Выбор каталога" с помощью компонента DirectoryListBox . Подробнее о выборе каталога мы поговорим позднее, когда будем рассматривать тонкости процесса инсталляции. Сколько осталось свободного места на диске Программа инсталляции перед копированием файлов обязана проверить, сколько на целевом диске осталось свободного дискового пространства. Это делается при помощью функции GetDiskFreeSpace (из модуля Windows ) или функции DiskFree (из модуля SysUtils ). Вторая функция — это надстройка Delphi над Win API (в смысле, она вызывает GetDiskFreeSpace ), но у неё значительно меньше параметров. Группы программ Обычно программа инсталляции создаёт для новой программы новую группу. Как правило, когда вы вводите название группы, рядом присутствует список, в котром перечислены все существующие группы. Получить такой список можно двумя способами. Один из них — работа с DDE-сервером, который называется Program Manager . Этот способ мы подробно рассмотрим чуть позже . Второй способ не очень сложен и основан на том факте, что всё меню "Программы" находиться в одном из каталогов вашего диска. Все подменю являются на самом деле подкаталогами, а пукнты — обычными ссылками (файлами с расширением .lnk). Путь к папке, содержащей меню "Программы", вы можете найти в реестре: HKEY_CURRENT_USER\Software\Microsoft\Windows\ CurrentVersion\Explorer\Shell Folders\ Далее нас ждёт самый сложный процесс инсталляции - копирование. Там много всяких нюансов и на нём мы остановимся подробнее. Присылайте свои статьи по адресу delphi-faq@list.ru с темой 'Clause' (без кавычек), и они будут опубликованы в ближайших выпусках рассылки. Большая просьба: статью оформляйте в -txt или -doc формате и используйте -zip или -rar сжатие (без самораспаковки). |
||||||
24. Скажите, где можно найти компоненты типа DelphiX, но (и это важно!), работающие с последней версией DirectX. Заранее благодарен! [Ответить]. 25. Помогите рисунки JPG засунуть в DLL, а потом использовать в Delphi. И еще как сохранить параметры о цветах в ini файл. [Ответить]. 26. Добрый вечер всем. Пишу сейчас программу на стыке графики и баз данных. В последних почти не шарю совсем, поэтому спрошу :) 27. Пишу сейчас прогу "Домашний поисковик", типа Google Desktop Search, но с поддержкой туевой хучи типов файлов и не могу найти путного описания устройства HLP и CHM файлов. Можете ли поделиться? А может сами библиотеку напишете? К проге прицепляются плагины (ДЛЛ), которые возвращают ей словарь встреченных в файле осмысленных буквосочетаний, та их заносит в базу, ну и вторая функция - по запросу возвратить осмысленную цитату из файла (опять же типа поисковика в нете). Шаблон библиотеки могу кинуть, программой тож понятно, поделюсь, хотя она и так пишется Open Source - цепляй свои плагины и вперед... [Ответить]. 28. Здравствуйте. Пишу тут игру на WinAPI. Мне нужно воспроизводить фоновую музыку и звуки (выстрел, столкновение?), использую функцию PlaySound(address, 0, SND_ASYNC or SND_MEMORY), но при воспроизведении звуков фоновая музыка останавливается и больше не воспроизводится. Подскажите, как нормально воспроизводить фоновую музыку!!! Заранее благодарен. [Ответить]. 29. Индикатор загрузки процессора в кнопке "Пуск" - как фон, т.е. между буквами и цветом кнопки. Реально? Если да, то как. [Ответить]. Вопросы, ждущие ответа: 12. Привет. Может, кому-нибудь из читателей, удалось написать утилиту, показывающую все активные TCP/IP соединения (аналог Netstat) на Delphi без использования Fnugry Netstat Components. Поделитесь пожалуйста исходником, а то дядька Google мне отказался с этим помочь. [Ответить]. 14. Скажите, как узнать занятость принтера и передать задачу на другой принтер сети! [Ответить]. 15. Здраствуйте.Можете сказат как я могу выбрат компоненть из другого Application? Например в другом App. я использвал с одного Edit-a ( у него ест OnChange(), OnKeyPress() и.др ) или он может бьт не визуальным. И хочу что добавить код в новую Application( первому Form-у OnCreate ) чтобы он автоматически выбрал ту Component-у какую я дам в коде. Заранее блогодорен!!! [Ответить]. 21. Задача состоит в следующем: необходимо непрерывно получать изображения со сканера (по крайней мере настолько, насколько это возможно, но без выгрузки основной программы). До сих пор, я работал под twain-библиотекой. Там все идет нормально, но на n-ном BITMAP'е у сканера происходит "крейз" и до перезагрузки WIDOWS, достучаться до него невозможно. Помогите, пожалуйста, решить эту проблему. P.S. Насколько я знаю, при работе со стандартными программами windows (Imaging & Kodak Image), а также при использовании ActiveX TImgScan (кроме того, он очень неудобен), возникают подобные же проблемы. [Ответить]. 22. Господа - программисты, расскажите как проще всего вывести на экран Delphi - программы готовую таблицу базы данных Microsoft Access? Заранее благодарен. [Ответить].
|
||||||
20. (Работа с Word-документами из Delphi-программы). [Отвечает: SysLine]: Как раз пишу этакую вещь для одного препода. Он хочет формировать билеты из списка
вопросов. Как допишу до более-менее дельного варианта могу исходники дать. 4. (Изменение разрешения экрана). [Отвечает: Dron]: Вот пример процедуры, которая изменяет разрешение экрана: 5. (Добавление к программам поддержки ХР-стиля). [Отвечает: Dron]: Сделать программам XP-стиль в Delphi очень просто. Если ты используешь Delphi 7, то там на вкладке Win32 есть компонент XPManifest. Помести его на форму и запусти программу. Она станет в XP-стиле. Однако вкратце объясню смысл работы этого компонента. На самом деле, этот компонент есть смысл поместить на форму только один раз - ХР-шным становится сразу всё приложение. При помещении этого компонента просто добавляется модуль XPMan.pas в раздел uses. А сам этот модуль не делает ничего, кроме подключения WindowsXP.res. В этом WindowsXP.res "зашит" .manifest-файл. Файл манифеста имеет следующий текст: <?xml version="1.0" encoding="UTF-8" standalone="yes"?> Иными словами, он просто указывает программе, что нужно использовать Windows Common Controls версии 6.0, а не 5.x, которые "старые". Между прочим, подключить манифест можно АБСОЛЮТНО К ЛЮБОЙ ПРОГРАММЕ. Создай файл с текстом, приведённым выше и именем {имя приложения}.exe.manifest и помести в каталог с программой. Программа станет в XP-стиле, в какой бы среде она не была написана! Очень удобно, кстати. Пример: если твоя программа имеет экзешник prog.exe, то файл-манифест должен называться prog.exe.manifest (manifest - расширение!). Как видишь, всё очень просто. 17. (Копирование URL в TMemo). [Отвечает: Dron]: Не совсем понял вопроса... Какой URL? Откуда? Если так, покажу, как двойным кликом по URL одного TMemo скопировать этот URL в другое TMemo. Сначала убедись, что в твоём "исходном" TMemo гиперссылки выделяются (синий цвет, курсор hand). Насколько помню, когда кликнешь, url выделяется весь. Как его перенести в другой TMemo? Да через буфер обмена конечно! Такой незатейливый код, как keybd_event(VK_CONTROL,0,0,0); делает глобальное виртуальное нажатие комбинации клавиш <Ctrl>+<C>, т.е. текст будет скопирован в буфер обмена. Дальше - вставляем его в другое Memo: Memo2.PasteFromClipboard; 17. (Индикатор загрузки процессора). [Отвечает: Dron]: Не совсем понял сути запроса. Так что нужно сделать - графический индикатор или получать % загрузки процессора? Насчёт граф. индикатора - даже и говорить не буду. Наверняка, есть такие компоненты, да и вручную легко сделать - TShape's в два столба помести, да раскрашивай их. Если нужен график, который в Диспетчере Задач зовётся Хронологией загрузки ЦП - используй TChart. Там это можно сделать. Но я приведу код, узнающий загрузку ЦП: unit Unit1; interface uses type var implementation {$R *.dfm} type TSystem_Basic_Information = packed record type type var function Li2Double(x: LARGE_INTEGER): Double; procedure GetCPUUsage; begin // get number of processors in the system status := NtQuerySystemInformation(SystemBasicInformation, @SysBaseInfo, SizeOf(SysBaseInfo), nil); { // Show some information bLoopAborted := False; // get new system time // get new CPU's idle time // if it's a first call - skip it // CurrentValue = NewValue - OldValue // CurrentCpuIdle = IdleTime / SystemTime // CurrentCpuUsage% = 100 - (CurrentCpuIdle * 100) / NumberOfProcessors // Show Percentage // Abort if user pressed ESC or Application is terminated end; // store new CPU's idle and system time // wait one second procedure TForm1.Button1Click(Sender: TObject); end. 19. (Размещение ProgressBar в StatusBar). [Отвечает: Dron]: Разместить ProgressBar в StatusBar очень легко. Почти все сторонние компоненты-статусбары позволяют класть на себя всё, что угодно. Но можно и вручную сделать. Пишешь: StatusBar1.ControlStyle := StatusBar1.ControlStyle + [csAcceptsControls]; После этого на данном статус-баре можно размещать любые компоненты и они не будут от него "отскакивать". Вы также можете ответить на предыдущие вопросы. Поскольку на них уже ответили как минимум раз, они больше не публикуются в рассылке. Но если вы можете что-то добавить к ответам других, пожалуйста, отвечайте - ответы будут опубликованы. Найти предыдущие вопросы вы можете в архиве рассылки: http://subscribe.ru/archive/comp.soft.prog.delphifaq/, либо на сайте рассылки (http://www.delphi-faq.fatal.ru/).
|
||||||
Здесь представлены ссылки на дружественные сайты нашего портала. Если вы тоже хотите стать нашим другом, разместите баннер на главной странице своего сайта. Подробнее о том, как стать другом, можно прочитать здесь: http://www.delphi-faq.fatal.ru/banner.htm. http://www.x-program.narod.ru/ - На нашем сайте Вы найдёте некоторые наши программы.
Также мы занимаемся создание ПО для любой версии ОС Windows под заказ.
|
||||||
Приходит программист к пианисту посмотреть на новый рояль. После продолжительного обзора с презрительным взглядом заявляет: Звонок в компьютерную контору: Определили астрологи, что через 5 дней конец света. Собирает директоров Клинтон: CPU not found! Starting software emulation. Познакомился сисадмин с веб-дизайнершей, первым делом спросил, какой у нее IP, но получив ответ 'динамический', сразу покинул ее. Позже он друзьям объяснял это тем, что не любит девушек легкого поведения. Присылайте свои "компьютерные" анекдоты по этой ссылке: delphi-faq@list.ru и они обязательно будут опубликованы!
|
||||||
Товарищи программисты! Проявляйте свою активность. Давайте помогать друг другу! |
||||||
Сайт рассылки: http://www.delphi-faq.fatal.ru E-mail: Delphi-FAQ@list.ru |
http://subscribe.ru/
http://subscribe.ru/feedback/ |
Подписан адрес: Код этой рассылки: comp.soft.prog.delphifaq |
Отписаться |
В избранное | ||