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

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

  Все выпуски  

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


Программирование на DELPHI
Выпуск #65 (16 марта 2007 г.)

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

Delphi.int.ru

Новости сайта
Регистрация »
Файловый архив
Статьи
Компоненты
Plug-in's
Документация
Исходники
Изображения
Игры
Программы
Рассылки сайта
Дружеств. сайты
Каталог ссылок

Delphi.int.ru Expert

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

На нашем сайте обновлён раздел "Исходники". До недавнего времени он был организован очень неудобно. Теперь всё стало на свои места. Файлы разделены на страницы, изменён формат информации о самих файлах. В ближайшее время планируется: возобновление функции добавления комментариев к файлам, реорганизация раздела "Документация", добавление раздела "Юмор" на сайт.

Что касается рассылки... Удалён раздел "Ссылки" по причине ненадобности и отсутствия в нём какой-либо полезной информации.

Ну вот, в целом, и вся информация, которая могла быть полезна.

Статистика системы Delphi.int.ru Expert на 16.03.2007, 21:00:

Зарегистрированных экспертов: 77 (0), из них в активном режиме 56 (-2).
Участниками задано вопросов: 412 (+22).
Всего отправлено ответов: 741 (+34).

Приятного чтения и до скорой встречи!

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

» Авторское слово
» Обучение Delphi
» Delphi.int.ru Expert
» Статья по Delphi
» Файловый архив
» Юмор

Количество читателей рассылки (16.03.2007, 21:00):
5441+1004+283= 6728.

Связь по e-mail:

admin@delphi.int.ru
expert@delphi.int.ru
info@delphi.int.ru

Если Вы хотите где-нибудь разместить материалы, представленные на www.delphi.int.ru или в данной рассылке, свяжитесь, пожалуйста, с автором или администратором.
Обучение Delphi

» Найти все предыдущие уроки можно на www.delphi.int.ru в разделе "Статьи".
Последние 3 урока:

1. Введение в Delphi
2. Первое знакомство
3. Работа с компонентами в дизайнере форм

Свойства в Delphi

Автор:
Ерёмин Андрей
Номер статьи:
4

 

 

Горячая колба выглядит точно так же, как и холодная.

Что такое свойства? Что является свойствами в реальной жизни? Например, в физике это температура плавления, температура кипения, вязкость, плотность, растворимость и т.д. Аналогично и объектно-ориентированном программировании. Каждый объект имеет какие-либо свойства. Свойства отвечают либо за внешний вид объекта, либо за его поведение в программе во время её выполнения.

Где найти свойства

Каждый компонент, помещённый на форму, имеет своё отражение в Инспекторе объектов (Object Inspector). Попробуйте, к примеру, поместить на форму кнопку TButton и текстовое поле TEdit и выделить по очереди сначала один объект, а затем другой, наблюдая при этом за Инспектором объектов. Вы заметите, что содержимое его окна изменяется. Это связано с тем, что каждый объект имеет свои свойства. Свойство может быть у одного объекта, но его может не быть у другого. Например, у поля ввода (TEdit) есть свойство ReadOnly, отвечающее за возможность изменения текста в этом поле. Совершенно логично, что у кнопки (TButton) этого свойства нет и быть не может.

Как создаются программы

Чтобы научиться создавать программы, для начала нужно понять основные принципы их создания. Коротко на этом остановимся. Итак, Вы уже научились помещать компоненты на форму, управлять ими и просматривать свойства. Размещение компонентов на форме - один из первых этапов разработки программы. Однако, просто поместив компоненты никаких действий происходить не будет - по кнопке можно будет щёлкнуть, но при этом ничего не произойдёт. В поле ввода можно ввести текст, но этот текст никуда не отправится и никак не обработается. Поэтому совершенно логичным этапом является настройка взаимодействий между компонентами. Некоторые простые взаимодействия уже "встроены" в стандартные компоненты и легко изменяются через Инспектор объектов. Всё остальное нужно создавать и программировать вручную. Практически основным методом создания взаимодействий компонентов является написание реакций на события. Но об этом чуть позже.

Типы свойств

Прежде чем перейти к рассмотрению типов свойств, нужно понять, что же из себя вообще представляет свойство? Всё очень просто. Свойство - это поле какой-либо структуры, содержащее определённое значение. Отталкиваясь от того, каким образом задаются эти значения и какую "природу", т.е. структуру имеет свойство, выделено несколько типов свойств.

1. Простые свойства. Простыми являются те свойства, значения которых являются числами, либо строками (текстом). Примерами таких свойств могут служить Left и Top формы. Эти свойства определяют положение формы на экране (в частности, её левого верхнего угла). Значения этих свойств - числа. Пример свойства со значением-строкой - Caption формы. Это свойство хранит заголовок формы и задаётся в виде обычного текста.

