Отправляет email-рассылки с помощью сервиса Sendsay

Программирование на Delphi

  Все выпуски  

Программирование на Delphi (выпуск 52)


Программирование на DELPHI
Выпуск #52 (23 июля 2006 г.)

Разделы сайта:

Новости сайта
Delphi.int.ru Expert
Файловый архив
Статьи
Компоненты
Plug-in's
Документация
Исходники
Изображения
Игры
Программы
Форум
F.A.Q.
Архив рассылки
Каталог сайтов
Обратная связь

Доброго времени суток, уважаемые читатели!

Когда заметил, что со времени последнего выпуска рассылки прошёл целый месяц, я ужаснулся... Хотя, думаю, причины всем понятны - лето... Хочется отдыхать, а не работать как во все остальные времена года... Но рассылка - вещь нужная и выпуск я решил сделать :-)

Delphi.int.ru Expert: Уважаемые читатели! Пожалуйста, активнее задавайте свои вопросы нашим экспертам. Задать вопрос >>

Подведём результаты опроса... Проголосовало фантастическое количество читателей - 11.

Нужна ли возможность установки аватаров (изображений) для зарегистрированных пользователей сайта?
Да - 6 голосов
Нет - 5 голосов

Думаю, что это дело может и подождать...

Также несколько дней назад состоялся небольшой юбилей - на сайте была зарегистрирована 500-ая пользовательская учётная запись!

Все пожелания по поводу системы Expert отправляйте на expert@delphi.int.ru, а по поводу сайта и рассылки - на admin@delphi.int.ru.

Приятного Вам чтения и безглючного кода! :-)

Разделы рассылки:

Авторское слово
Delphi.int.ru Expert
Статья по Delphi
Файловый архив
Друзья
Юмор

Количество читателей рассылки: 5260.

Delphi.int.ru Expert

Задать вопрос экспертам >> Стать экспертом или уйти из состава экспертов >>Эксперты системы >>

