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

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

  Все выпуски  

Выпуск №68.


Программирование на DELPHI
Выпуск #68 (27 апреля 2007 г.)

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

Delphi.int.ru

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

Delphi.int.ru Expert

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

На сайте произошли небольшие изменения в процессе регистрации. Теперь простого заполнения формы недостаточно - регистрацию нужно подтвердить из письма, отправляемого после заполнения формы. Только после подтверждения участник получает данные для авторизации и его учётная запись активируется. Тем, кто уже зарегистрирован, никаких телодвижений совершать не нужно. Регистрация »

IRC-канал сайта:

Сервер - irc.dalnet.ru (либо irc.tic-tac.ru)
Порт - 6667
Канал - #delphiintru

Ждём Вас на нашем канале!

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

Зарегистрированных экспертов: 84 (+1), из них в активном режиме 57 (-2).
Участниками задано вопросов: 537 (+58).
Всего отправлено ответов: 907 (+78).
Всего сообщений на форумах вопросов: 763 (+35).
Максимальное число разосланных в день писем: 608 (24.04.2007, +55).

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

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

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

Количество читателей рассылки (27.04.2007, 16:00):
5452+1135+335= 6922 (+57).

Связь по e-mail:

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

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

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

4. Свойства в Delphi
5. Управление проектом
6. Обзор свойств формы

Обзор палитры компонент: Standard, Additional

Автор:
Ерёмин Андрей
1. Никогда не рисуйте то, что можно скопировать.
Номер статьи:
7
2. Никогда не копируйте то, что можно обвести.
   
3. Никогда не обводите то, что можно вырезать и наклеить.
   
Правила рисования Вуда

Чтобы создать интерфейс программы, нужно иметь выбор из различных компонент. В Windows существует множество элементов, и все они доступны в Delphi для использования. Познакомимся с двумя первыми вкладками Палитры Компонент - Standard и Additional. Именно на них расположено большинство элементов, наиболее часто используемых в программах.

Standard

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

Вкладка Standard палитры компонент

Frames - позволяет разместить на форме так называемый "фрейм". Фрейм из себя представляет другое окно. Чтобы создать окно-фрейм, следует выбрать пункт меню File -> New -> Frame, либо выделить значок Frame в окне File -> New -> Other на вкладке New. До тех пор, пока в приложении не будет ни одного фрейма, использовать данный объект не удастся. Фреймы удобны в том случае, когда какие-либо настройки запрашиваются во время работы программы в виде отдельной формы, а также, например, на одной из вкладок основной формы.

MainMenu - основное меню окна. Связать его с формой можно через свойство Menu формы. При двойном щелчке по значку MenuMenu появляется дизайнер меню, в котором можно добавлять и удалять пункты. В Caption задаётся текст пунта меню. Чтобы создать черту-разделитель, следует в свойство Caption прописать знак "минус" ("-", без кавычек).

Menu Designer (Дизайнер меню)

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

Label - текстовая метка (надпись) на форме. Используется для отображения любого текста в окне. Текст задаётся в свойстве Caption. Свойство Font позволяет настроить шрифт текста.

Edit - поле ввода. Используется для ввода любых данных (текста, числа и т.д.), представленных одной строкой. Свойство ReadOnly позволяет запретить редактирование текста в поле. Текст хранится свойством Text. Свойство MaxLength позволяет задать максимальное число символов, которое может быть введено в поле. Значение 0 означает, что ограничение не установлено.

Memo - многострочный Edit. Используется для ввода больших объёмов текста. Свойство ScrollBars позволяет указать полосы прокрутки, которые будут отображаться у поля при недостатке места для всего текста:

  • ssNone - без полос прокрутки;
  • ssHorizontal - горизонтальная полоса прокрутки;
  • ssVertical - вертикальная;
  • ssBoth - обе: и горизонтальная, и вертикальная.

Button - кнопка, самая что ни есть обыкновенная. Caption - текст на кнопке.

CheckBox - флажок-переключатель. Состояние хранится в свойстве Style:

  • cbUnchecked - не отмечен;
  • cbChecked - отмечен;
  • cbGrayed - затемнён.

Само состояние следует изменять с помощью свойства Checked. Таких флажков может быть несколько и каждый может быть отмечен независимо от остальных.

RadioButton - радио-переключатель. Аналогичен CheckBox, но при наличии нескольких переключателей может быть выбран только один из них. Свойство Checked позволяет изменить состояние переключателя.

ListBox - список текстовых строк. Используется для выбора одного из вариантов. Строки задаются в свойстве Items. Чтобы изменить исходные значения, следует щёлкнуть по кнопке с тремя точкам ("...") в строке свойства Items и в открывшемся редакторе ввести требуемые значения. Свойство MultiSelect позволяет включить/выключить одновременный выбор нескольких строк из списка.

