От Delphi 4 к Delphi 5 часть 11

От Delphi 4 к Delphi 5 Палитра компонентов.
Страница DATA ACCESS.
В Delphi 4 и Delphi 5 имеются средства построения приложений типа клиент-сервер, рассчитанных на работу с электронными архивами (базами данных). Компоненты страницы Data Access (рисунок 1) облегчают доступ программ к базам данных (БД).
DataSource (источник данных) служит связующим элементом между компонентами доступа к данным и компонентами отображения данных. Этот компонент формирует связь между таблицей базы данных, которую вы рассматриваете, и ее отображением в любом из компонентов Delphi, работающих с данными. Можно выставить несколько запросов к просматриваемой таблице. Для этого используется несколько компонентов Query или несколько компонентов DataSource, чтобы иметь возможность перемещаться между различными запросами.
Table (таблица) служит средством доступа к файлам баз данных (к таблицам). Показывает таблицу из локальной или удаленной базы данных. Вы можете просматривать ее, используя любой из компонентов данных Delphi.
Query (запрос) осуществляет выборку данных из таблиц с помощью структурированного языка запросов SQL.
StoredProc (хранимая процедура) обеспечивает доступ к процедурам сервера баз данных, такого, как InterBase, Oracle, MS SQL Server и т.д.
Database (база данных) используется для явного управления процессом соединения с защищенной паролем базой данных. Этот компонент обеспечивает защиту по ID пользователя и его паролю, управление передачей данных, организует устойчивые связи при соединении с базой данных.
Session обеспечивает сеанс связи с базой данных. Необходимость в этом компоненте возникает в многопоточных приложениях баз данных, т.е. когда два или более потока одновременно обращаются к одной и той же базе Database.
BatchMove (пакетная пересылка) используется для массовых пересылок данных, например, для копирования локальных таблиц в таблицы сервера баз данных.
UpdateSQL (модификация данных) используется для управления изменениями (модификациями) данных, с которыми манипулируют компоненты Table, Query, StoredProc.
NestedTable (вложенная таблица) используется для изоляции таблицы базы данных, которая вложена как область в пределах другой таблицы.

Инспектор объекта.
Страница событий.
Рассмотрим событие ShortCut. Используя его, можно создать меню быстрого доступа c использованием "горячих" клавиш, которые представляют собой сочетание клавиш Ctrl + буквенное значение, Alt + буквенное значение, Shift + буквенное значение. Используя компонент MainMenu, вы имели возможность назначать их из предложенного списка для проведения определенных действий. Теперь у вас имеется возможность определения "горячих" клавиш с использованием программного кода. Рассмотрим пример, который называется Short, позволяющий прятать и показывать компоненты в приложении. Размещение компонентов на форме для данного примера показано на рисунке 2.
1. Запустите Delphi.
2. Сохраните файл проекта под именем Short dpr, а файл модуля под именем Short_pas.
3. Поместите на форму компонент MainMenu со страницы Standard палитры компонентов.
4. Произведите двойной щелчок левой кнопкой мыши по пиктограмме MainMenu. Введите заголовок для нашего меню, например "Команды". Для этого используйте страницу Properties инспектора объекта, справа от свойства Caption в белом поле напишите слово "Команды".
5. Для следующего элемента меню введите заголовок "Убрать", данная команда будет делать невидимой кнопку Button1. Используя свойство Name для данного элемента меню, измените имеющееся имя №2 на ButFalse.
6. Создайте еще один элемент меню, введите заголовок "Показать", данная команда будет делать видимой кнопку Button1. Используя свойство Name для данного элемента меню, измените имеющееся имя №3 на ButTrue.
7. Поместите на форму компонент Button со страницы Standard палитры компонентов.
8. Напишите нижеприведенный код для данного примера. Используя событие ShortCut, для нашей формы определите "горячие" клавиши: чтобы сделать кнопку невидимой, — Ctrl + O, чтобы сделать кнопку видимой — Ctrl + U.
9. Далее, как обычно Run/Run.