Вопросы и ответы (#37 - #47)
Вопрос № 37

Текст вопроса:

Здравствуйте, хотелось бы написать программу для учета времени и траффика Internet (в разрезе подключений). Какие для этого могут быть использованы функции/процедуры (WinAPI, я так думаю)? Или, может быть, компоненты есть хорошие?...

Вопрос задал участник: Косолапов Дмитрий Юрьевич
Дата и время отправки вопроса: 11.06.2006, 16:47
Всего ответов: 1
Страница данного вопроса >>


Ответы на данный вопрос:

1. [Отвечает: mvp (статус: 3-ий класс), 11.06.2006, 18:12]:

Скачайте компоненту NetTrafMonitor - http://www.delphi.int.ru/download.php?id=142
Там всё с исходниками, так что, если будет интересно, можно и поразбираться.



Вопрос № 38

Текст вопроса:

Есть ли какая-то функция (может, не совсем функция), которая бы возвращала номер строки, в которой она написана? Showmessage('Текущая строка ' + intTOStr(эта функция)')

Вопрос задал участник: mvp
Дата и время отправки вопроса: 14.06.2006, 16:51
Всего ответов: 1
Страница данного вопроса >>


Ответы на данный вопрос:

1. [Отвечает: Alexander A. Gribanov (статус: 1-ый класс), 14.06.2006, 18:06]:

Подобной функции что-то не припомню, но может чем-то поможет Assert() ?

Оценка за ответ: 5.



Вопрос № 39

Текст вопроса:

Здравствуйте. Мне нужно скачать несколько байт с html-страницы (с оффсета, напр., 6626), не закачивая ее целиком. Как это сделать? Точнее, как составить http request (напр., для метода IdHttp.DoRequest)?

Вопрос задал участник: Михаил О.
Дата и время отправки вопроса: 16.06.2006, 14:01
Всего ответов: 2
Страница данного вопроса >>


Ответы на данный вопрос:

1. [Отвечает: Помфюк Владимир Степанович (статус: 5-ый класс), 16.06.2006, 15:28]:

То, что вы хототе сделать возможно в случае FTP, а с HTTP вряд ли получится

Оценка за ответ: 4.
Комментарий: Не уверен... Напр., в TWebRequest есть такие свойства, как ContentRangeStart и ContentRangeEnd, которые, насколько я понимаю, обозначают начало и конец запрашиваемого диапазона.

2. [Отвечает: Вадим К (статус: 7-ой класс), 16.06.2006, 20:00]:

Я думаю что врядли получиться. Например возьмём скрипт. Документ генериться налету и выдать тебе кусочек его врядли получиться. По крайней мере сервер его сгенерирует полностью и передавать также. Но ты можеш прервать гдето в конце нужного диапазона.



Вопрос № 40

Текст вопроса:

Здравствуйте эксперты! Вот сейчас пишу текстовый редактор... Но одно не могу понять, как, чтобы при открытии любого файла (например, с расширением txt) открывалась моя программа и в RichEdit загружался текст из данного файла... Даже после регистрации моей программы к расширению txt при открытии этого файла программа открывается, но текст не загружается... Помогите, кто может...

Вопрос задал участник: feenords
Дата и время отправки вопроса: 17.06.2006, 01:24
Всего ответов: 3
Страница данного вопроса >>


Ответы на данный вопрос:

1. [Отвечает: Dron (статус: 7-ой класс), 17.06.2006, 09:30]:

Раз программа уже запускается для данного типа файлов, значит вам осталась совсем малость. Windows передаёт путь к открываемому файлу в первом параметре к программе. Прочитать его можно так: ParamStr(1). Поэтому для загрузки вам нужно при запуске программы делать что-то вроде этого:
If FileExists(ParamStr(1)) Then
RichEdit.Lines.LoadFromFile(ParamStr(1));

Оценка за ответ: 5.

2. [Отвечает: bruder (статус: 3-ий класс), 17.06.2006, 09:36]:

Здравствуйте, feenords.
Всё очень просто. Дело в том, что твоя программа запускается с параметром, в котором указан путь к открываемому файлу. По событию OnCreate своей формы впиши код.

Приложение:

Оценка за ответ: 5.

3. [Отвечает: Евгений Малышев (статус: 1-ый класс), 18.06.2006, 21:14]:

Здравствуйте, feenords.

Используй параметры командной строки для программы. Имя открываемого файла должно передаваться одним из параметров.
Узнать количество параметров можно при помощи функции ParamCount.
Узнать значение нужного параметра можно при помощи функции ParamStr.

Приложение:

Оценка за ответ: 5.



Вопрос № 41

Текст вопроса:

Уважаемые эксперты! Вопрос такого плана: на TPanel (или ему подобном контейнере) находятся различные компоненты, которые создаются динамически. Требуется "за раз" удалить их все, чтобы потом заново создать. Как это реализовать? При обращении к Controls[n] зачастую программа вылетает с ошибкой. Заранее благодарю.

Вопрос задал участник: Dron
Дата и время отправки вопроса: 17.06.2006, 13:09
Всего ответов: 3
Страница данного вопроса >>


Ответы на данный вопрос:

1. [Отвечает: min@y™ (статус: 2-ой класс), 17.06.2006, 13:33]:

//=======================
Вот попробуй так:
//=======================

Приложение:

Оценка за ответ: 5.
Комментарий: Сначала не понял, в чём отличие того, как писал я и как написали вы... А теперь понял - массив ведь каждый раз сдвигается... Спасибо! :-)

2. [Отвечает: Евгений Малышев (статус: 1-ый класс), 18.06.2006, 21:22]:

Здравствуйте, Dron.

Если Вы используете Delphi 5 или более новый, то можно использовать наследование от класса TFrame.

Создайте новый фрейм TFrame1 и поместите на него все нужные компоненты.

Оценка за ответ: 3.
Комментарий: Наверное вы не поняли вопроса... И как после этого быть? Удалять весь фрейм и потом заново создавать? Это можно сделать и с TPanel...

3. [Отвечает: Alexander A. Gribanov (статус: 1-ый класс), 19.06.2006, 12:22]:

Попробуй удалять не через Controls[n], а через Components[n]. Например так:
while YourPanel.ComponentСount>0 do YourPanel.Components[0].Free;

Ну и конечно не забывай о том, что таким образом будут удалены не те компоненты, которые на панели отображаются, а те, которыми панель владеет.

P.S.: ну и из вопроса не совсем понятно, почему ты создаешь components, а удаляешь widowed controls...

Оценка за ответ: 4.



Вопрос № 42

Текст вопроса:

Как узнать, запаролена ли база Access? D7, ADO.

Вопрос задал участник: Злоумышленник
Дата и время отправки вопроса: 17.06.2006, 18:27
Всего ответов: 0
Страница данного вопроса >>


Ответы на данный вопрос:

К сожалению, ответов на данный вопрос не поступило...



Вопрос № 43

Текст вопроса:

Здравствуйте! Вот и снова я... У меня возник ещё один вопрос... весь инет перерыл - нигде ничего нет по этому вопросу! Вопрос: как перехватить клавишу Del в RichEdit, Memo и Edit, чтобы при нажатии на данную клавишу последующий символ стирался, как во всех текстовых редакторах... а то без каких-либо действий ничего не происходит... ответьте, если не трудно! Заранее спасибо...

Вопрос задал участник: feenords
Дата и время отправки вопроса: 18.06.2006, 00:22
Всего ответов: 3
Страница данного вопроса >>


Ответы на данный вопрос:

1. [Отвечает: bruder (статус: 3-ий класс), 18.06.2006, 11:12]:

Здравствуй, feenords.
Странно, но в RichEdit, Memo, Edit, у меня последующий символ стирается...
Чтобы перехватить нажатие <Delete>, нужно обрабатывать событие OnKeyDown у компонента.
if Key=Ord(VK_DELETE) then

Оценка за ответ: 4.

2. [Отвечает: min@y™ (статус: 2-ой класс), 18.06.2006, 12:08]:

Прочитав вопрос, сделал глаза по 5 рублей :)).
Запустил Delphi, создал проект, положил на форму Edit, Memo и RichEdit. Запускаю - такст нормально стирается клавишей Del. Прикрепляю этот пример к вопросу.