2. Перечислимые свойства. Такими являются свойства, задать значения которым в явном виде нельзя, а можно только выбрать из списка. Список возможных значений определяется заранее. Пример такого свойства - свойство AutoSize формы. Оно отвечает за то, будет ли форма автоматически изменять свой размер, чтобы отобразить все размещённые на ней компоненты. Значение - либо истина (True), либо ложь (False). Другой пример - свойство BorderStyle. Это свойство отвечает за внешний вид формы, а также за поведение её границ, т.е. можно ли изменять размеры формы во время работы программы. Это свойство принимает одно из 6 значений.

3. Вложенные свойства. Это те свойства, которые имеют внутри несколько других свойств. В Инспекторе объектов слева от названий таких свойств отображается маленькая кнопка со знаком "+", нажатие на которую раскрывает данное свойство (знак при этом меняется на "-"). Повторный щелчок "сворачивает" свойство обратно. Вложенные свойства бывают двух основных типов - это множества и комбинированные значения. Множества - это набор каких-либо значений, каждое из которых либо "включено", либо "выключено". Комбинированные значения - это набор из нескольких свойств, которые могут иметь разный тип данных. Примером множества является свойство BorderIcons у формы - оно отвечает за кнопки, которые будут показаны в строке заголовка окна. Понятно, что любая из кнопок может либо отображаться на экране, либо нет - такой набор очень удобно задавать с помощью множества. Примером комбинированного значения является свойст во Font (оно есть у большинства визуальных компонентов) - задаёт шрифт для элемента. В его включено несколько других свойств - название шрифта, цвет, стиль, размер и т.п.

Простые свойства
Свойство перечислимого типа - BorderStyle
Пример вложенного свойства - Font
Простые свойства
Перечислимое свойство
Свойство вложенного типа

Управление свойствами

Изменение размеров формы (Width, Height)
Управлять свойствами, т.е. изменять их значения можно двумя способами - в режиме проектирования программы (Design-time) и во время выполнения (Run-time). В данный момент нас интересует режим проектирования. Изменять свойства можно всё в том же Инспекторе объектов. Если это простое свойство, то достаточно щёлкнуть по строке с названием этого свойства и ввести новое значение. Если это перечислимое свойство, то значение можно выбрать из списка. Некоторые свойства (например, Left, Top, Width и Height) можно изменять простыми операциями перетаскивания и изменением размеров с помощью мыши.
Примечание: Left, Top - положение формы на экране, Width - ширина, Height - высота формы.

Следует отметить, что в режиме проектирования через Инспектор объектов могут быть доступны не все свойства выбранного компонента. Эти свойства доступны в режиме выполнения и изменяются они программным путём.

Немного о компонентах

TApplicationEvents - невизуальный компонент Чтобы у Вас не возникало путаниц и непонятных моментов, считаю необходимым сделать следующее уточнение. Все компоненты подразделяются на визуальные и невизуальные. Во время проектирования (Design-time) видны все компоненты без исключения. А вот во время выполнения (Run-time) - не все. Те, которые представляют собой какой-то видимый объект (поле, кнопка, таблица и т.д.) и являются визуальными. Невизуальные компоненты на экране не видны, но при этом используются в самой программе. В качестве примера невизуального компонента можно привести TApplicationEvents со вкладки Additional. Во время проектирования этот компонент присутствует на форме и он доступен через Инспектор объектов, но во время работы программы его не видно. За видимость объекта на экране в большинстве случаев отвечает свойство Visible (True - видимый, False - невидимый).
Компонент TApplicationEvents на форме в Design-time Компонент TApplicationEvents на форме в Run-time (невидим)
Оцените данный урок по пятибалльной шкале:
1 2 3 4 5
Комментарии и замечания приветствуются.

 

Delphi.int.ru Expert
(текущая версия системы: 1.67
последнее обновление: 15.03.2007)

Если Вы не являетесь зарегистрированным пользователем сайта, зарегистрируйтесь прямо сейчас! Регистрация »

Delphi.int.ru Expert - это автоматизированная система экспертной помощи, призванная помочь в решении проблем, возникающих как у начинающих, так и опытных программистов, а также способствующая обмену информации между участниками лично и публикации этой информации в массовых рассылках в дальнейшем. Система полностью автоматизирована и постоянно развивается и обновляется. Если у Вас есть какие-то либо вопросы или Вы столкнулись с какой-либо проблемой при программировании на Delphi/WinAPI - задайте свой вопрос и эксперты Вам помогут. Кроме того, Вы сами можете войти в состав экспертов и помогать другим.

Задать вопрос экспертам » | Справочное руководство » | Перейти в состав экспертов » | Эксперты системы »

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

* Администраторы сайта не корректируют сообщения и за наличие грамматических ошибок ответственности не несут.

