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

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

  Все выпуски  

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


Информационный Канал Subscribe.Ru

Программирование на DELPHI
Выпуск #28 (8 июня 2005 г.)  
Разделы сайта

Новости сайта
Система "Эксперт"
Вопросы и Ответы

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



Связь

Администратор
Система "Эксперт"
Информация

 


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

Напомню, что наш сайт проживает по адресу http://www.delphi.int.ru/. На сайте имеется встроенный форум: http://www.delphi.int.ru/forum/. Пожалуйста, не задавайте свои вопросы исключительно в рассылку. Многие из них могут быть обсуждены именно на форуме. В рассылке же, наверное, стоит публиковать наиболее интересные вопросы. Ну а если на форуме появится много интересных тем, ссылки на них Вы увидите и в рассылке.

На сайте по-прежнему проводится регистрация посетителей: http://www.delphi.int.ru/modules/register/. Пока зарегистрировалось очень небольшое количество пользователей, причём самые активные участники рассылки также не зарегистрировались. Если у Вас ограничен доступ в интернет и Вы не можете зайти непосредственно на сайт, Вы можете зарегистрироваться по почте. Для этого отправьте письмо на адрес info@delphi.int.ru с темой "Registration". Текст письма должен быть заполнен по следующему шаблону:

Добавьте в каждую из строк после знака "=" необходимые данные, после чего скопируйте полное содержимое данного поля в текст письма. Регистрация будет произведена в течение 1-2 дней, после чего Вы получите уведомительное письмо.

Хотелось бы получить от Вам поддержку, уважаемые читатели. Присылайте свои статьи/компоненты/исходники и другие файлы. Для этого заполните форму, перейдя по вот это ссылке: http://www.delphi.int.ru/modules.php?name=Download#add. Если никто не откликнется, разделы скоро опустеют, чего очень не хотелось бы. А также Вы можете прислать программы, написанные лично Вами на Delphi. Они тоже появятся на сайте, а имя автора будет опубликовано в рассылке.

До встречи на форуме!

Рассылка

Авторское слово
Новые вопросы
Ответы на вопросы

Статья по Delphi
Файловый архив
Друзья
Юмор



Статистика

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

2711.



Подпишитесь...

 


Читатели, лидирующие по количеству баллов:

Место
Имя
Кол-во баллов
Место
Имя
Кол-во баллов
1
Feniks
258
6
Igor
76
2
Dron
202
7
Андрей Лучников
73
3
Iron Monk
200
8
VeroLom
66
4
Садовников Владимир
182
9
Ершов Денис
53
5
Dasha
172
10
Павел Звягинцев
50

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


Основные правила нашей рассылки:

1. Не присылайте ответов на вопросы вроде "да я не знаю" или "да/нет". Такие ответы не публикуются.
2. Вопросы, не касающиеся Delphi, не принимаются (для этого существуют другие рассылки).
3. Запрещено присылать вложенные файлы, размером более 100 Кб, без предварительной связи с администратором.
4. Не изменяйте тем присылаемых писем. Письма с "неправильными" темами не публикуются! Используйте текстовый формат писем.


Новые вопросы.


Вопрос #134. Автор вопроса: magicSasha. Вопрос отправлен: 03.06.2005 15:32. Вопрос:

Как можно увидеть метку диска?

[Ответить на вопрос]. Ответ ожидается до 16.06.2005 15:32:00.


Вопрос #135. Автор вопроса: Виталий. Вопрос отправлен: 04.06.2005 15:56. Вопрос:

Как создать поиск с любой частью поля, а также чтобы была возможность продолжить поиск? В VBA это называется "Найти далее". То есть по находит первое совпадение (подчеркну: с любой часть поля - не целиком, не сначала), а по кнопочке идет далее по таблице и находит совпадения.

[Ответить на вопрос]. Ответ ожидается до 16.06.2005 15:56:00.