ComboBox - ещё один список для выбора, но выпадающий - на экране видна всего одна строка, а сам список появляется при нажатии на кнопку со стрелкой. Установив свойство Style в csDropDownList можно запретить ввод произвольного значения в ComboBox. Текст выбранной строки доступен в свойстве Text.

ScrollBar - полоса прокрутки. Свойство Kind определяет ориентацию полосы на форме: sbHorizontal - горизонтально, sbVertical - вертикально.

GroupBox - "контейнер" для компонент. Используется для объединения элементов в отдельные области. При перемещении GroupBox'а все компоненты, расположенные на нём, также перемещаются. Для размещения компонент в этом контейнере следует после выбора их на Палитры компонент щёлкнуть по самому контейнеру (а не по форме, как обычно). У GroupBox можно задать текст заголовка (свойство Caption).

RadioGroup - группа из нескольких RadioButton'ов. Тексты строк задаются в свойстве Items. Номер выбранной строки - свойство ItemIndex (нумерация строк начинается с нуля!).

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

ActionList - позволяет управлять действиями (Actions), которые привязываются к пунктам меню, кнопкам и т.д.

Additional

Вкладка Additional палитры компонент

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

BitBtn - кнопка, на которой помимо текста можно разместить изображение. За изображение отвечает свойство Glyph. Формат - *.bmp. Чтобы добавить картинку, следует щёлкнуть по кнопке с тремя точками в строке свойства Glyph, в открывшемся окне нажать Load... и указать файл с картинкой.

SpeedButton - ещё один тип кнопки. Также поддерживает добавление изображения. Помимо этого кнопку можно сделать "плоской", т.е. без границ - за это отвечает свойство Flat.

MaskEdit - аналог Edit, но используется для ввода текста по маске. Например, можно указать ввод только цифр. Маска задаётся в свойстве EditMask. Имеется несколько стандартных вариантов.

StringGrid - таблица, в каждой ячейке которой может быть расположен текст. Часть ячеек можно сделать фиксированными (свойства FixedCols и FixedRows). Количество строк и столбцов таблицы задаётся соответственно свойствами RowCount и ColCount.

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

Image - изображение, которое можно разместить на форме. Изображение задаётся в свойстве Picture. Свойство Center позволяет отцентрировать изображение, если размеров недостаточно для его полного отображения. Stretch позволяет задать сжатие/растяжение картинки под размеры компонента, Proportional указывает, следует ли при этом сохранять пропорции исходного изображения.

Shape - один из вариантов геометрических фигур. Тип фигуры определяется в свойстве Shape:

  • stCircle - окружность;
  • stEllipse - эллипс;
  • stRectangle - прямоугольник;
  • stRoundRect - прямоугольник с закруглёнными углами;
  • stRoundSquare - квадрат с закруглёнными углами;
  • stSquare - квадрат.

Свойства Pen и Brush позволяют задать стиль границ фигуры и её внутреннюю заливку.

Bevel - компонент для создания рельефа на форме - линий, окошек и т.д.

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

CheckListBox - аналог ListBox, но к каждой строке добавляется флажок. Таким образом более удобно выбирать значения из списка.

Splitter - разделитель для создания областей изменяемых размеров. Компонент следует разместить между двумя элементами, которые должны быть изменяемого размера. После этого следует настроить выравнивание (Align) элементов и Splitter автоматически начнёт работать.

StaticText - текстовая метка, аналог Label, но в отличие от него является полноценным элементом управления Windows. Использовать StaticText имеет смысл в том случае, если нужно разместить текст поверх какого-либо другого компонента. С Label этого сделать не удастся.

ControlBar - один из типов панелей инструментов. Автоматически перетаскивается по области, отведённой для панелей инструментов.

ApplicationEvents - используется для доступа к некоторым свойствам и событиям объекта TApplication. Этот объект - и есть само приложение. Работать с этим объектом можно и программно, но с помощью этого компонента всё же удобнее. Он является невизуальным.

ValueListEditor - таблица из двух колонок - поля и значения. Некое подобие StringGrid.

LabeledEdit - Label и Edit "в одном флаконе". Оба компонента являются полностью настраиваемыми.

ColorBox - выпадающий список для выбора цвета.

Chart - мощный объект для построения диаграмм и графиков.

ActionManager - используется для управления действиями TAction. Аналогичен ActionList со страницы Standard, но имеет намного больше возможностей. При создании приложения на основе этой технологии рекомендуется использовать именно ActionManager.

ActionMainMenuBar - меню, работающее на основе TAction.

ActionToolBar - аналогично, панель инструментов на основе TAction.

XPColorMap, StandardColorMap, TwilightColorMap - стандартные цветовые схемы для объектов на основе TAction (кстати, они называются Action-band компонентами).

