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

От Delphi 4 к Delphi 5 Палитра компонентов.

Страница INTERNET.

Компоненты этой страницы обеспечивают средства связи программы с глобальной компьютерной сетью Internet (рисунок 1) . Эта сеть позволяет установить соединение между двумя удаленными компьютерами, один из которых (клиент) получает информацию, а другой (сервер) передает ее. Оба компьютера должны следовать протоколу TCP/IP (Transport Control Protocol/Internet Protocol — транспортный управляющий протокол /Internet протокол ), обеспечивающему логическую независимость связи от аппаратных средств компьютеров. Частью Internet являются всемирная паутина Word Wide Web (WWW), использующая межкомпьютерный обмен так называемыми HTML- страницами (Hyper Text Markup Language — язык разметки гипертекста) на основе HTTP- протокола передачи гипертекста. WWW реализует удобные средства для неформального общения мирового сообщества на различные темы. В то же время возможности Internet не ограничиваются только WWW, т.к. по глобальной сети можно передавать электронную почту, разнообразные файлы, устраивать телеконференции и осуществлять телефонные переговоры. Широко распространена в настоящее время Intranet-сеть. В ней используется технология Internet для передачи служебной и деловой информации в рамках одного или нескольких предприятий.

ClientSocket
предназначен для организации клиентского соединения, создает протокол клиента TCP/IP . С помощью этого компонента программа устанавливает связь с TCP/IP сервера.

ServerSocket
осуществляет серверное соединение, создает протокол сервера TCP/IP. С помощью этого компонента программа устанавливает связь с TCP/IP клиента.

WebDispather
представляет собой диспетчер Web. Этот компонент обрабатывает клиентские HTTP- сообщения, имеющие в своем составе требования к выполнению тех или иных действий.

PageProducer
(поставщик страниц) осуществляет передачу клиенту строк HTML- команд, т.е. команд описания шаблонов страниц. Шаблоны включают HTML- команды и HTML- этикетки (теги), которые заменяются по требованию пользователя нужным содержанием, когда происходит событие OnHTMLTag.

QueryTableProducer
(поставщик табличных запросов) используется в Intranet для преобразования SQL- запросов в серию HTML- команд.

DataSetTableProducer
(поставщик табличных наборов данных) используется в Intranet для передачи клиенту табличных наборов данных.

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

NMDayTime
позволяет получать дату и время от Internet/Intranet сервера. Прежде чем вы сможете получить их, вы должны, прежде всего, знать имя сервера, IP- адрес.

NMEcho
посылает контрольный текст в сервер сети Internet, который возвращается обратно. Этот принцип используется чаще всего для испытания целостности сети и проверки скорости передачи информации.

NMFinger
предназначен для получения информации потребителем от сервера сети Internet, использующего протокол "пальца".

NMFTP
использует протокол FTP (File Transport Protocol — транспортный протокол файлов) для передачи файлов по сети Internet .

NMHTPP-
компонент реализует протокол передачи гипертекста.

NMMsg
посылает текстовые сообщения простого кода ASCII через Internet или Intranet, используя TCP/IP протокол.

NMMsgServ
позволяет получить сообщения, посылаемые NMMsg компонентом.

NMNNTP
реализует протокол NNTP ( Network News Transport Protocol — транспортный протокол сетевых новостей).

NMPOP3-
компонент реализует протокол POP (Post Office Protocol — почтовый протокол).

NMUUProcessor
предназначен для кодирования или декодирования файлов при передаче или приеме их через Internet или Intranet сеть.

NMSMTP
реализует протокол SMTP (Simple Mail Transfer Protocol простой протокол передачи почты).

NMStrm
предназначен для организации потоков информации в сервер через сеть Internet или Intranet. Этот компонент используется совместно с компонентом NMStrmServ.

NMStrmServ
предназначен для организации потоков информации в сервер через сеть Internet и Intranet . Этот компонент используется совместно с компонентом NMStrm.