Вопрос #136. Автор вопроса: YaricZ. Вопрос отправлен: 04.06.2005 21:46. Вопрос:

Использую базу данных в формате XML (через компонент DataSource, ClientDataSet), где хранятся вопросы и ответы к тесту - соответствующему приложению. При запуске теста база каждый раз заново загружается в программу. Возможно изменение базы через редактор вопросов. Вопрос: можно ли зашифровать базу вопросов, чтобы она была доступна для обновления, чтения, изменения? Цель - скрыть от тестируемого правильные ответы (база легко просматривается в Total Commander при нажатии F3).

[Ответить на вопрос]. Ответ ожидается до 16.06.2005 21:46:00.


Вопрос #137. Автор вопроса: YaricZ. Вопрос отправлен: 04.06.2005 21:47. Вопрос:

Хочу реализовать загрузку и сохранение баз. Проблема в следующем: при создании базы берётся имя, которое задаёт пользователь, и к нему приписывается расширение .XML (OpenDialog.FileName + \'.xml\'). Здесь всё нормально, но при загрузке базы для редактирования и сохранения изменений уже к имени файла Base.xml снова приписывается \".Xml\" ...

[Ответить на вопрос]. Ответ ожидается до 16.06.2005 21:47:00.


Вопрос #138. Автор вопроса: YaricZ. Вопрос отправлен: 04.06.2005 21:47. Вопрос:

Как сделать анализатор звука (спадающие пики как в Winamp) ?

[Ответить на вопрос]. Ответ ожидается до 16.06.2005 21:47:00.


Вопрос #139. Автор вопроса: YaricZ. Вопрос отправлен: 04.06.2005 21:48. Вопрос:

Можно ли ориентировать меню (компонент MainManu) вертикально?

[Ответить на вопрос]. Ответ ожидается до 16.06.2005 21:48:00.


Вопрос #140. Автор вопроса: Дмитрий. Вопрос отправлен: 06.06.2005 13:18. Вопрос:

Салют всем! У меня такая проблема. Я сделал небольшую базу данных, где есть связанные таблицы. В общем когда удаляешь запись номер 3 главной таблицы, а потом вставляешь запись номер три и получается, что в подчинённой таблице записи связанные с бывшей записью номер три не удалились. В Database Desktop я сделал каскадное удаление записей, т. е. удаляешь главную и из всех подчинённых удаляются сооттветствующие записи, но при работе программы выдаётся ошибка: Master has detail records. Cannot delete or modify. Тогда я попробовал удалять записи программно, но и тут меня постигла неудача, выдаётся ошибка: Table cannot be opened for exclusive use. Типа не могу получить эксклюзивный доступ, хотя во время работы программы в связанных таблицах можно вручную удалять, добавлять и т п. Прошу разъяснить, что я не так делаю.

[Ответить на вопрос]. Ответ ожидается до 16.06.2005 13:18:00.



Ответы на вопросы.

127. (Многоуровневая БД для интернета). Полный текст вопроса:
Требуется создать многоуровневую БД и выложить на сервере в Инет. Что лучше использовать, если известно что к базе одновременно может обращаться от 100 чел и более? БД должна быть ориентирована на скорость, а приложение генерировать html-файл.

1. [Отвечает: kuzr, 01.06.2005 09:14]: Oracle10i тебе поможет: широкие возможности маштабирования, высокая скорость поиска (если конечно сервер хорошо заточен), ну и т.д. и т.п. Дистрибутив Oracle10i можно скачать с сайта разработчика: www.oracle.com. Желаю Удачи.

2. [Отвечает: VeroLom, 06.06.2005 03:29]: IMHO, проще всего использовать XML.

128. (Перенос программ и БД на другой компьютер). Полный текст вопроса:
На одном ПК установила Delphi, работает нормально. На другом ПК - при входе в SQL Explorer и DBGrid компьютер виснет. И програмка на Delphi при запуске зависает, не загружается. В чем причина? Срочно надо.

1. [Отвечает: Денис, 01.06.2005 06:43]: Поставить на том компе BDE.

129. (Файл PDOXUSRS.NET). Полный текст вопроса:
Я сейчас пишу программу с базой данных для одной организации, я использую BDE и конкретно Paradox. Программа работает нормально, но когда я пробовал установить ее на том компьютере, на котором она должна будет работать столкнулся с неожиданной проблемой: там стоит Win2000 и нет прав на запись файлов в корневом каталоге основного диска (C:\). Но программы, использующие BDE, создают какой-то кеш–файл PDOXUSRS.NET в этом каталоге. Где-то прочитал, что этот Кеш создает ядро BDE для ускорения каких-то действий, но мне там этот файл не нужен – требуется либо заблокировать его создание, либо указать для него другой каталог. Может кто сталкивался с такой проблемой?

1. [Отвечает: kuzr, 01.06.2005 08:53]: Уважаемый Матвеев Игорь, для изменеия местоположения файла PDOXUSRS.NET, Вам необходимо запустить BDEадминистратор, открыть вкладку Configuration/Configuration/Drivers/Native/Paradox там вы увидите параметр NetDir он и отвечает за место положение файла PDOXUSRS.NET в вашем случае там должно быть С:\. меняете этот параметр на нужный вам, сохраняете конфигурацию, ПЕРЕЗАГРУЖАЕТЕСЬ и все.

2. [Отвечает: Лялин Александр Николаевич, 01.06.2005 08:53]: Надо просто на папку, в которую этот файл ложится, дать право на запись. У меня такая же ситуация была при работе с Oracle. Каждая папка имеет индивидуальные настройки прав пользователей по работе с ней. Нужно пользователю, который работает на этом компе дать больше прав по работе с этой папкой. Не помню как это делается в Win2000, но покопавшись в "Свойствах" папки, я думаю, это можно будет отыскать.

130. (BDE-процессор). Полный текст вопроса:
Подскажите, пожалуста: я сделал программу с базами данных BDE, а запускаться это приложение может только с Delphi или установленным процессором баз данных. Вопрос: где его взять (процессор)? Спасибо.

1. [Отвечает: Андрей Лучников, 01.06.2005 08:23]: Самый простой способ - распространять программу в виде инсталяшки. А инсталяшку сделать на InstallShield, он умеет включать BDE в проект. Там же можно указать необходимые алиасы (если они используются).

2. [Отвечает: Лялин Александр Николаевич, 01.06.2005 08:55]: BDE можно устанавливать отдельно и без Delphi. Запусти исталляшку Delphi, но установи только BDE. Или скачай в инете инсталляшку BDE, как отдельного приложения.

132. (Поиск с помощью индексирования). Полный текст вопроса:
Здравствуйте! Подскажите, как, используя индексирование, можно организовать поиск данных? У меня база данных нормативных документов. Поиск нужен по слову и по фразе (в названии документа и в тексте).

1. [Отвечает: Андрей Лучников, 01.06.2005 08:30]: Думается SQL (в т.ч. локальный) поможет - оператор Like, например:
Select * from data.dbf
where name like "%моск%"
Найдет все, где в имени, в любом месте (знак % заменяет любое кол-во символов) есть "моск". Но лучше, конечно, по оператору почитать хелп - возможности оператора достаточно большие. Единственный недостаток - критичен к регистру.

2. [Отвечает: kuzr, 01.06.2005 09:09]: День добрый, Barbariska. Один из вариантов поиска (и самый лутший) - это использование языка запросов SQL. Пример (отбор из Таблицы NormaTable строк, у которых столбец NameDoc содержит слово ГОСТ):
Select *
from NormaTable
where NameDoc like '%ГОСТ%'
Также можно использовать метод Locate но как его применять, если честно, сейчас не помню и книги, где описывается, нет под рукой.


В рассылке публиковались вопросы, на которые не ответил никто. Найти эти вопросы Вы можете на нашем сайте в разделе "Эксперт": http://www.delphi.int.ru/modules/expert/. Если Вы ответите на них, авторы этих вопросов будут Вам очень признательны. Все вопросы, опубликованные в данном выпуске рассылки, действительны в течение 7 дней после отправки самой рассылки. Ответы, присланные по истечении данного срока, приняты не будут. Пожалуйста, обратите на это внимание и рассчитайте свободное время. И не забывайте: чем больше ответов на вопросы Вы присылаете и чем качественнее эти ответы, тем больше у Вас шансы выиграть призы.


Статья по программированию.

Процедуры для работы с динамическими переменными.

Основные процедуры для работы с динамическими переменными приведены в следующей таблице.

Dispose Высвобождает память из-под динамической переменной.
Finalize Деинициализирует динамическую переменную.
FreeMem Высвобождает память из-под динамической переменной.
GetMem Создает динамическую переменную, выделяя под нее указанный объем памяти.
Initialize Инициализирует динамическую переменную.
New Создает динамическую переменную.
ReallocMem Перераспределяет память для динамической переменной.

Процедура Dispose( var P: Pointer);

Модуль: System.

Описание:
Процедура высвобождает область памяти, которую использует динамическая переменная P. Значение указателя P в данном случае становится неопределенным. Если функции передан недопустимый указатель, то возникает исключение EInvalidPointer. Обработка ошибок с помощью механизма обработки исключительных ситуаций включается директивой компилятора {$I+}.

Пример:
type
   MyString = string[15];
var
   P: ^MyString;
begin
   New(P);
   P^:= '01 января 2000г';
   Dispose(P);
end;


Процедура Finalize( var V [; Count: Integer] );

Модуль: System.

Описание:
Процедура деинициализирует динамическую переменную, указанную в параметре V. Данная процедура должна использоваться только в тех случаях, когда для высвобождения памяти из-под динамической переменной не используется процедура Dispose. Для объектов глобальных, локальных и динамических переменных при высвобождении памяти с помощью стандартной процедуры Dispose, компилятор генерирует код, завершающий работу с длинными строками, переменными типа Variant и интерфейсами после разрушения переменной. Если память, содержащая не пустые или не инициализированные длинные строки, Variant-переменные или интерфейсы, высвобождается не при помощи процедуры Dispose (например, процедурой FreeMem), то перед высвобождением памяти требуется вызвать процедуру Finalize для того, чтобы закрыть указанную переменную. Процедура Finalize присваивает всем длинным строкам пустое значение, а переменные типа Variant и интерфейсы деинициализирует (устанавливает тип Unassigned). Дополнительный параметр Count может быть определен в тех случаях, когда необходимо высвободить память, из-под нескольких переменных, содержащихся в непрерывном блоке памяти (например, динамически распределенный массив строк) для того, чтобы закрыть все переменные одной операцией. Если переменная, определенная в параметре V не содержит длинных строк, Variant-значений и интерфейсов, то компилятор просто игнорирует вызов процедуры.

Пример:
См. пример к функции FreeMem.


Процедура FreeMem( var P: Pointer [; Size: Integer] );

Модуль: System.

Описание:
Процедура уничтожает переменную, с которой связан указатель P и высвобождает память, занимаемую данной переменной. В необязательном параметре Size указывается объем памяти в байтах, выделенный ранее динамически под переменную. Если после действия процедуры FreeMem, вызвать указатель P, то возникнет ошибка, т.к. указатель имеет неопределенное значение.

Пример:
var
   Vf: File;
   Size: Integer;
   Buffer: PChar;
begin
     AssignFile(Vf, 'work.txt');
     Reset(Vf, 1);     { Открывает файл work.txt }
     Size:= FileSize(Vf);     { Определяет размер файла }
     GetMem(Buffer, Size);     { Создает динамический буфер }
  try
     BlockRead(Vf ,Buffer^, Size);     { Читает содержимое файла в буфер }
   ...
{ В этом месте должен быть код, использующий буфер }
   ...
  finally
     Finalize(Buffer);
     FreeMem(Buffer);     { Освобождает память от буфера }
  end;
     CloseFile(F);     { Закрывает файл }
end;


Процедура GetMem( var P: Pointer; Size: Integer );

Модуль: System.

Описание:
Процедура создает динамическую переменную: выделяет блок памяти размером Size байт под переменную, указанную в параметре P, и возвращает указатель на начало данного блока памяти. Параметр P может представлять собой любой тип указателя. Указатель на новую созданную переменную записывается как P^. Если для создания динамической переменной недостаточно памяти, то возникает исключение EOutOfMemory.

Пример:
См. пример к функции FreeMem.


Процедура Initialize( var V [ ; Count: Integer] );

Модуль: System.

Описание:
Процедура инициализирует динамическую переменную. Если динамическая переменная была создана не с помощью процедуры New, а другим способом (например, с помощью процедуры GetMem или процедуры ReallocMem), то после создания переменной, ее необходимо инициализировать процедурой Initialize. При вызове данная процедура обнуляет память, занятую длинными строками Variant-значениями и интерфейсами. Длинным строкам присваивается пустое значение, а для Variant-значений и интерфейсов устанавливается неопределенный тип (Unassigned). Необязательный параметр Count может быть определен, когда память под несколько переменных выделена в непрерывном адресном пространстве. Это позволяет инициализировать все переменные одним вызовом процедуры. Если переменная, определенная в параметре V не содержит длинных строк, Variant-значений и интерфейсов, то компилятор игнорирует данный вызов процедуры и не генерирует ни какого кода.


Процедура New( var P: Pointer );

Модуль: System.

Описание:
Процедура создает новую динамическую переменную, и ассоциирует с ней указатель P. Параметр P может представлять собой любой тип указателей. Размер памяти, выделяемый под переменную, зависит от типа указателя. Новая созданная переменная может быть вызвана как P^. Если для создания динамической переменной недостаточно памяти, то возникает исключение EOutOfMemory. По завершению использования динамической переменной память, выделенную ранее процедурой New, необходимо высвободить вызовом процедуры Dispose.

Пример:
См. пример к функции Dispose.


Процедура ReallocMem( var P: Pointer; Size: Integer );

Модуль: System.

Описание:
Процедура перераспределяет память размером Size байт под динамическую переменную P. При вызове данной процедуры указатель P должен иметь значение nil или должен указывать на динамическую переменную, память под которую была предварительно выделена с помощью процедур GetMem или ReallocMem.Если P = nil, Size = 0, то процедура не производит никаких действий.Если P = nil, а Size <> 0, то процедура распределяет новый блок памяти размером Size и устанавливает указатель P на начало блока. Такой вызов процедуры аналогичен обращению к процедуре GetMem.
Если P <> nil, а Size = 0, то процедура высвобождает блок памяти, на который указывает P и устанавливает P = nil. Вызов процедуры с указанными параметрами аналогичен обращению к процедуре FreeMem, но в отличие от FreeMem процедура ReallocMem очищает указатель.


Присылайте свои статьи по адресу info@delphi.int.ru с темой 'Articles' (без кавычек), и они будут опубликованы в ближайших выпусках рассылки и на сайте. Также вы можете заполнить вот эту форму. Большая просьба: статью оформляйте в -txt или -doc формате и используйте -zip или -rar сжатие (без самораспаковки). Если статья находится в формате HTML, пожалуйста, не используйте стиль Performatted.


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

Из данного раздела Вы можете скачать различные файлы: компоненты, plug-in'ы для Delphi, документацию по программированию, программы, игры, написанные на Delphi и всё остальное... Вы можете добавить свои файлы в данный раздел, будем очень признательны! Чтобы сделать это, пожалуйста, заполните форму на сайте. Когда администратор ответит Вам и даст согласие на добавление файла(ов), тогда Вы их и пришлёте. Убедительная просьба соблюдать все вышеописанные правила.

Название / описание файла
Категория
Объём
Ссылки
SPC Components - Набор компонентов, похожих на стандартные, позволяющих изменять цвет.
Компоненты
157 Кб
Monster FTP Client - Пакет компонентов для работы с протоколом FTP. Здесь присутствует и ListView и TreeView. С помощью данного пакета можно создать неплохой FTP-клиент.
Компоненты
107 Кб

Чтобы перейти к разделу "Файловый архив" на сайте, нажмите на эту ссылку.


Дружественные сайты.

Здесь представлены ссылки на дружественные сайты нашего портала. Если вы тоже хотите стать нашим другом, разместите наш баннер на своём сайте. Подробнее о том, как это сделать, можно прочитать на странице данного раздела на нашем сайте. Узнать о всех наших друзьях более подробно вы сможете на той же странице...


http://infomania2004.webhost.ru/ - Этот сайт создан для того, чтобы вы могли получить интересующую вас информацию с минимальными затратами сил и времени. Если вы не нашли здесь нужной информации, вы можете оставить заявку на ее поиск. Как только информация будет найдена, она появится на сайте, а вам сообщат об этом.


http://www.visualbasic.noka.ru/ - Программирование на Visual Basic & Basic. На сайте Вы найдете множество примеров, статьи, исходники, ActiveX, а также многое другое!


http://www.sashook.nm.ru/ - Игры, флешки, обои, компьютерные приколы.


http://www.ssgroup.fatal.ru/ - Delphi 39. Ресурс для программистов. Статьи, исходники, компоненты, учебники, справочники, FAQ, программы и многое другое.


Дружественные рассылки:

Рассылки Subscribe.Ru
Интернет для Delphi-программиста
X-Program ПО, новости сайта и программирование в Delphi7
Visual Basic для новичков и профессионалов

 


Юмор.

В зоопаpке pебенок, возбужденно тыча пальцем на клетку с обезьянами, кpичит:
- Мама ! Мама ! Смотpи - пpогpаммисты !
- Почему ты так pешил ?
- Они как папа ! - не мытые, лохматые и мозоль на попе !!!

* * *

Чем больше пpогpамм может списать пpогpаммист, тем выше он ценится.

* * *

Забрали интернетчика в армию. На границе служить. Стоит он на посту. Вдруг - шаги.
- Пароль!!!
...тишина
- Пароль!!!!
...тишина
Программер снимает с плеча автомат... короткая очередь...
- User Anonymous Access Denied.

* * *

World Wild Web.

* * *

Бензин дорожает, потому что из-за подорожания цен на бензин увеличиваются затраты на его перевозку.

* * *

Отец проверяет тетрадку у сына-третьеклассника:
- Почему ты так неровно пишешь крючочки?
- Это не крючочки, папа. Это мы уже интегралы проходим.


Пожалуйста, присылайте свои анекдоты по этой ссылке: info@delphi.int.ru и они обязательно будут опубликованы! Желательно на компьютерную тему.

Товарищи программисты! Проявляйте свою активность. Давайте помогать друг другу!
Если вы не нашли ответа на свой вопрос, не отчаивайтесь! Количество подписчиков постоянно растёт и, наверняка, найдётся тот человек,
который поможет вам! На сегодня всё. До встречи через неделю!
Ведущий рассылки, Ерёмин Андрей.

Вы можете оказать помощь нашей рассылке через систему WebMoney:
R760630419845
Z947123691104
Будем очень благодарны!

 

Subscribe.Ru
Поддержка подписчиков
Другие рассылки этой тематики
Другие рассылки этого автора
Подписан адрес:
Код этой рассылки: comp.soft.prog.delphifaq
Отписаться
Вспомнить пароль

В избранное