implementation {$R *.DFM} procedure TForm1.FormShortCut (var Msg: TWMKey; var Handled: Boolean
); begin ButFalse.ShortCut:= ShortCut (Word('O'),[ssCtrl]); ButTrue.ShortCut:= ShortCut (Word('U'),[
ssCtrl]); end; procedure TForm1.ButFalseClick (Sender: TObject); begin Button1.Visible:=False; end; 
procedure TForm1.ButTrueClick (Sender: TObject); begin Button1.Visible:=True; end; end.
Рассмотрим событие OnShow.
Для того чтобы показать применение события OnShow, рассмотрим пример с использованием компонента PageControl (рисунок 3). OnShow позволяет отображать в заголовке формы текущие номера страниц или их названия при перемещении с одной страницы на другую. В нашем случае, используя свойство Caption для закладок, введите необходимые имена — в заголовке формы будет отображаться название выбранной страницы панели PageControl.
1. Запустите Delphi.
2. Сохраните файл модуля под именем Show_.pas, а файл проекта — под именем Show. dpr.
3. Поместите на форму компонент PageControl со страницы Win32 палитры компонентов. Как вы уже знаете, этот компонент представляет собой набор панелей с закладками. Каждая панель может содержать свой набор интерфейсных элементов и выбирается щелчком по связанной с панелью закладке. После того, как поместите панель на форму, вы не увидите никаких закладок, их необходимо определить.
Делается это так: на выделенном компоненте щелкнуть правой кнопкой мыши и из предложенного списка выбрать команду New Page. Можно видеть, что появилась первая закладка. Поступая таким же образом, вы можете установить необходимое их число, для нашего случая выполним эту процедуру четыре раза. Итак, панель будет содержать четыре элемента.
4. Для каждой активизированной вами закладки, используя свойство Caption, напишите заголовки, например, для первой страницы "Доходы" и т.д.
5. Используя событие OnChange для панели PageControl и событие OnShow для формы, напишите программный код, который приведен ниже:

implementation {$R *.DFM} procedure TForm1.PageControl1 Change(Sender: TObject); begin Caption
:= 'Страница панели с закладками '+ PageControl1. ActivePage.Caption; end; procedure TForm1.FormShow
 (Sender: TObject); begin PageControl1Change(Sender); end; end.
Компонент Edit.
Edit (рисунок 4) представляет собой однострочный редактор текста. С его помощью можно вводить и/или отображать достаточно длинные текстовые строки. Мерцающий указатель текущей позиции, или места вставки текста, является характерной чертой окон редактирования. Он появляется, когда окно редактирования оказывается в фокусе.
Окно редактирования является стандартным управляющим элементом Windows, используемое многими приложениями. В него можно вводить текст, но переходы на новую строку здесь не допускаются. Текст, который не поместился в компонент Edit, будет прокручиваться по горизонтали в его окне.
Возможно управление внешним видом текста внутри окна редактирования, назначая соответствующие значения его свойству Font. Вы можете выбирать размер, цвет и другие атрибуты шрифта всего текста, отдельные символы не поддаются такой обработке.
Цвет фона управляющего элемента задается присваиванием значения свойству Color.
Рассмотрим свойства компонента Edit.
AutoSelect указывает, будет ли выделяться весь текст в момент получения компонентом фокуса ввода. Поместите на форму два компонента Edit. Установите для Edit1 свойство AutoSelect в True, а для Edit2 — в False. Запустите приложение на компиляцию. Используя клавишу табуляции, осуществите переход от компонента Edit1 к компоненту Edit2. Вы видите, что после перехода к однострочному редактору Edit1 весь текст в данном случае "Edit1" выделяется, а для Edit2 курсор устанавливается перед текстом "Edit2" и он не выделяется.
Свойство HideSelection позволяет сохранить выделение текста при потере фокуса ввода компонентом, если его значение установлено в False.
Свойство BorderStyle определяет стиль обрамления компонента. Если установить значение bsNone, то обрамления не будет. Если установить значение bsSingle — компонент обрамляется одной линией.
Свойство CharCase определяет автоматическое преобразование высоты букв внутри компонента Edit. Если установить ecNormal, преобразования не происходит, вы сами определяете заглавные и строчные буквы с помощью клавиатуры обычным порядком. Если установить значение ecUpperCase, все вводимые буквы будут заглавными; если установить ecLowerCase, все вводимые буквы будут строчными. Данное свойство распространяется и на кириллицу.
Свойство MaxLenght определяет максимальную длину текстовой строки в компоненте. Если установлено значение 0, то длина строки не ограничена. Если вы ввели ограничение, то ввод текста сверх установленного приводит к выдаче предупреждающего сигнала, в этом случае не возможен ввод. Если вы заполняете текстом окно редактирования посредством свойства Text, то пределом является максимальная длина паскалевской строки, 255 символов. Работа с более длинными строками возможна с использованием методов GetTextBuf и SetTextBuf.
Свойство OEMConvert, установленное в True, позволяет производить перекодировку текста из кодировки MS-DOS в кодировку Windows и обратно.
Свойство PasswordChar позволяет использовать компонент Edit для ввода паролей. Если вы посмотрите на поле справа от свойства PasswordChar, то увидите, что там помечено #0. Если вы установите #42 или поменяете его на символ звездочка, то вместо вводимых цифр или букв будет вводиться знак (*) звездочка. Таким образом, посторонний человек не может увидеть, вводимые вами значения пароля.