NMTime
предназначен для получения значения времени от сервера через сеть Internet/Intranet.

NMUDP
предназначен для передачи пакетов диаграмм через Internet или Intranet с использованием протокола пользовательских блоков данных ( UDP — User Resources Locator ).

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

NMGeneralServer
используется в качестве базового класса для серверов Internet, которые поддерживают RFC- стандарты.

HTML
представляет собой компонент, с помощью формируется HTML- страница.

NMURL
предназначен для кодирования строк в URL формат для HTTP передачи и декодирования URL данных.

WebBrouser
предоставляет возможности специальной библиотеки SHDOCVW.DLL для создания пользовательского Web- браузера.

Часть вышеперечисленных компонентов в Delphi 5 находится на странице FastNet.

Инспектор объекта.

Страница событий.

Рассмотрим событие OnPaint. Процедура его обработки позволяет осуществлять рисование на компоненте PaintBox. Рассмотрим пример использования события OnPaint.

    1. Запустите Delphi .
    2. Сохраните файл модуля под именем Draw_pas, а файл проекта — под именем Draw dpr.
    3. Поместите на форму компонент PaintBox со страницы System палитры компонентов, Delphi автоматически присвоит ему имя PaintBox1 .
    4. Используя страницу свойств инспектора объекта, для выделенного компонента PaintBox1 в свойстве Align выберите значение alTop из предложенного списка. Некоторые значения программного кода, показанного ниже, можно задать, используя страницу свойств инспектора объекта.
    5. Выберите страницу Events инспектора объекта для компонента PaintBox1 . В пустом окне справа от события OnPaint проведите двойной щелчок левой кнопкой мыши. В окне появится текст процедуры обработки события, откроется окно Редактора кода с мерцающим курсором между служебными словами begin и end. Введите программный код:
implementation
{$R *.DFM}
procedure TForm1.PaintBox1Paint(Sender: TObject);
var
x,y:Integer;
begin
with PaintBox1, Canvas do
begin
Brush.Color:=clRed;
Ellipse(0,0,Width,Height);
Font.Name:='Courier';
Font.Size:=Height div 4;
Font. Style:= [fsBold,fsItalic];
Font.Color:= clWhite;
X:= (Width-TextWidth('Delphi — мой помощник')) div 2;
Y:=(Height-TextHeight('D')) div 2;
TextOut(X,Y,'Delphi — мой помощник');
end;
end;
end.

Результат работы программы показан на рисунке 2.

Следующий программный код для события OnPaint позволяет загружать в приложение и отображать картинку с расширением . bmp на форме. Ниже приведен полный листинг программы, обратите внимание на раздел private.

unit Unit1;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs;
type
TForm1 = class(TForm)
procedure FormPaint(Sender: TObject);
procedure FormCreate(Sender: TObject);
private
TheGraphic:TBitmap;
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.DFM}
procedure TForm1.FormPaint(Sender: TObject);
begin
Form1.Canvas.Draw(0,0,TheGraphic);
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
TheGraphic:=TBitmap.Create;
{описание пути поиска и внедрения картинки}
TheGraphic.LoadFromFile('C:\My Doc\SKURATOW\Hand.BMP');
end;
end.

Событие OnExit наступает в момент потери фокуса компонентом при переключении на другой компонент. Это событие не наступает при переключениях между формами или между приложениями.

Значение свойства ActiveControl изменяется прежде, чем происходит событие OnExit.

Допустим, компоненты расположены на компоненте-контейнере. При переключениях между элементами, расположенными в разных контейнерах, например, на разных панелях, событие OnExit сначала наступает для элемента, а потом — для содержащего его контейнера. Это противоположно последовательности наступления события OnEnter, которое наступает в момент получения элементом фокуса и происходит при переключениях между формами или между разными приложениями.