Delphi.int.ru Expert  – вопросы и ответы (#171 - #180)
Вопрос № 171

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

Как в Delphi 2005 изменить папку проектов (по умолчанию - Borland Studio Projects)?

Автор вопроса: Иван (статус: Посетитель)
Дата и время отправки вопроса: 23.11.2006, 22:52
Получено ответов на вопрос: 2
Сообщений в форуме вопроса: 0
Страница данного вопроса >>


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

1. [Отвечает: Иусов Сергей Ник. (статус: 2-ой класс), 24.11.2006, 05:35]:

Здравствуйте, Иван!

100% за 2005 Delphi не скажу, но в 7 делаю так: изменяю параметр "Рабочая папка" в ярлыке запуска на ту что мне нужно и получаю как раз, то что тебе требуется.

2. [Отвечает: Вадим К (статус: Средний уровень), 24.11.2006, 11:33]:

В 2005 и 2006 лезим в Tools --> Options
Ищем в дереве слева Environment Variable
Теперь в окошке System Variable ищем переменную BDSPROJECTSDIR и жмём кнопку Add override;
И в появившемся окошке вписываем новый каталог

Если в вас в оригинальном каталоге в папке bpl были какие-либо файлы, то рекомендую перенести её на новое место. Иначе недосчитаетесь компонентов+Делфа будет ругаться при старте

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



Вопрос № 172

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

Как перенести все данные из dbgrid в локальную б\д? Заранее спасибо.

Автор вопроса: Губкин Александр Александрович (статус: Посетитель)
Дата и время отправки вопроса: 24.11.2006, 06:09
Получено ответов на вопрос: 2
Сообщений в форуме вопроса: 2
Страница данного вопроса >>


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

1. [Отвечает: Иусов Сергей Ник. (статус: 2-ой класс), 24.11.2006, 06:20]:

Здравствуйте, Губкин Александр Александрович!

DBGrig у тебя полюбому связан с набором данных. Создавай на локалке таблицу той же структуры что и таблица (запрос в частном случае) отображаемая в DBGrid'е и копируй данные в нее.

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

2. [Отвечает: Alex Van Glukhman (статус: 7-ой класс), 24.11.2006, 16:29]:

Здравствуйте, Губкин Александр Александрович!
DBGrid: TDBGrid связывается с источником данных через DataSource: TDataSource. У DataSource есть свойство DataSet: TDataSet. В зависимости от того что сидит в DataSet таблица или запрос находим имя таблицы или SQL текст. Далее либо через SQL за ;прос INSERT-SELECT копируем данные из исходной таблицы в конечное либо методом BatchMove делаем перенос данных.
P.S. Работаем только с экземплярами TDataSet так как TDBGrid компонент для визуального отображения табличных данных баз.

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



Вопрос № 173

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

Где можно узнать побольше о свойствах компонентов входящих в состав Delphi?

Автор вопроса: Губкин Александр Александрович (статус: Посетитель)
Дата и время отправки вопроса: 24.11.2006, 07:04
Получено ответов на вопрос: 4
Сообщений в форуме вопроса: 0
Страница данного вопроса >>


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

1. [Отвечает: min@y™ (статус: 6-ой класс), 24.11.2006, 08:17]:

Больше всего информации о компонентах, входящих в состав Delphi, находится в справке Delphi (клавиша F1). Естественно, english only.

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

Вот щас я набрал в гугле "русская справка компоненты Delphi" - вывалилась куча ссылок. Сделай также.

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

2. [Отвечает: Вадим К (статус: Средний уровень), 24.11.2006, 11:37]:

Есть ещё один классный способ. Ставить компонент на форму и смотреть его свойства. Со временем вы заметите, что многие компоненты имеют много одинаковых свойств - это не удивительно - у них есть общие наследники. Позже, что бы понять что это за компонент, вам нужно будет посмотреть 5-10 свойств. Но этак всё равно не возможно познать. Поэтому открывайте стандартные демки и смотрите на них. Очень много они могут рассказать

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

3. [Отвечает: Новаковский Юрий Аврамович (статус: 3-ий класс), 24.11.2006, 15:32]:

Здравствуйте, Губкин Александр Александрович!

Вот Держите-раз:
http://expert.delphi.int.ru/download_26

А вот-два две части:
http://expert.delphi.int.ru/download_27
http://expert.delphi.int.ru/download_28

Если надо еще пишите мне.
Успехов!

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

4. [Отвечает: Alex Van Glukhman (статус: 7-ой класс), 24.11.2006, 16:35]:

Здравствуйте, Губкин Александр Александрович!
Самый оптимальный вариант HELP Delphi, а весь исходный код со свойствами методами и событиями описан в исходниках в каталоге установленной версии Delphi например \Source\Win32\VCL для Studio 2006

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



Вопрос № 174

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

Как записать список выделенных файлов из TFileListBox в TMemo?

Автор вопроса: Иван (статус: Посетитель)
Дата и время отправки вопроса: 24.11.2006, 22:19
Получено ответов на вопрос: 2
Сообщений в форуме вопроса: 7
Страница данного вопроса >>


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

1. [Отвечает: Denisss (статус: 2-ой класс), 24.11.2006, 22:43]:

Здравствуйте, Иван!

Привожу Вам пример в приложении.
Чтобы он заработал, нужно добавить на форму TListBox, прописать ему в Items несколько строчек, поставить свойство MultiSelect=True; добавить Memo; добавить кнопку, в событие OnClick кнопки скопировать мой пример.

Кажется все.

Удачи!

Приложение:

2. [Отвечает: Alex Van Glukhman (статус: 7-ой класс), 25.11.2006, 23:32]:

Здравствуйте, Иван!

Привожу следующий код. Только непонятно использование компонента Win 3.1. Ну да ладно!!!

Приложение:



Вопрос № 175

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

Уважаемые эксперты!

У меня возникло 2 вопроса по интерфейсу моей проги:
1. Как сделать так чтобы в TLIstview можно было таскать Items?
2. Как поместить одно изображение (ну скажем 48 на 48 px) в TImageList так чтобы оно не разбивалось там на части и т.п.?

Автор вопроса: Александр (статус: Посетитель)
Дата и время отправки вопроса: 25.11.2006, 10:31
Получено ответов на вопрос: 2
Сообщений в форуме вопроса: 6
Страница данного вопроса >>


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

1. [Отвечает: Denisss (статус: 2-ой класс), 25.11.2006, 21:00]:

Здравствуйте, Александр!

1. См. пример в приложении
2. Установите свойства Height и Width = 48 (т.е. установите высоту и ширину Вашего изображения, тогда оно нарезаться не будет)

Удачи!

Приложение:

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

2. [Отвечает: Матвеев Игорь Владимирович (статус: Средний уровень), 26.11.2006, 09:45]:

Здравствуйте, Александр!
Добавлю только, что TImageList не предназначен для хранения изображений разного размера. Если у заполненного ImageList'а поменять свойства Height/Width, все ранее добавленные изображения потеряются.

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



Вопрос № 176

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

Привет!
У меня такой вопрос:
На форме ComboBox там я выбираю надпись которая меня интересует и сразу загружается
???.txt файл в Memo.Мне надо сделать:
нажал на кнопку "Удалить" удалилась выбранная мною надпись в ComboBox и строка в ini файле только чтобы не остовался пробел там хранится всё содержимое ComboBox.Но вместо ini я использую txt файл
так как в txt файл можно больше внести записей чем в ini или я не прав?
Зараннее благодарен

Автор вопроса: Vit2 (статус: Посетитель)
Дата и время отправки вопроса: 25.11.2006, 23:41
Получено ответов на вопрос: 2
Сообщений в форуме вопроса: 10
Страница данного вопроса >>


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

1. [Отвечает: Alex Van Glukhman (статус: 7-ой класс), 26.11.2006, 11:48]:

Здравствуйте, Vit2!
У класса TComboBox есть метод DeleteSelected который удаляет выбранный Item

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

2. [Отвечает: Вадим К (статус: Средний уровень), 27.11.2006, 11:15]:

ini файл по умолчанию предназначен для хранения 64кб инфы(кажеться это ограничение для 98). Больше я не пытался, но скажу, что даже при 30кб работа с ним стаёт невыносимой - тормозит жутко даже под ХР. Но есть выход. Ребята с борланда написали свой аналог - TMemIniFile. От обычного TIniFile только тем, что запись на диск происходит только по явной просьбе - метод Update. У него нет ограничения на размер и работает быстренько.

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



Вопрос № 177

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

Как прочитать все данные из таблици dbgrid,
в переменные
дайте подробное объяснение, а то у меня получается читать только текущую строку
Заранее всем благодарен

Автор вопроса: Губкин Александр Александрович (статус: Посетитель)
Дата и время отправки вопроса: 27.11.2006, 08:05
Получено ответов на вопрос: 3
Сообщений в форуме вопроса: 6
Страница данного вопроса >>


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

1. [Отвечает: Иусов Сергей Ник. (статус: 2-ой класс), 27.11.2006, 08:38]:

Здравствуйте, Губкин Александр Александрович!
Для того чтобы переместится к следующей записи в наборе данных исользуй метод next.
Пример сохранения данных в переменные (если честно я в не вижу в нем логики, но вопрошающему виднее)
procedure data2vars
begin
DBGrid.DataSource.DataSet.First; <- Встанем на начало набора данных
while not(DBGrid.DataSource.DataSet.Eof) do <- Будем просматривать набор данных до конца
begin
//тут ты присваеваешь своим переменным данные полек
DBGrid.DataSource.DataSet.Next; // <- переход к следующей записи
end;
end;

2. [Отвечает: Alex Van Glukhman (статус: 7-ой класс), 27.11.2006, 13:18]:

Здравствуйте, Губкин Александр Александрович!
Как я говорил ранее TDBGrid всего лишь отображает данные хранимые в табличной форме. Сами же данные хранятся в TDataSet. В настоящий момент времени вы работаете с активной записью TDataSet.
Для навигации по записям существуют методы First, Next, Prior, Last, MoveBy(n) - где n количество строк в таблице на которые сдвигается курсор, положительное значение вниз, отрицательное вверх.
Теперь привожу пример.
В новом проекте кидаешь на форму TDBGrid - именуем его Grd, TTable - имя Tbl, TDataSource - DS и кнопку TButton - Btn.
DEMO база у Borland при установленной BDE имеет alias DBDEMOS
В Object Inspector устанавливаем property для TTable Name-Tbl; DatabaseName-DBDEMOS; TableName-country.db. Проверим подключение установив свойство Active:=true; Если ничего не выскочило особенного то всё нормально установим обратно значение в false;
Далее для TDataSource Name-DS; DataSet-Tbl
Теперь TDBGrid Name-Grd; DataSource-DS
Теперь кинем на форму TMemo Name-Mm куда будем переносить данные из таблицы.
Осталось при вызове приложения подключиться к таблице, т.е. на OnCreate формы вставляем Tbl.Active:=true;
Далее смотри пример

Приложение:

3. [Отвечает: Denisss (статус: 2-ой класс), 27.11.2006, 22:48]:

Здравствуйте, Губкин Александр Александрович!

Конечно, Вам уже дали ответ, но я не считаю его до конца корректным. Потому привожу Вам мою модификацию предыдущего ответа, в которой исправлены некоторые ошибки и ускорена работа. Комментарии к примеру остаются прежними (см. выше).
С большими БД всегда хочется хоть немного ускорить работу программы.

Удачи!

Приложение:



Вопрос № 178

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

Какой метод компонента Timer1 позволяет вывести время суток в часах, минутах и секундах?

Автор вопроса: Суслова Елена Владимировна (статус: Посетитель)
Дата и время отправки вопроса: 28.11.2006, 21:05
Получено ответов на вопрос: 4
Сообщений в форуме вопроса: 0
Страница данного вопроса >>


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

1. [Отвечает: Виталий Лещенко (статус: 3-ий класс), 28.11.2006, 21:39]:

Здравствуйте, Суслова Елена Владимировна!
Компонент TTimer предназначен немного для других целей. Он никуда не выводит текущее время, он может лишь выполнять некоторое событие периодически с заданным интервалом.
Для получения текущего времени смотрите в сторону фнкции time

Приложение:

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

2. [Отвечает: Geron (статус: 1-ый класс), 28.11.2006, 21:44]:

Здравствуйте, Суслова Елена Владимировна!
Нужно по событию прохождения времени таймера.
(создаем caption для вывода времени)
время caption1.caption:=timetostr(now);
даты caption2.caption:=datatostr(now);

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

3. [Отвечает: Alex Van Glukhman (статус: 7-ой класс), 28.11.2006, 22:05]:

Здравствуйте, Суслова Елена Владимировна!

Компонент TTimer предназначен для упрощённого вызова функций WinAPI SetTimer и KillTimer для упрощения работы с Message WM_TIMER
У этого компонента есть property Enabled которое напрямую связано со свойством Interval.
Enabled:=true активирует TTimer и он вызывает событие OnTimer через промежутки времени заданные свойством Interval.
Если Ваша задача выставить время в часах минутах и секундах для срабатывания таймера, то задача решается. В момент установки свойства Enabled:=true компонента TTimer получить текущее врk 7;мя вызвав функцию Time()если интервал задаётся в пределах суток или Now() если интервал выходит за пределы суток. От времени срабатывания таймера в формате TDateTime или TTime необходимо выче&# 1089;ть текущее время и результат пересчитать в миллисекундах которые далее присваиваются свойству Interval. Только в этом случае существует небольшая погрешность на время вычис& #1083;ения данного алгогритма процесором.

Удачи!

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

4. [Отвечает: Alexander A. Gribanov (статус: 2-ой класс), 29.11.2006, 15:07]:

Никакой. Для получение времени и/или даты в произвольном виде идеально подходит функция FormatDateTime. В вашем случае будет что-то типа:
s:=FormatDateTime('hh:mm:ss',now); // s: string;

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



Вопрос № 179

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

Подскажите, плз, почему при обновлении IWGrid (по какой-либо кнопке -- что конечно непринципиально) в папке Cache модуля IWProject накапливаются HTML*.tmp. Казалось бы, что при корректно написанной программе *.tmp должны удалиться. В чём я некорректен?

Автор вопроса: Gutstadt V V (статус: Посетитель)
Дата и время отправки вопроса: 29.11.2006, 15:38
Получено ответов на вопрос: 1
Сообщений в форуме вопроса: 0
Страница данного вопроса >>


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

1. [Отвечает: Alex Van Glukhman (статус: 7-ой класс), 29.11.2006, 17:25]:

Здравствуйте, Gutstadt V V!
Любой IW компонент отображает данные через кеш, поэтому при любом обновлении эти данные остаются в *.tmp файле. Освобождение этих данных задача со стороны приложения клиента и&# 1083;и сервера. Эта специфицифика диктуется не Borland а MS Framework (ещё один косяк со стороны Билла). По-моему в IIS это освобождение происходит по написанному скрипту на сервере, хотя не помню то&# 1095;но.
Удачи!

Оценка за ответ: 4.
Комментарий: Спасибо, попробую разобраться дальше сам.



Вопрос № 180

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

Здравствуйте, эксперты.
Есть база данных аксеса. В ней есть поля с подстановкой данных из друго таблицы.
|key | genre |
|1 | фантастика |
|2 | ужас |
|3 | аниме |
|4 | документальный |
Я делаю сортировку главной таблицы по полю жанр, а сортировка происходит по полю key из вышеприведенной таблицы. Вопрос в том как сделать сортировку, главной таблицы по полю жанр, но чтобы данные брались не из поля key, а из поля genre дополнительной таблице.
Надеюсь вы меня поняли.

Автор вопроса: Федоров Роман Сергеевич (статус: 2-ой класс)
Дата и время отправки вопроса: 29.11.2006, 23:56
Получено ответов на вопрос: 1
Сообщений в форуме вопроса: 16
Страница данного вопроса >>


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

1. [Отвечает: Alex Van Glukhman (статус: 7-ой класс), 30.11.2006, 00:54]:

Здравствуйте, Федоров Роман Сергеевич!
Во-первых что такое дополнительная таблица? Судя по тому что здесь нарисовал, то описан справочник жанров, видимо 2 таблица содержит какие-то данные которые содержат в себе значение genre либо ссылку на него. Достаточно плохо описана задача, хотелось бы видеть и вторую таблицу и вариант конечной структуры.
Смею предположить, что 2 таблицы связаны каким то общим полем, если это так, то в Access построй вторичный индекс по этим связанным полям, а при обращении к таблице используй property AdoTable.Sort:='genre ASC, key ASC';
Другой вариант более гибкий вместо таблицы использовать в ADOQuery SQL запрос например такого типа:
Select A.Key, B.Genre From Sprav A, Dannije B
Where A.Genre = B.Genre
Order by B.Genre
Где Sprav - 1 таблица, Dannije - 2 таблица.
Удачи
Было бы неплохо увидеть исходник и структуру таблиц.

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




Статьи  >>

Управление мышью

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

type
    TMouseEvent = procedure (Sender: TObject;
    Button: TMouseButton;
    Shift: TShiftState; X, Y: Integer) of object;
    property OnMouseDown: TMouseEvent;

В параметре Button передается признак нажатой кнопки:

type TMouseButton = (mbLeft, mbRight, mbMiddle);

Параметр Shift определяет нажатие дополнительной клавиши на клавиатуре:

type TShiftState = set of (ssShift, ssAlt, ssCtrl, ssLeft, ssRight, ssMiddle, ssDouble);

Параметры X и Y возвращают координаты курсора.

На отпускание кнопки мыши реагирует метод:

type
    TMouseEvent = procedure (Sender: TObject;
    Button: TMouseButton;
    Shift: TShiftState; X, Y: Integer) of object;
    property OnMouseUp: TMouseEvent;

Его параметры описаны выше.

При перемещении мыши можно вызывать метод-обработчик:

type
    TMouseMoveEvent = procedure (Sender: TObject;
    Shift: TShiftState; X, Y: Integer) of object;
    property OnMouseMove: TMouseMoveEvent;

Если у разработчика нет необходимости так подробно отслеживать состояние мыши, можно воспользоваться двумя другими методами:

property OnClick: TNotifyEvent;
property OnDblClick: TNotifyEvent;

Первый реагирует на щелчок кнопкой, второй - на двойной щелчок.

Каждый элемент управления может изменять внешний вид указателя мыши, перемещающейся над ним. Для этого используется свойство:

property Cursor: TCursor;

Для управления дополнительными возможностями мыши для работы в Internet (ScrollMouse) предназначены три метода обработчика, реагирующие на прокрутку:

property OnMouseWheel: TMouseWheelEvent;
property OnMouseWheelUp: TMouseWheelUpDownEvent;
property OnMouseWheelDown: TMouseWheelUpDownEvent;

OnMouseWheel вызывается при прокрутке вообще, OnMouseWheelUp - при прокрутке вперёд, OnMouseWheelDown - при прокрутке назад.

В VCL имеется класс TMouse, содержащий свойства мыши, установленной на компьютере. Обращаться к экземпляру класса, который создается автоматически, можно при помощи глобальной переменной Mouse. Свойства класса представлены в таблице:

Объявление
Опсание
property Capture: HWND; Дескриптор элемента управления, над которым находится мышь
property CursorPos: TPoint; Содержит координаты указателя мыши
property Draglmmediate: Boolean; При значении True реакция на нажатие выполняется немедленно
property DragThreshold: Integer; Задержка реакции на нажатие
property MousePresent: Boolean; Определяет наличие мыши
type UINT = LongWord; property RegWheelMessage: UINT; Задает сообщение, посылаемое при прокрутке в ScrollMouse
property WheelPresent: Boolean; Определяет наличие ScrollMouse
property WheelScrollLines: Integer; Задает число прокручиваемых линий

В качестве примера обработки управляющих воздействий от мыши рассмотрим пример DemoMouse. Он очень прост. Перемещение мыши с нажатой левой кнопкой обеспечивает выделение прямоугольного фрагмента. Такую функцию вы можете наблюдать в любом графическом редакторе, а исходный код проекта использовать в собственных разработках.

unit uDemo;

interface

uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
ExtCtrls, ComCtrls;

type
TMainForm = class(TForm) ColorDlg: TColorDialog;
StatusBar: TStatusBar; Timer: TTimer;
procedure FormMouseDown(Sender: TObject;
Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
procedure FormMouseUp(Sender: TObject;
Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
procedure FormMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);
procedure TimerTimer(Sender: TObject);
private
MouseRect: TRect;
IsDown: Boolean;
RectColor: TColor;
public
{ public declarations }
end;

var
MainForm: TMainForm;

implementation

{$R *.DFM}

procedure TMainForm.FormMouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
if Button = mbLeft then with MouseRect do
begin
IsDown := True; Left := X; Top := Y; Right := X; Bottom := Y;
Canvas.Pen.Color := RectColor;
end;
if (Button = mbRight) and ColorDlg.Execute then RectColor := ColorDlg.Color;
end;

procedure TMainForm.FormMouseUp(Sender: TObject;
Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
IsDown := False;
Canvas.Pen.Color := Color;
with MouseRect do
Canvas.Polyline([Point(Left, Top), Point(Right, Top), Point(Right,
Bottom), Point(Left, Bottom), Point(Left, Top)]);
with StatusBar do
begin
Panels[4].Text := ''; Panels [5] .Text := '';
end;
end;

procedure TMainForm.FonnMouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
begin
with StatusBar do
begin
Panels[2].Text := 'X: ' + IntToStr(X);
Panels[3].Text := 'Y: ' + IntToStr(Y);
end;
if not IsDown then Exit; Canvas.Pen.Color := Color; with mouserect do
begin
Canvas.Polyline([Point(Left, Top), Point(Right, Top),
Point(Right, Bottom), Point(Left, Bottom), Point(Left, Top)]);
Right := X;
Bottom := Y;
Canvas.Pen.Color := RectColor;
Canvas.Polyline([Point(Left, Top), Point(Right, Top),
Point(Right, Bottom), Point(Left, Bottom), Point(Left, Top)]);
end;
with StatusBar do begin
Panels [4] .Text := Ширина: ' + IntToStr(Abs(MouseRect.Right - MouseRect.Left));
Panels[5].Text := Высота: ' + IntToStr(Abs(MouseRect.Bottom - MouseRect.Top));
end; end;

procedure TMainForm.TimerTimer(Sender: TObject);
begin
with StatusBar do
begin
Panels[0].Text := Дата: ' + DateToStr(Now); Panels[1].Text := Время: ' + TimeToStr(Now);
end;
end;

end.

При нажатии левой кнопки мыши в методе-обработчике FormMouseDown включается режим рисования прямоугольника (isDown := True) и задаются его начальные координаты.

При перемещении мыши по форме проекта вызывается метод-обработчик FormMouseMove, в котором координаты курсора и размеры прямоугольника передаются на панель состояния. Если левая кнопка мыши нажата (isDown = True), то осуществляется перерисовка прямоугольника.

При отпускании кнопки мыши в методе FormMouseUp рисование прямоугольника прекращается (isDown := False).

Если была нажата правая кнопка мыши, то метод-обработчик FormMouseDown обеспечивает отображение диалога выбора цвета, который позволяет сменить цвет линий прямоугольника.

Метод-обработчик TimerTimer обеспечивает отображение на панели состояния текущей даты и времени.

Программа-пример к статье »

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


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

Разделы: Статьи | Компоненты | Plug-in's | Документация | Исходники | Программы | Игры | Изображения

Уважаемые читатели! Отправляйте полезные компоненты/модули, интересные исходники, собственные программы/игры и мы разместим их на сайте. Отправить можно здесь »

Последние поступления
Название
Описание
Раздел
Объём
Ссылки
QuSoft AS QuickReport 2.0
Книга посвящена работе с QuickReport. В книге подробно описывается процесс создания отчётов, а также есть хороший справочник по QuickReport.
127 Кб
Д. Тейлор - Delphi, библиотека программиста

Отличная книга, в которой собрано множество различных тем. Книга будет полезна всем, кто программирует на Delphi.

1.07 Мб
Доступ к COM серверам Microsoft Office из Delphi

В статье рассматривается вопрос доступа к общеизвестным приложениям Microsoft Office, таким как Word, Excel, Outlook и другим через набор компонент, представленных в Delphi 5 и последующих версиях.

135 Кб
DemoMouse

Программа-пример к статье "Управление мышью". Демонстрирует реакции на события мыши, а также ручную отрисовку прямоугольника для выделения.

2 Кб
 
Всего новых файлов: 4  
1.3 Мб
 

Если у Вас есть книги по Delphi (в электронном виде, разумеется) или другая полезная документация - сообщите и её можно будет разместить на сайте.

Отправить файл »   

Юмор

Ведущий раздела: Bruder

25 особенностей компьютеров в голливудских фильмах

1. Нет курсора у текстовых редакторов.

2. Герои всегда чрезвычайно быстро набирают текст, причем никогда не пользуются при этом клавишей пробела.

3. Персонажи фильмов никогда не печатают с ошибками.

4. На любом мониторе буквы имеют размер в несколько сантиметров.

5. Суперкомпьютеры, которые использует НАСА или ЦРУ, или другие правительственные учреждения, всегда имеют очень простой графический интерфейс. Если же графического интерфейса нет, то используется чрезвычайно мощная текстовая командная оболочка, понимающая литературный английский (такая оболочка предоставляет доступ к любой нужной информации, стоит только набрать что-нибудь вроде Получить доступ к секретным файлам" на первой попавшейся клавиатуре).

6. Для того чтобы заразить компьютер разрушительным вирусом, достаточно просто набрать "Загрузить вирус" (фильм "Крепость").

7. Все компьютеры соединены в глобальную сеть. Вы можете считать информацию с компьютера главного негодяя даже в том случае, если он выключен.

8. Мощные компьютеры пищат при каждом нажатии на клавиши или перерисовке экрана. Некоторые компьютеры замедляют вывод на экран так, чтобы вы могли читать текст по мере вывода, а наиболее продвинутые компьютеры при этом еще и эмулирует звук матричного принтера.

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

10. После набора текста компьютер можно спокойно выключить, не сохранив данные.

11. Хакер способен взломать самую крутую защиту, угадав пароль со второго раза.

12. Вы можете обойти сообщение "Отказ в доступе" с помощью команды "Игнорировать".

13. Любой компьютер загружается не более чем за 2 секунды.

14. Сложные вычисления и загрузка больших объемов данных завершаются не более чем за три секунды.

15. Модемы в фильмах обычно передают данные со скоростью не менее двух гигабайт в секунду.

16. Когда перегревается главный компьютер атомной станции или ракетной базы, все панели управления взрываются - непосредственно перед взрывом всего здания.

17. Если вы просматриваете файл, а его кто-то удаляет, то файл исчезает с экрана.

18. Если на дискете есть зашифрованные файлы, то стоит вам вставить ее в дисковод, и у вас сразу запросят пароль.

19. Компьютеры могут обмениваться информацией друг с другом независимо от того, кто их изготовил и в какой галактике (фильм "День независимости"). Все системы имеют один и тот же стандартный интерфейс. Так с помощью записной книжки вы можете подобрать PIN-КОД кредитной карточки (фильм "Терминатор-2").

20. Любые дискеты читаются на любом компьютере, оснащенном дисководом, любые программы работают на любой платформе.

21. Чем совершеннее компьютер, тем больше у него кнопок. При этом работа на таком компьютере требовала весьма профессионального оператора, так как на кнопках нет никаких надписей, за исключением кнопки "Самоуничтожение"

22. Большинство компьютеров, даже самые маленькие, способны работать в режиме воспроизведения реалистичной трехмерной интерактивной анимации в гигантских разрешениях с фотореалистичной глубиной цвета.

23. Лаптопы всегда могут работать в режиме полноэкранного видеофона в режиме реального времени и имеют производительность, сопоставимую с Crayем.

24. Когда персонаж смотрит на монитор, изображение настолько яркое, что проецируется на его лицо.

25. Поиск в Интернете всегда дает вам именно то, что вы искали, независимо от того, насколько общие ключевые слова вы задали (так, например, в фильме "Миссия невыполнима" Том Круз задал поиск по ключевым словам "файл" и "компьютер", после чего получил 3 ссылки).

:))

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

В избранное