CustomizeDlg - диалог для настройки Action-band компонентов. Такой диалог используется, например в Microsoft Word для индивидуальной настройки панелей инструментов и меню. Помимо этого, Action-band компоненты позволяют сохранять и восстанавливать состояние всех объектов. Это делает приложение полностью настраиваемым.

Заключение

Вот мы кратко и познакомились с компонентами первых двух вкладок Палитры компонент - Standard и Additional. Теперь Вы можете поэкспериментировать с созданием интерфейса для своей программы. В следующей главе мы начнём изучение языка Object Pascal.

Оцените данный урок по пятибалльной шкале:
1 2 3 4 5
Комментарии и замечания приветствуются.

 

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

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

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

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

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

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

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

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

Здравствуйте!
Хотелось бы получить серийный номер материнской платы данного компьютера каким-нибудь универсальным способом для защиты программного средства! Работаю под Delphi6, моя программа вероятно будет использоваться даже на платформе Win95

Автор вопроса: RedMask (статус: Посетитель)
Дата и время отправки вопроса: 19.12.2006, 10:48
Получено ответов на вопрос: 3
Сообщений в форуме вопроса: 1
Страница данного вопроса >>


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

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

Не ищите универсального решения - его нет и быть не может в принципе. Платформы 9х и NT достаточно сильно отличаются, поэтому то, что можна в одной - категорически нельзя в другой (например прямой доступ к портам с пользовательского режима) Поэтому определяем версию операционки и применяем соответствующее решение.
Версия операционки - http://www.delphiworld.narod.ru/base/windows_version.html
Номера материнской платы можно взять с биоса. Читать
http://www.delphiworld.narod.ru/base\bios_number.html
http://www.delphiworld.narod.ru/base\bios_win2000_info.html
А здесь - как прочитать весь БИОС. Мало что прийдёт в голову
http://www.delphiworld.narod.ru/base\read_rom_bios.html
Но можна и проще поступить - у многих (практически всех) на материнской плате есть сетевая карточка, которая в свою очередь имеет MAC-адресс, который по идее уникален.
Вот код, который поможет его найти
http://www.delphiworld.narod.ru/base.get_pc_mac_address.html

Судить о качестве защиты, основаной на этих данных не буду, так как всё зависит от Вас и только от вас

Оценка за ответ: 5.
Комментарий: Принялся изучать!

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

Здравствуйте, RedMask!
Здравствуйте, RedMask!
Задача привязки к конфигурации компьютера не так проста. Оптимальным было бы организовать привязку сразу к нескольким параметрам, например серийный номер материнской платы, серийный номер жесткого диска, дата BIOS. Причем получать эту информацию лучше "нестандартными" методами, потому-что как только взломщик поймет, что программа имеет привязку к конфигурации, он сразу найдет место в коде, где она проверяется.
Лучше воспользоваться низкоуровневым драйвером, например компания ionworx (http://www.ionworx.com/) выпускает пакет именно для привязки - там и привязка сразу к нескольким параметрам и api для связи с приложением, только пакет платный и стоит недешево.

А касательно материнской платы - есть два возможных способа получить ее серийный номер:

1) Поискать в BIOS. При загрузке компьютера POST выводит производителя материнской платы, надо полагать, что и серийный номер тоже читается. Где конкретно искать этот номер я не знаю - ищите сами. Тут еще трудности с доступом к этой памяти, по-моему под NT просто так прочитать ее не дадут.

2) Воспользоваться средствами WMI, она собирает очень много информации о компьютере. Написал Вам небольшой пример по получению информации о материнской плате, правда на VisualBasic. Это можно перевести и на Delphi. И еще, не знаю у кого как, но у меня она все-равно не выдала серийного номера, может у Вас выдаст.
http://expert.delphi.int.ru/download_33

Оценка за ответ: 5.
Комментарий: Спасибо за полезную информацию! Уже почти защитил с помощью ваших советов =) А Ваш пример вызвал исключение =)

3. [Отвечает: Новаковский Юрий Аврамович (статус: 4-ый класс), 20.12.2006, 10:53]:

Здравствуйте, RedMask!
От себя могу добавить, что если злоумышленник найдет в ресурсах или еще где нибуть то значение с которым производится сравнение, то песец защите.
Что бы этого избежать примените ХЕШИРОВАНИЕ-значение полученное с помощью односторонних операций.

Держите библиотеку
http://expert.delphi.int.ru/download_34

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

Оценка за ответ: 5.
Комментарий: Конечно надо использовать односторонню функцию, подругому ни как! "исходное значение получить не возможно, только перебором" -И перебор займёт даже на самой мощной машине несколько лет)! За советы спасибо, и библиотеку посмотрю)))



Вопрос № 202

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