При переключениях между компонентами, расположенными на разных контейнерах, таких, как, например, Panel и GroupBox, событие OnEnter происходит вначале для контейнера, а затем для компонента, находящегося на контейнере.

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

Рассмотрим пример использования скрытого события OnEnter при переключении с кнопки на компонент RadioButton1, находящегося на контейнере GroupBox1.

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

Как вам известно, среднее геометрическое всегда меньше среднего арифметического, кроме того случая, когда все взятые числа равны. Тогда среднее геометрическое равно среднему арифметическому.

В Object Pascal не предусмотрена операция возведения вещественного числа в произвольную степень. Поэтому для вычисления среднего геометрического используем стандартные математические функции Exp, Ln по следующему алгоритму:


X Y = e (Y*Ln(X)) .

  1. Запустите Delphi.
  2. Поместите на форму компонент Button и компонент GroupBox. На GroupBox1 поместите компонент RadioButton, три компонента Edit для вывода результатов расчета, три компонента Label (рисунок 3) .
  3. Поместите на форму три компонента Edit для ввода чисел и три компонента Label для определения заголовков над компонентами Edit.
  4. Для кнопки Button1 используйте событие OnExit, для компонента GroupBox1 и RadioButton1 примените событие OnEnter.
  5. Ниже по тексту приведен программный код приложения:
implementation
{$R *.DFM}
var
A,B,C,ASR,D,GSR,Rasn:Real;
procedure TForm1.Button1Exit(Sender: TObject);
begin
{расчет среднего арифметического}
A:= StrToFloat(Edit1.Text);
B:= StrToFloat(Edit2.Text);
C:= StrToFloat(Edit3.Text);
ASR:= (A + B + C)/ 3;
Edit4.Text:=FloatToStr(ASR);
end;
procedure TForm1.GroupBox1Enter(Sender: TObject);
begin
{расчет среднего геометрического}
A:= StrToFloat(Edit1.Text);
B:= StrToFloat(Edit2.Text);
C:= StrToFloat(Edit3.Text);
D:=1/3;
GSR:=Exp(D*Ln(A*B*C));
Edit5.Text:=FloatToStr(GSR);
end;
procedure TForm1.RadioButton1Enter(Sender: TObject);
begin
{расчет разности среднего арифметического и среднего геометрического}
ASR:= StrToFloat(Edit4.Text);
GSR:= StrToFloat(Edit5.Text);
Rasn:=ASR — GSR;
Edit6.Text:=FloatToStr(Rasn);
end;
end.

Компонент Label.

Этот компонент предназначен для размещения на форме различного рода текстовых надписей. Label используется для идентификации других компонентов в вашем приложении. Чаще всего компонент располагается возле таких объектов, как Edit, Memo, CheckBox и других. Label помогает ориентировке в приложении, предоставляет пользователю информацию не только о названии, но и описывает действия, проводимые в приложении.

Рассмотрим свойства компонента Label.

WordWrap
и AutoSize со страницы свойств инспектора объекта полезны при настройке компонента Label. Установите свойство WordWrap в True — и Delphi будет автоматически переносить строки в компоненте. Свойство AutoSize, установленное в значение True по умолчанию, позволяет изменять размеры компонента в соответствии с размером текста и высотой шрифта. Если AutoSize установлено в False, то необходимо устанавливать размер компонента, в который вводится текст, вручную, в соответствии с размером текста.

Свойство ShowAccelChar позволяет помещать символ акселератора в компонент Label, через свойство Caption, т.е. символ, перед которым стоит знак амперсанта &. В этом случае в компоненте появится подчеркнутый символ, например R . Если установлено значения True для свойства ShowAccelChar, то акселератор выделяется в строке подчеркиванием, и одновременное нажатие клавиш Alt + R приводит к передаче фокуса окну, контролирующему фокус. Теперь можете определить в свойстве FocusControl компонент, на который будет посылаться сообщение о вводе акселератора. Тогда, в работающем приложении, нажав клавиши Alt + R, вы передадите фокус на выбранный компонент.