Свойство ReadOnly не позволяет изменять текст, введенный вами на этапе создания приложения, если его значение установлено в True. Таким образом, окно редактирования превращается в управляющий элемент, предназначенный только для чтения.
Свойство AutoSize совместно с BorderStyle = bsSingle позволяет автоматически изменять высоту компонента при изменении свойства Font.Size, если его значение установлено в True. Чем больший шрифт используется в окне редактирования, тем большую высоту имеет управляющий элемент. Если значение AutoSize вы поменяете на False, то окно редактирования сохраняет свой размер вне зависимости от изменений размера связанного с ним шрифта. В этом случае, запуская приложение в системах, сконфигурированных для работы с большими шрифтами, вы будете огорчены, так как текст попросту будет обрезан.
Рассмотрим пример с использованием перечисленных выше свойств.
1. Запустите Delphi.
2. Сохраните файл модуля под именем Tedit_.pas, а файл проекта — под именем Tedit. dpr.
3. Поместите три компонента Edit на форму со страницы Standard палитры компонентов.
4. Для каждого компонента Edit1, Edit2, используя свойство Text, проведите очистку от текста содержимого данных компонентов. Для компонента Edit3 введите текст "Высота компонента".
5. Поместите два компонента Label1 и Label2, разместите их слева от компонентов Edit1 и Edit2. Используя свойство Caption, введите заголовки: для компонента Label1 — "КООРДИНАТА Х", для компонента Label2 — "КООРДИНАТА Y".
6. Запишите программный код, который позволит отображать координаты перемещения мыши по коврику в компоненте Edit1 — координату Х, в компоненте Edit2 — координату Y. Поставим условие: если произойдет превышение значений Х или Y, то изменим свойство Font.Size для текста компонента Edit3. В нашем случае в качестве условия принято превышение координатой Х определенного значения.
7. Используя приложение Tedit, покажем некоторые методы для компонента Edit. Поместите кнопку Button1 на форму со страницы Standard палитры компонентов. Измените заголовок для кнопки, используя свойство Caption, напишите "ОЧИСТКА КОМПОНЕНТА Edit1". Процедура Clear позволяет удалять весь текст из компонента Edit, в данном случае очищается компонент Edit1.
8. Поместите кнопку Button2 на форму. Измените заголовок для кнопки, используя свойство Caption, напишите "УДАЛЕНИЕ ВЫДЕЛЕННОГО ТЕКСТА Edit3". Процедура ClearSelection позволяет удалять выделенный текст из компонента Edit, в нашем примере очищается компонент Edit3.
9. Поместите кнопку Button3 на форму. Измените заголовок для кнопки, используя свойство Caption, напишите "ПОЛУЧЕНИЕ ФОКУСА ВВОДА Edit3". Процедура SetFocus позволяет выделить весь текст в компоненте Edit, в данном случае выделяется текст в компоненте Edit3.
10. Используя метод GetTextBuf и GetTextLen, по щелчку кнопки осуществите запись текста из окна редактора Edit 4 в Edit5. Поместите кнопку Button 4 и для события OnClick, напишите программный код, показанный ниже. Производить копирование текста из окна Edit4 в Edit5 можно, используя следующий оператор:
Edit4.Text: = Edit5.Text;.
11. Используйте метод GetTextLen для отображения размера текста в окне редактора Edit6. По щелчку кнопки Button 5, в нашем примере, текст, который имеется в окне редактора Edit4, отобразится в Edit6.
12. Использование компонента Edit7 и кнопки Button6 позволяет осуществить проверку, введена ли в компонент цифра. В случае ввода буквенных значений выдается информация об ошибке. Ниже показан программный код, использующий вышеперечисленные события. Результат работы программы Tedit показан на рисунке 5.