Доброе время суток, программисты. У меня есть TreeView1, я создаю в нем каталог, какой командой проверить, был ли создан раньше такой же котолог. Заранее благодарен.

Автор вопроса: Geron (статус: 1-ый класс)
Дата и время отправки вопроса: 19.12.2006, 16:01
Получено ответов на вопрос: 2
Сообщений в форуме вопроса: 0
Страница данного вопроса >>


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

1. [Отвечает: PaVeL-Ekt (статус: 1-ый класс), 20.12.2006, 07:45]:

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

сперва задать глобальную переменную типа Boolean

Затем организовать рекурсивную процедуру, в которой будет проводиться сперва проверка по имени элемента, а затем если проверка отрицательна
запускаться цикл от 0 до количества дочерних веток-1 в котором процедура будет запускать сама себя.

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

Да, это будет работать, но очень медлено. Может на 10-20 элементах и будет незаметно, но на 100 - уже будет ощущаться.
для быстрейшего прохода по элементам пользуемся таким методом
var n:TTreeNode;
...
n:=TreeView1.item[0];//К нулевому елементу доступ всегда быстр
while n<>nil do
begin
//Вначале работаем с элементом.
n.Text:=''; //это типа работа.
n:=n.getNextSibling;//Перейдём к следующему элементу.
end;
Осталось только рекурсию прикрутить :)



Вопрос № 203

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

В приложении использую TCoolTrayIcon и PageControl, сворачиваю приложение в трей, потом разворачиваю обратно командой контекстного меню значка в трее application.restore; или ShowWindow(Application.Handle, SW_Normal); и теперь при кликах по табам в PageControl не происходит смена самих листов, табы переключаются, а содержимое всех листов не меняется. остается то, что было на листе до сворачивания приложения.

Пожалуйста, помогите решить проблему

Автор вопроса: Косарев Антон Сергеевич (статус: Посетитель)
Дата и время отправки вопроса: 20.12.2006, 02:18
Получено ответов на вопрос: 1
Сообщений в форуме вопроса: 0
Страница данного вопроса >>


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

1. [Отвечает: Dron (статус: 10-ый класс), 20.12.2006, 08:31]:

Здравствуйте, Косарев Антон Сергеевич!
Когда-то я встречался с такой проблемой - элементы действительно блокировались. По-моему, для сворачивания приложения нужно использовать готовые команды самого CoolTrayIcon: у него есть HideMainForm и ShowMainForm, HideTaskbarIcon и ShowTaskbarIcon. Вроде бы, после этого проблема решилась.

Оценка за ответ: 5.
Комментарий: Да действительно, ShowMainForm исправляет эту ошибку. Спасибо громаднейшее )



Вопрос № 204

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

Здравствуйте. Подскажите,пожалуйста, почему в некоторых случаях при попытке выполнения операции TQuery1.filter:='значение' система выдает сообщение об ошибке "операция невыполнима"? Причем на других запросах работает нормально.

Автор вопроса: Мережников Андрей (статус: Посетитель)
Дата и время отправки вопроса: 20.12.2006, 17:38
Получено ответов на вопрос: 2
Сообщений в форуме вопроса: 0
Страница данного вопроса >>


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

1. [Отвечает: Матвеев Игорь Владимирович (статус: Средний уровень), 21.12.2006, 01:11]:

Здравствуйте, Мережников Андрей!
В BDE на ошибки проверяет DbiError(), вызывающая исключение EDBEngineError с соответствующим сообщением об ошибке, но среди этих сообщений нет строки "Операция невыполнима". Поэтому остается предполагать, что ошибку возвращает поставщик данных.
Возможно Вы задаете взаимоисключающие условия отбора.

Уточните вопрос, приведите примеры фильтров, укажите тип БД, а тот так тяжело определенно сказать.

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

Что такое фильтр обычно? Это дополнительное условия в where. Но не все символы обычно допустимы. К примеру у вас поле целого типа, а вы пытаетесь фильтровать по тексту или, что более часто - фильтр равен пробелу. Попробуйте понять (представить себе фильтр или подсмотреть его с помощью SQL монитора, если у вас BDE) - и всё станет на свои места

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



Вопрос № 205

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

Подскажите пожалуйста как лучше написать SQL запрос типа "update baza set field1=(select a1 from baza2 where cond1),field2=(select a2 from baza2 where cond1),
чтобы все значения для полей field1,field2 вернулись одним подзапросом? и еще что делать если подзапрос может вернуть нулевой результат (как присвоить какое-то значение полям по умолчанию)

Автор вопроса: Мережников Андрей (статус: Посетитель)
Дата и время отправки вопроса: 20.12.2006, 17:43
Получено ответов на вопрос: 2
Сообщений в форуме вопроса: 0
Страница данного вопроса >>


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

1. [Отвечает: Матвеев Игорь Владимирович (статус: Средний уровень), 21.12.2006, 01:00]:

Здравствуйте, Мережников Андрей!
Не знаю точного ответа на Ваш вопрос, но могу посоветовать:

1) Найдите книги по SQL, например такие:
- Кевин Клайн - SQL Справочник;
- Джеймс Р. Грофф, - SQL - Полное руководство;
2) Попробуйте обратиться в форумы соответствующей направенности, например, www.sql.ru;

И еще, существует несколько стандартов SQL, начиная от SQL92 и заканчивая SQL2003, кроме того, в разных системах БД и реализация стандартов отличается, например в BDE невозможен вложенный SELECT. Поэтому задавая вопос обязательно уточните тип БД и средство доступа к данным, используемое Вами.

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

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

Здравствуйте, Мережников Андрей!

Данный запрос необходимо реализовывать с помощью Stored Procedure. Какая БД? Какие тип компонентов работы с БД используется? Хотелось бы знать структуру таблиц. Свяжитесь со мной по аське 165711772?



Вопрос № 206

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

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

Автор вопроса: Geron (статус: 1-ый класс)
Дата и время отправки вопроса: 22.12.2006, 00:43
Получено ответов на вопрос: 2
Сообщений в форуме вопроса: 0
Страница данного вопроса >>


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

1. [Отвечает: PaVeL-Ekt (статус: 1-ый класс), 22.12.2006, 07:49]:

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

Примерно так:
Var
Node: TTreeNode;
i: integer;
Exist: Boolean;
...
Node:=TreeView1.Items.Item[0]; //индекс вашей ветки дерева
For i:=0 to Node.Count-1 do
If Node.Item[I].Text=Name then Exist:=true;

If Exist then ...

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

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

function FolderExists(AParentFolder: TTreeNode; const AFolderName: string): Boolean;
var
FNLower: string;
Index: Integer;
begin
Result:= True;
FNLower:= AnsiLowerCase(AFolderName);

for Index:= 0 to AParentFolder.Count - 1 do
if AnsiLowerCase(AParentFolder.Item[Index].Text) = FNLower
then Exit;

Result:= False;
end;

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



Вопрос № 207

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

Здравствуйте!
Мой программное DELPHI средство использует InterBase! Вопрос такой - как просто из одной базы данных IB(.GDB) взять несколько несвязанных таблиц и организовать из них другую базу данных? Сейчас у меня стоит IBConsole и есть IBExpert. Просто удалить остальные таблицы не получается. Спасибо

Автор вопроса: RedMask (статус: Посетитель)
Дата и время отправки вопроса: 22.12.2006, 08:12
Получено ответов на вопрос: 2
Сообщений в форуме вопроса: 1
Страница данного вопроса >>


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

1. [Отвечает: Помфюк Владимир Степанович (статус: 8-ой класс), 22.12.2006, 09:54]:

Здравствуйте, RedMask!
В IbExpert'e используйте пункт "Инструменты" -> "Извлечение метаданных". Там укажите все, что Вам нужно в новой базе и получите скрипт создания выбраных обьектов. Из него удалите начальные строки, в которых прописан коннект к базе, подключитесь к базе в которую хотите перенести таблицы и на ней выполните скрипт

Оценка за ответ: 5.
Комментарий: Спасибо! А как после этого мне перенести информацию из таблиц в новую базу? Она то и важна на самом деле!

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

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

1.Перекопируй файл и измени его название.
2.Подключись IBConsole к БД.
3.Войди в режим SQL запроса и для каждой удаляемой таблицы введи строку DROP TABLE имя;

Удачи!

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



Вопрос № 208

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

Столкнулся с необходимостью сортировать записи по полям (DBGridEh). Я пользуюсь AutoSortMarker := true, т. е. сортируется датасет на основе запроса. Но как сортировать лукап поля? Подскажите хотя бы, куда копать

Автор вопроса: Ласковый 3лоумышленник (статус: 3-ий класс)
Дата и время отправки вопроса: 22.12.2006, 09:46
Получено ответов на вопрос: 0
Сообщений в форуме вопроса: 0
Страница данного вопроса >>


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

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



Вопрос № 209

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

Здраствуйте, эксперты, подскажите какую базу данных, созданную под какой СУБД лучше использовать для работы с ней по сети. И почему при работе с IBDatabase если к базе подключено более 1 пользователя не позволяет добавить новую запись?

Автор вопроса: hdrus (статус: Посетитель)
Дата и время отправки вопроса: 22.12.2006, 14:47
Получено ответов на вопрос: 2
Сообщений в форуме вопроса: 1
Страница данного вопроса >>


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

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