Свойство Transparent определяет фон компонента Label. Если установлено значение False, то можно изменять цвет фона компонента, задавая различные цвета в свойстве Color. Если значение Transparent равно True, используется фон родительского компонента.

Свойство Alignment устанавливает правило выравнивания текста по горизонтали внутри клиентской области — по правому, левому краю или по центру клиентской области.

Свойство Layout определяет выравнивание текста по вертикали относительно границ:

TlTop — текст располагается вверху, tlCenter — текст центрируется по вертикали, tlBottom — текст располагается внизу.

Рассмотрим примеры использования компонента Label в приложениях.

Пример LABELXY (рисунок 4) . В нем изменение положения мыши приводит к непрерывному изменению значений координат X, Y отображаемых в Label . В данном примере используются два компонента Label1, Label2 для отображения положения текущих координат точки мыши на форме. Необходимость в этом может возникнуть, когда вам надо будет производить рисование на форме или проводить расчеты по размещению графических изображений. Выберите для формы на странице Events инспектора объекта событие OnMouseMove, проведите двойной щелчок левой кнопкой мыши на белом поле справа от надписи. В Редакторе кода запишите программный код:

implementation
{$R *.DFM}
procedure TForm1.FormMouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
begin
Label1. Caption:= 'КООРДИНАТА Х ='+IntToStr(X);
Label2. Caption:= 'КООРДИНАТА Y ='+IntToStr(Y);
end;
end.

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

Компонент Label можно использовать для выдачи в них информации при вводе текста в компонент Edit . Напишите следующий программный код для событий OnEnter, OnExit текстовых редакторов . Информация о ваших действиях с компонентами Edit выдается в компонент Label.

implementation
{$R *.DFM}
procedure TForm1.Edit1Enter(Sender: TObject);
begin
Label1.Caption:='Введите значения даты в Edit1';
end;
procedure TForm1.Edit1Exit(Sender: TObject);
begin
Label2.Caption:='Перейдите к вводу значения времени в Edit2';
end;
end.

Результат работы программы показан на рисунке 5.

Следующий пример позволяет производить редактирование текстовой информации в компоненте Label. Для работы программы необходимо поместить на форму со страницы Dialog не визуальные компоненты ColorDialog и FontDialog . Результат работы программы показан на рисунке 6.

procedure TForm1.Button1Click(Sender: TObject);
begin
ColorDialog1.Color:= Label1.Font.Color;
ColorDialog1.Execute;
Label1.Font.Color:= ColorDialog1.Color;
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
Label1.Alignment:= taLeftJustify;
end;
procedure TForm1.Button3Click(Sender: TObject);
begin
Label1.Alignment:= taCenter;
end;
procedure TForm1.Button4Click(Sender: TObject);
begin
Label1.Alignment:= taRightJustify;
end;
procedure TForm1.Button5Click(Sender: TObject);
begin
ColorDialog1.Color:= Label1.Color;
ColorDialog1.Execute;
Label1.Color:= ColorDialog1.Color;
end;
procedure TForm1.Button6Click(Sender: TObject);
begin
FontDialog1.Font:=Label1.Font;
FontDialog1.Execute;
Label1.Font:=FontDialog1.Font;
end;
end.

Литература:

    1. Марко Канту. Delphi 2 для Windows 95/NT. Москва. ООО "Малип". 1997г.
    2. Джон Матчо. Дэвид Р. Фолкнер. Delphi. Москва. БИНОМ. 1995г.
    3. Эндрю Возневич. Delphi. Освой самостоятельно. Москва. Восточная книжная компания. 1996г.
    4. В.В.Фаронов. Delphi 5. Учебный курс. Москва. Издательство Нолидж. 2000 г.
    5. А. Я. Архангельский. Программирование в Delphi 5. Москва. ЗАО "Издательство Бином". 2000 г.
Владимир Скуратов

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




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

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