implementation {$R *.DFM} procedure TForm1.FormMouseMove (Sender: TObject; Shift: TShiftState;
 X, Y: Integer); var P, Q: TPoint; begin P.X:= X; P.Y:= Y; Q:= ClientToScreen(P); Edit1.Color:=clYel
low; Edit2.Color:=clWhite; Edit1.Text:= IntToStr(Q.X) + ' '; Edit2.Text:= IntToStr(Q.Y) + ' '; if X 
> 300 then Edit3.Font.Size:= 24 else Edit3.Font.Size:= 12; end; procedure TForm1.Button1Click (Se
nder: TObject); begin Edit1.Clear; end; procedure TForm1.Button2Click (Sender: TObject); begin Edit3
.ClearSelection; end; procedure TForm1.Button3Click (Sender: TObject); begin Edit3.SetFocus; end; pr
ocedure TForm1.Button4Click (Sender: TObject); var Buffer:Pchar; Size:Byte; begin Size:=Edit4.GetTex
tLen; Inc(Size); GetMem(Buffer,Size); Edit4.GetTextBuf(Buffer,Size); Edit5.Text:=StrPas(Buffer); Fre
eMem(Buffer,Size); end; procedure TForm1.Button5Click (Sender: TObject); var Size:Integer; begin Siz
e:= Edit4.GetTextLen; Edit6.Text:=('В Edit4 '+IntToStr(Size) +'символов'); end; procedure TForm1.But
ton6Click (Sender: TObject); var Number,Code:Integer; begin if Edit7.Text<>''then begin Val(Ed
it7.Text, Number,Code); if Code <>0 then begin Edit7.SetFocus; MessageDlg('Ошибка введена не ц
ифра',mtError,[mbOk],0); end else MessageDlg('Правильно, введена цифра',mtInformation,[mbOk],0); end
; end; end.
Литература:
1. Марко Канту. Delphi 2 для Windows 95/NT. Москва. ООО "Малип". 1997 г.
2. Джон Матчо. Дэвид Р. Фолкнер. Delphi. Москва. БИНОМ. 1995 г.
3. Эндрю Возневич. Delphi. Освой самостоятельно. Москва. Восточная книжная компания. 1996 г.
4. В.В.Фаронов. Delphi 5. Учебный курс. Москва. Издательство Нолидж. 2000 г.
5. А. Я. Архангельский. Программирование в Delphi 5. Москва. ЗАО "Издательство Бином". 2000 г.

Владимир Скуратов


(c) компьютерная газета




Компьютерная газета. Статья была опубликована в номере 18 за 2001 год в рубрике программирование :: delphi

©1997-2024 Компьютерная газета