Нормально по сети будет работать например связка FireBird(можно и InterBase, и Yaffil) + FIB компоненты. В этих компонентах есть специальные средства для того, что бы можно было продолжать работать, если сеть падает кажые 5 минут. Тоесть для клиента это будет достаточно прозрачно. Данные будут отправлены при первой возможности. Также эти компоненты умеют "уменьшать" нагрузку на сеть - если вы обновили пару записей, то с сервера не будут тянуться все новые, а только обновлённые.

И почему при работе с IBDatabase если к базе подключено более 1 пользователя не позволяет добавить новую запись?
А наверное вы подключаетесь к базе в монопольном (эксклюзивном)режиме на запись. FIB точно позволяют отрегулировать этот вопрос и если вы понимаете что делаете, то получите достаточно продуктивную систему

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

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

Здравствуйте, *!
Какой компонент вы используете для получения данных TIBTable или TIBQuery. Если TIBTable - всё закономерно.
Ещё в Interbase существует понятие транзакции. Любой набор данных необходимо связывать с БД через компонент TIBTransaction. Причём при любом изменении данных в наборе для того чтобы изменения вступили в силу выпоняется команда IBTransaction.Commit также при начале изменения данных рекомендуется дать команду IBTransaction.StartTransaction

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



Вопрос № 210

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

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

Автор вопроса: Geron (статус: 1-ый класс)
Дата и время отправки вопроса: 22.12.2006, 15:48
Получено ответов на вопрос: 2
Сообщений в форуме вопроса: 0
Страница данного вопроса >>


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

1. [Отвечает: Вадим К (статус: Средний уровень), 22.12.2006, 17:07]:

Разобём ваш вопрос на 2 части.
1) как работать с ProgressBar. Для этого вам надо знать о таких свойствах.
Max и min - задают значения максимума и минимума, который отображает компонент.
Position - "позиция" должна находиться между min и Max (по значению). Только не советую часто устанавливать свойство position, так как компонент пересоздаёт себя (если так можно сказать) - а это отбирает много времени.
Проще написать что то в виде
if PB1.Position<>CPos then PB1.Position:=CPos;
Но также не стоит забывать, что если прогрессбар занимает 50 пикселей, а разница max-min равна 100, то пользователь не заметит изменения position на еденицу (правда в половине случаев).
Также есть интересные свойства
Smooth - сделать прогресс соцельным, без разбиения на "кубики"
Orientation - вертикальный или горизонтальный он у вас будет.
Step - это свойсво указывает, на скоко поменяется position при вызове метода StepIt; (типа "сделать шаг")
2)теперь разбирём как делать длиные расчёты.
Обычно тут есть два подхода - просто цикл, который ужасно тормозит интерфейс и поток, в котором тот же цикл, но интерфейс в поряде. Но как минус, нужно делать обновления через синхронизацию.
Покажу пример с циклом
PB1.max:=MyMax;
PB1.Position:=0;
for i:=1 to MyMax do
begin
//Делаем полезную работу
PB1.Position:=i;
Application.ProcessMessage;
end;
С потоком почти аналогично.
Но самая большая проблема возникает тогда, когда конец сложно определить. Например вы выполняете поиск по диску. Тут можно сделать следующее.
Классический майкрософтовский - прогресс бар бегает по кругу и от процесса слабо зависит.
Второй тоже майкрософтовский (в броузере используется) - за каждый шаг прогресс продвигается на половину (третью часть) незаполненного пространства справа. Таким образом он никогда не дойдёт до конца. А когда процесс будет завершён - мы можем вручную его "додвинуть"

2. [Отвечает: Новаковский Юрий Аврамович (статус: 4-ый класс), 25.12.2006, 09:30]:

Здравствуйте, Geron!
От себя могу добавить, если у Вас есть цикл обработки Вашего процесса вызвайте в нем

ProgressBar1.StepIt;

Полоска переместиться на ProgressBar1.Step позиций, по умолчанию ProgressBar1.Step:=10;.

Удачи Вам.




Статьи  >>

Использование компонента TCoolBar

Источник (оригинал): delphi.about.com

Большинство современных приложений Windows имеют несколько панелей инструментов. В их числе такие распространённые программные продукты как Microsoft Internet Explorer, MS Word и Delphi IDE. В этой статье рассказывается о компоненте-контейнере CoolBar, который может содержать другие компоненты, такие как toolbar'ы, выпадающие списки и т.д.

TCoolBar

TCoolBar на форме

TCoolBar в палитре компонент Компонент TCoolBar - это разновидность TToolBar. TCoolBar - это элемент управления, который обычно содержит в себе два или более TCoolBand-ов, размеры и местоположение которых можно изменять во время выполнения программы. CoolBand в свою очередь является областью элемента управления, которая может содержать другие оконные контролы, главным образом панели инструментов, окошки редактирования и выпадающие списки.