http://www.delphi.int.ru/expert/?step=download&id=1

Предполагаю, что у тебя там какой-нибудь TAction или TMenuItem имеет ShortCut = Del, либо {см. приложение}.

Приложение:

Оценка за ответ: 5.

3. [Отвечает: Евгений Малышев (статус: 1-ый класс), 18.06.2006, 21:29]:

Здравствуйте, feenords.

Используйте события OnKeyUp и OnKeyDown. В них передается параметр с кодом нажатой клавиши. Код клавиши Del не знаю, но это можно вычислить путем вывода (Например, в TLabel) кода.

Оценка за ответ: 4.



Вопрос № 44

Текст вопроса:

1) Как на Delphi 7 узнать температуру процессора, а также желательно, но не обязательно, температуры других устройств (мать, видяха, блок)? 2) Как в компоненте TImage выводить картинки GIF, PNG? Изображения загружаю в Image1 через OpenPictureDialog, но там только bmp, jpg, ico, wmf, emf.

Вопрос задал участник: Мугалимов Юрий Вазикович
Дата и время отправки вопроса: 19.06.2006, 00:30
Всего ответов: 2
Страница данного вопроса >>


Ответы на данный вопрос:

1. [Отвечает: Матвеев Игорь Владимирович (статус: 8-ой класс), 19.06.2006, 08:22]:

1) Use Google!
2) TImage отображает TPicrure, а TPicture - это интерфейс для Bitmap, Icon, Metafile, а если подключить модуль JPEG, и Jpeg. Как отображать GIF - воспользуйтесь RxLib.RxGIFAnimator, а можно взять модуль gifimage.pas (см. http://www.delphi.int.ru/expert/?step=download&id=2), в нем определен компонент TGIFImage, только он не регистрируется, поэтому вы можете использовать его или создавая динамически или дописав небольшой код регистрации а процедуру Register.

Оценка за ответ: 3.
Комментарий: Вроде ответил, а вроде и нет

2. [Отвечает: Вадим К (статус: 7-ой класс), 19.06.2006, 12:15]:

По поводу первого вопроса.
Каждый производитель материнских плат предоставляет свой способ доступа к этой инфе. Иногда эту инфу нельзя узнать никак, так как датчик может отсутствовать.
Все проги, которые "узнают" температуру имеют базы, в которых записано, как получить доступ на конкретной матплате.
Так как не указано тип платы/проца, то советовать ничего не могу

Оценка за ответ: 4.
Комментарий: А где ответ на 2-ой вопрос? мать: ECS K7S5A проц: AMD Duron 1000MHz



Вопрос № 45

Текст вопроса:

Здравствуйте эксперты! Вот решил задать вопрос... по моему интересный... главное - новый... Узнать, конечно, ответ можно и самому, но долго... Вопрос: Как у диалогов (стандартных) сохранить некоторые настройки в ini-файл (пользуюсь ini, так как легко переносить с компа на комп). Например, у Открытия\Сохранения - Расположение - плитка, значки, список и т.д. У выбора цвета - дополнительные цвета... Спасибо за ответы (заранее)...

Вопрос задал участник: feenords
Дата и время отправки вопроса: 19.06.2006, 01:55
Всего ответов: 3
Страница данного вопроса >>


Ответы на данный вопрос:

1. [Отвечает: Dron (статус: 7-ой класс), 19.06.2006, 11:47]:

Насколько мне известно, вид отображения объектов (значки, таблица и пр.) сохранить нельзя - это от пользователя зависит, да и дополнительные цвета тоже... Однако, не раз замечал, что эти параметры действительно восстанавливаются при следующих запусках программы. В частности, каталог, из которого был выбран файл, автоматически открывается при следующем запуске. Наверное Windows самостоятельно занимается сохранением этих настроек для каждого приложения.

Оценка за ответ: 4.

2. [Отвечает: bruder (статус: 3-ий класс), 19.06.2006, 12:08]:

Здравствуйте, feenords!
Что то я не припомню как менять значения в меню "ВИД" (плитка, значки... если такое вообще возможно). А вот с расположением всё просто. При закрытии диалога впиши Листинг1. А при его загрузке Листинг2.
Для дополнительных цветов у ColorDialog'a есть свойство CustomColors. (Всё аналогично)

Приложение:

Оценка за ответ: 4.

3. [Отвечает: Евгений В (статус: 1-ый класс), 19.06.2006, 22:49]:

Ну это не сложно. Смотря, конечно что ты хочешь сохранять в ini.
Если это например расположение объекта на экране или размеры, то можно просто сохранять в него целые числа расположения, размеров и т.п. В приложении смотри упрощённый пример (из одной статьи).
А вообще посмотри вот эту инфу из одной статьи, может пригодится:

Constructor Create('d:\test.INI');
Создать экземпляр объекта и связать его с файлом. Если такого файла нет, то он создается, но только тогда, когда произведете в него запись информации.

WriteBool(const Section, Ident: string; Value: Boolean);
Присвоить элементу с именем Ident раздела Section значение типа boolean

WriteInteger(const Section, Ident: string; Value: Longint);
Присвоить элементу с именем Ident раздела Section значение типа Longint

WriteString(const Section, Ident, Value: string);
Присвоить элементу с именем Ident раздела Section значение типа String

ReadSection (const Section: string; Strings: TStrings);
Прочитать имена всех корректно описанных переменных раздела Section (некорректно описанные опускаются)

ReadSectionValues(const Section: string; Strings: TStrings);
Прочитать имена и значения всех корректно описанных переменных раздела Section. Формат :
имя_переменной = значение

EraseSection(const Section: string);
Удалить раздел Section со всем содержимым

ReadBool(const Section, Ident: string; Default: Boolean): Boolean;
Прочитать значение переменной типа Boolean раздела Section с именем Ident, и если его нет, то вместо него подставить значение Default.

ReadInteger(const Section, Ident: string; Default: Longint): Longint;
Прочитать значение переменной типа Longint раздела Section с именем Ident, и если его нет, то вместо него подставить значение Default.

ReadString(const Section, Ident, Default: string): string;
Прочитать значение переменной типа String раздела Section с именем Ident, и если его нет, то вместо него подставить значение Default.

Free;
Закрыть и освободить ресурс. Необходимо вызвать при завершении работы с INI файлом

Property Values[const Name: string]: string;
Доступ к существующему параметру по имени Name

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

Приложение:

Оценка за ответ: 4.



Вопрос № 46

Текст вопроса:

Переписываю под Delphi старую программку, писанную на BP 7.0. - встретился с проблемой. В программе очень широко используется библиотека модулей TPASCIIZ. Проблема с "прибиванием" этой библиотеки к Delphi-проекту заключается в том, что в модулях TPASCIIZ очень активно используется inline и *.obj файлы. inline-то заменить ассемблерной вставкой- задача весьма простая, но как мне подключать к проекту 16-разрядные *.obj файлы? (в библиотеке TPASCIIZ они подключаются через директиву {$L TPCRT.OBJ}). Или может быть кто-нибудь встречал эту библиотеку переложенной под Delphi? Был бы очень признателен любому дельному совету.

Вопрос задал участник: Мартемьянов А.Б.
Дата и время отправки вопроса: 19.06.2006, 09:09
Всего ответов: 2
Страница данного вопроса >>


Ответы на данный вопрос:

1. [Отвечает: Вадим К (статус: 7-ой класс), 19.06.2006, 12:19]:

>>но как мне подключать к проекту 16-разрядные *.obj файлы?<<
Никак. Делфи генерирует 32битный код. Ну разве эмулятор написать.
Судя по названию, библиотека предназначена для работы со строками. Но в Делфи есть очень много хороших функций. Мож велосипед изобретаем?

2. [Отвечает: Косолапов Дмитрий Юрьевич (статус: 1-ый класс), 19.06.2006, 20:04]:

А зачем заменять inline ассемблерными вставками? По-моему, inline в Дельфях живет и здравствует...



Вопрос № 47

Текст вопроса:

Здравствуйте! Вопрос: Как при сохранении какого-либо документа проверять, есть ли в данной папке такой же файл (по имени и расширению), и если есть, то выводить список действий, которые можно осуществить (например, как в Worde 2003). Я так полагаю, надо сканировать (получать) имена файлов в данной папке и сверять с именем сохраняемого файла, но это может занять много времени (если файлов сотни-тысячи)?.. Заранее спасибо...

Вопрос задал участник: feenords
Дата и время отправки вопроса: 20.06.2006, 00:34
Всего ответов: 3
Страница данного вопроса >>


Ответы на данный вопрос:

1. [Отвечает: Dron (статус: 7-ой класс), 20.06.2006, 08:02]:

А зачем вам такой изощрённый способ? Проверить, существует ли файл, можно так:
If FileExists(FileName) Then ...
Где FileName - полный путь к файлу. А дальше делаете всё, что угодно.

Оценка за ответ: 4.

2. [Отвечает: Косолапов Дмитрий Юрьевич (статус: 1-ый класс), 20.06.2006, 09:30]:

Хочу добавить, что в свойствах компонента диалогового окна сохранения есть Overwrite Promt. Для большинства нужд достаточно его просто установить в true

Оценка за ответ: 5.

3. [Отвечает: Darya Ermakova (статус: 8-ой класс), 20.06.2006, 11:22]:

Если использовать для сохранения компонент SaveDialog, то нужно в Options для ofOverwritePrompt поставить true.

Оценка за ответ: 4.




Статьи  >>

Любой из читателей может присылать свои статьи по адресу info@delphi.int.ru и они будут опубликованы в ближайших выпусках рассылки и на сайте.


Файловый архив  >>

Временно нет обновлений...
Ссылки  >>

Обмен ссылками и баннерами приветствуется для сайтов схожей тематики. Здесь представлены самые последние ссылки:

All for Delphi - Научись правильно писать программы! Программы, компоненты, книги, ссылки.
http://xskernel.excode.ru/
Сайт, посвящённый написанию операционной системы. Новости, информация об XSystem Kernel Team, документация, глоссарий, исходники системы. Open Source - наше направление.
 
Рассылки Subscribe.Ru
Интернет для Delphi-программиста
Visual Basic для новичков и профессионалов
Программирование на Delphi
   
 

Юмор.

Буря в пустыне-2 или WinWars (часть 2)
Ведущий раздела: Bruder

Внизу экрана медленно ползла синяя полоска с процентами. Система меж тем рекламировала Winwars для танков, подводных лодок и морских пехотинцев, а также обещала всем приобретшим версию для самолетов бесплатный аплет "Камикадзе 1.01".
Смена картинок подействовала на Фолкона усыпляюще; из полудремотного состояния его вывел звук зуммера. На радаре светилась зеленая точка.
"Обнаружено новое устройство: самолет противника!" - радостно сообщила система.
Фолкон хотел уже выполнить стандартный боевой разворот, но тут заметил кнопку "Удалить" и кликнул по ней мышкой.
"Вы уверены, что хотите удалить самолет противника?" - подозрительно осведомилась система.
"Еще бы!" - Фолкон кликнул "Да". Иракский истребитель пропал с радара. "Так быстро? - удивился лейтенант. - Ну Microsoft дает!" Он даже с уважением принялся изучать появившуюся на экране рекламу Winwars для пилотов-инвалидов, однако от этого занятия его отвлекла ракета, пролетевшая над самой кабиной. Фолкон в недоумении обернулся и увидел иракский перехватчик.
"Что ж ты, твою мать..." - воскликнул Фолкон и только тут увидел, что из неприметной иконки RecycleBin в углу экрана торчит нарисованный хвост самолета. Лейтенант яростно кликнул по иконке и нажал "Очистить".
"Вы уверены, что хотите физически удалить самолет противника? Его восстановление будет невозможно", -предупредила система.
"ДА!" - рявкнул Фолкон, долбя мышь. Из-под крыла сорвался Sidewinder и, оставляя белый пушистый след, помчался навстречу перехватчику. Сверкнула вспышка взрыва, и горящие обломки вражеской машины полетели к земле.
Однако успокаиваться было рано. Пиликающий звук предупредил о новой опасности.
"Обнаружено новое устройство: ракета "земля-воздух"!" - поведала система и впала в задумчивость. Напрасно Фолкон колотил по мышке, глядя, как зловещая точка ползет к центру радара. Наконец система вышла из ступора: "Не могу найти драйвер для этого устройства. Вставьте диск с драйвером и нажмите ОК". С ругательствами Фолкон нажал "Искать".
"Ближайшее соответствие: ручные гранаты, - обрадовала его система. -Применить?"
Фолкон рванул в сторону ручку, уходя в противоракетный маневр. Слишком поздно.
Самолет содрогнулся от взрыва. С трудом выведя поврежденную машину из пике, пилот кликнул по кнопке "Система". Под строчкой "Левое крыло" светились жетлыми трегольниками с восклицательными знаками "Элерон" и "Закрылок", но в остальном он дешево отделался. Синяя полоска, продолжавшая ползти внизу, показывала уже 82%, и у него все еще были шансы выполнить задание.
Радар показал еще два вражеских самолета, но они поднялись сзади и Фолкона особенно не беспокоили. Он знал, что этой иракской рухляди просто не догнать сверхскоростной F-22.
Однако самолеты приближались. Фолкон с недоумением взглянул на спидометр и понял, что его скорость быстро падает. "Что за черт?! - воскликнул лейтенант. -
Двигатели же в порядке, и топлива полно!" Экран тем временем принялся ожесточенно помаргивать изображением песочных часов. Стрелки приборов двигались короткими рывками, подолгу застывая в одном положении. "Недостаточно свободной памяти, - снизошла до объяснения система. -Выгрузите лишние задачи."
Фолкон вызвал список задач, пытаясь понять, что означают названия типа winppl или v666apl и какие из них лишние. Меж тем двигатели почти смолкли, скорость упала до критической: еще чуть-чуть - и самолет рухнет вниз. Обалдевшие от такой тактики воздушного боя иракцы просвистели мимо, один слева, другой справа, и, не выходя из ступора, столкнулись перед носом Фолкона.
Лейтенант тем временем отыскал в списке строчку "Отслеживание противника", рядом с которой в скобках значилось: "[Не отвечает]", и нажал "ОК". Экран радара погас, зато самолет стал вновь набирать скорость.

:))

Присылайте компьютерные анекдоты, рассказы и истории по этой ссылке и они обязательно будут опубликованы.
Ведущий рассылки, Ерёмин Андрей.

В избранное