Создать CoolBar довольно просто: достаточно поместить компонент CoolBar из набора Win32 VCL на форму. У CoolBar-а есть довольно много настроек (настройка осуществляется через свойства): Align - по умолчанию, расположение Coolbar настроено на верхнюю часть окна, поэтому, чтобы изменить расположение кулбара, нам прийдётся подредактировать это свойство; Bitmap - используется для закрашивания фона CoolBar-а картинкой; свойство FixedOrder определяет, может ли пользователь переопределить порядок панелей.

TCoolBand

Редактор TCoolBand's

Как уже упоминалось выше, компонент Coolbar - это обычно набор объектов TCoolBand. Чтобы добавить несколько CoolBand-ов в CoolBar, нам потребуется вызвать редактор Coolbar Band-ов. Сделать это можно путём нажатия на значjк, расположенный сразу после свойства Bands.

Один из способов разместить компонент (или компонент-контейнер) на CoolBar-е, это перетащить его из палитры VCL, при этом автоматически создастся новый band для хранения компонента. Другой способ заключается в том, что компонент вставляется в форму напрямую, а затем, при помощи редактора CoolBar Band-ов связывается с каким либо CoolBand-ом. Далее на CoolBar обычно добавлется Toolbar, путём простого перетаскивания его из палитры Win32 на Coolbar. Потом на toolbar добавляются одна или несколько кнопок.

Самая интересная возможность CoolBar-а - это то, что он может содержать в себе элементы управления, отличные от кнопок.

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

Во время выполнения программы пользователь может изменять местоположение элементов управления путём перемещения и тем самым меняя размер.

Вам хочется добавить ещё компонентов?

Как упоминалось выше, на CoolBar можно добавлять различные оконные компоненты. Оконные компоненты - это те, которые наследованы от TWinControl. Это значит, что Labels и Shapes, например, не получится добавить на CoolBar. Однако, если внимательно посмотреть на Delphi IDE, то можно обнаружить, что Coolbar может так же содержать меню, хотя меню и не является оконным компонентом. Значит должен быть способ добавлять на Coolbar неоконные компоненты!

Менюшки на Cool Band-ах

Итак, сперва нам необходимо разместить на форме компонент MainMenu и добавить в него пункты при помощи Menu designer. Обратите внимание, что когда мы помещаем компонент TMainMenu на форму, то значение свойства формы Menu устанавливается в MainMenu1. Нам необходимо очистить это свойство и тем самым отключить объект MainMenu от формы, потому что нам необходимо использовать его в Coolbar-е.
Далее, добавляем Toolbar в Coolbar а так же добавляем несколько ToolButton - один ToolButton для каждого выпадающего меню. Если, например, у Вас два меню верхнего уровня File и Edit, то добавить необходимо всего два ToolButton-а.
Далее, устанавливаем свойства тулбара. Flat и ShowCaptions устанавливаем в True. Свойства AutoSize и Grouped компонента ToolButton так же должны быть установлены в True. И, в заключение, соединяем каждую кнопку с выпадающим меню, используя для этого свойство MenuItem.

Вот так должен выглядеть результат проделанных шагов (запущенная программа):

Приложение с использованием TCoolBar

Немного программирования

Во время выполнения приложения можно добавлять CoolBand-ы. Следующий код добавляет CoolBand на CoolBar с размещённым на нём TDateTimePicker.

procedure CreateDatePickerOnCoolBar;
var dtPick: TDateTimePicker;
begin
dtPick := TDateTimePicker.Create(CoolBar1);
dtPick.Parent := CoolBar1;
CoolBar1.Bands.Items[CoolBar1.Bands.Count-1].Text := 'Pick a date';
...
end;

Замечание: как упоминалось раньше, размещение контрола в Coolbar'е заставляет объект TCoolBar создать TCoolBand и поместить элемент управления в band-е. При помощи "CoolBar1.Bands.Items[CoolBar1.Bands.Count - 1]" мы связываем текст с последним созданным TCoolBand.
Замечание №2: Память компонента TDateTimePicker автоматически освобождается при освобождении памяти родителя. Происходит это когда приложение завершается и CoolBar уничтожается формой.

Процедура CreateDatePickerOnCoolBar всего-навсего создаёт TDateTimePicker на CoolBar. Для того, чтобы использовать события TDateTimePicker, нам необходимо создать процедуры обработчиков событий. Не будем вдаваться в подробности создания объектов в Delphi. Для создания обработчика события для TDateTimePicker, нам необходимо написать метод (процедуру) некоторого объекта (обычно для этого выбирают главную форму) с таким же количеством параметров, с такими же типами и именами параметров. Затем в коде измените имя процедуры на такое же имя свойства TDateTimePicker, обрабатывать которое Вы хотите. После этого новая процедура автоматически станет обработчиком события для этого объекта.

В конце процедуры CreateDatePickerOnCoolBar добавьте:

dtPick.OnCloseUp := dtpOnCloseUp;

OnCloseUp происходит, когда выпадающий календарь закрывается. А теперь используем это событие, чтобы передать дату из DateTimePicker в компонент Memo:

procedure TForm1.dtpOnCloseUp(Sender: TObject);
begin
Memo1.Lines.Add
(DateToStr((Sender as TDateTimePicker).Date));
end;

Не забудьте разместить объявление процедуры dtpOnCloseUp секции интерфейса (interface) юнита формы (private или public).

TControlBar

TCoolBar - это стандартный Win32 элемент управления, который является частью операционной системы. Проверьте, присутствует ли компонент TControlBar на дополнительной закладке набора компонент. TControlBar это родной компонент VCL, который работает практически так же как и Coolbar. Этот компонент не использует в своей работе COMCTL32.DLL, как это делает TCoolBar, поэтому менее восприимчив к прихотям Microsoft.

Ссылки

См. Webbrows Delphi в директории coolstuf которая демонстрирует использование TCoolbar (X:\Program Files\Borland\Delphi\Demos\CoolStuf).

Компонент TMenubar. Это потомок TToolbar, имеющий свойство меню, которое позволяет связывать TMainMenu с панелью инструментов (toolbar). После этого компонент включает все пункты меню в toolbar.

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

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


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

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

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

Название
Описание
Раздел
Объём
Ссылки
Timer
Программа позволяет отключить компьютер через определенное время (3 варианта выключения) с предупреждением или без. Имеется возможность отключать менеджер задач для предотвращения принудительного отключения таймера.
447 Кб
Color controls

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

473 Кб
TUsersListBox

Усовершенствованный компонент TListBox. Имеет несколько дополнительных свойств и событий, поддерживает изображения. Наиболее часто компоненты такого типа используются в интернет-мессенджерах.

734 Кб
TCircle

Компонент создан в качестве простого примера создания собственного компонента. Позволяет рассчитывать параметры окружности как геометрической фигуры. Имеет 4 свойства:
- Radius (радиус);
- Diameter (диаметр);
- Square (площадь);
- Length (длина окружности).
При изменении любого из свойств остальные значения пересчитываются автоматически.

5 Кб
CoolBar Demo

Программа-пример к статье "Использование компонента TCoolBar"

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

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

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

Юмор

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

Настоящая хакерская операционная система

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

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

- система дает хакерам возможность как следует набить руку на переустановке (ходят слухи, что будут проводиться соревонования по скоростной переустановке системы: на протяжении трёх суток хакеры, вооруженные dos'ом, hiew, del'ом и rыgedit'ом будут пытаться заставить работать любимую систему)

- для тренировки молодых хакеров в системе предусмотрено множество скрытых возможностей (помните знаменитую фразу:"Пионеры! Мы вам дарим телевизор цветной, учебно-развлекательный!.. а проще говоря, с дефектом"), поэтому другой вид соревнований - поиск скрытых возможностей; в течение 5 минут найти как можно больше скрытых возможностей (последний рекорд, 12564 скрытых возможностей, принадлежит Илье Воротину)

- Раз уж речь зашла про соревнования, нельзя не упомянуть про знаменитый хакерский конкурс, организуемый господином Линадовым и предпринимателем из Японии Йиксрепсак-сан: цель - написать как можно более крутую программу для использования в образовательных целях. Нам неизвестны подробности, но мы предполагаем, что конкурс предназначен для написания программ обучения школьному курсу, чтобы ученики могли обучаться на дому. Поблагодарим же их за правое дело!

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

- А глава компании настолько щедр, что недавно пожертвовал 50 (!) тысяч долларов бедным детям Африки. Воздадим же хвалу нашему щедрому повелителю! А теперь о пользовательских функциях:

- В следующей версии обещается технология "Click'n'RIP', позволяющая одним щелчком мыши скачать все рефераты, отправить их по почте в институт, познакомиться с красивой девушкой, назначить ей свидание, зачать ребенка, выполнить всю необходимую работу, получить кучу денег, и заказать себе гроб. При выполнении операции на экране появляется увлекательный скринсейвер с переливающейся и передвигающейся надписью Please Wait... Все, что вам нужно - просто клинкуть мышкой, все остальные сделается за вас!

- В нашу любимую ОС включено также множество замечательных полнофункциональных программ, таких как 'Фонограф', позволяющий записать аж до одной минуты звука, а также увлекательное развлечение (Пуск -> Программы -> Стандартные -> Развлечения) под названием 'Регулятор громкости'. В том же меню располагается множество других стандартных развлечений.

Покупайте нашу операционную систему! Компания, производящей Операционную Систему, никак не связана с автором этой статьи и не выплачивала ему никакого гонорара! Что? Что вы все на меня так смотрите?

:))

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

В избранное