bannerbannerbanner
полная версияПрограммирование на Delphi 7

Сергей Николаевич Талипов
Программирование на Delphi 7

ЛЕКЦИЯ № 7


1. КОМПОНЕНТЫ СТРАНИЦЫ «WIN32»

1) RichEdit – аналог компонента «MEMO» с возможностью отображения текста с несколькими разными шрифтами и поиском фрагмента текста

2) TrackBar – ползунок "научного" вида для отображения числовых данных

 Frequency – шаг проставления меток шкалы на компоненте

 Мах – максимальное значение

 Min – минимальное значение

Position – текущее значение

Orientation – вид расположения на экране (вертикальный, горизонтальный)

3) ProgressBar – компонент для отображения процессинга

Мах – максимальное значение

Min – минимальное значение

Position – текущее значение

Orientation – вид расположения на экране (вертикальный, горизонтальный)

Smooth- если «False», то шкала закраски дискретная, иначе – сплошная заливка

4) Animate – компонент для отображения видео файлов “AVI” – формата

Active – включение движения в анимации

CommonAVI – выбор одной из стандартных анимаций (анимация поиска файла, копирования и др.)

FileName – указание имени файла анимации (используется для внешних анимаций, для стандартных анимаций свойство не используется)

Repetitions – количество повторов показа анимации (если «О» – то показ пока «Active – True»)

5) DateTimePicker – компонент-календарь для ввода и отображения дат

DateFormat – вид даты в компоненте (вид месяца: прописью или числом)

Kind – вид календаря (для отображения даты или времени)

Time – выбранное время

Date – выбранная дата

DateTime – выбранная дата с временем

MaxDate – максимальное значение даты для выбора и отображения

MinDate -минимальное значение деты для выбора и отображения

6) PageControl – компонент для создания в них вложенных страниц (вкладок-панелей)

ActivePageIndex – номер активной (видимой) вкладки (отсчет с нуля)

PageCount – количество созданных вкладок в компоненте (отсчет с единицы)

OnChanging – событие возникает перед изменением текущей вкладки компонента

OnShow – событие возникает при выборе вкладки компонента

OnHide – событие возникает после смены выбора вкладки

2. КОМПОНЕНТЫ СТРАНИЦЫ «SYSTEM»

1) Timer – таймер, для вызова какой-либо процедуры через заданный промежуток времени

Enabled – включение/выключение таймера

Interval – время в миллисекундах, через которое будет вызываться событие «OnTimer»

 OnTimer – событие, которое вызывается таймером каждый раз через время «Interval»

2) MediaPlayer – компонент для воспроизведения видео и звуковых файлов

FileName – указание имени видео или звукового файла

DeviceType – вид проигрываемого файла (видео, аудио)

Display – указывается компонент, на котором будет выводиться видео

Open – метод открытая устройства отображения видео или аудио (вызывается перед «PLAY»)

Play – метод запуска видео или аудио (вызывается после «OPEN»)

Stop- метод остановки видео или аудио (вызывается после «PLAY»)

3. КОМПОНЕНТЫ СТРАНИЦЫ «SAMPLES»

Gauge – компонент для отображения числовой величины в рисунке с процентами

Мах – максимальное значение

Min – минимальное значение

Progress – текущее значение

Kind – вид диаграммы (круговая диаграмма, вертикальный столбик, горизонтальный столбик и др.)

BackColor – цвет не закрашенной части компонента

ForeColor – цвет закрашенной части

ShowText – если "TRUE", то текстовое значение в процентах будет отображаться в компоненте, иначе нет

SpinEdit – аналог компонента «EDIT» для ввода цифр с возможность инкремента/декремента величины

MaxValue – максимальное значение

MinValue – минимальное значение

MaxLength – максимальное количество цифр (длина строки)

Increment – шаг наращивания величины

Value – текущее значение

ЛЕКЦИЯ № 8

1. РАБОТА С ГРАФИКОЙ В DELPHI

Рассмотрим задачу, когда нужно на форме программно создать изображение, показанное на рис.1. Для этого необходимо на форму поместить компонент «PaintBox1» из вкладки «System» и написать для него процедуру на событие «OnPaint» (событие программной прорисовки компонента).

Рис. 1.

procedure TForm1.PaintBox1Paint(Sender: TObject);

begin

with PaintBox1.Canvas do begin // Работа с канвой компонента «PaintBox1»

  Pen.Style := psSolid; // Тип линии: сплошная линия(psDash: пунктирная линия)

  Pen.Width := 4; // Ширина линии (точки)

  Pen.Color := clRed; // Цвет линии

   Brush.Color := clBlue; // Цвет закраски

   Brush.Style := bsSolid; // Стиль закраски "сеткой" (bsDiagCross: "сеткой")

   Ellipse(0, 0, PaintBox1.Width, PaintBox1.Height); // Закрашенный элипс

  // Закрашенный четырехугольник

  // Цвет линии задается в "Pen.Color", цвет заливки задается в "Brush.Color",

  Rectangle(25,25,140,140);

  FrameRect(rect(10,10,20,20)); // Не закрашенный четырехугольник, цвет задается в "Brush.Color"

  Pixels[0,0]:=clAqua; // Рисование точки

  MoveTo(1,1); // Перемещение на нужную точку

  LineTo(PaintBox1.Width,PaintBox1.Height); // Рисование линии

  // Вывод текста

  Font.Color:=clLime; // Цвет шрифта

  Font.Size := 20; // Размер шрифта

  Font.Style := [] + [fsBold]; // Стиль шрифта

  Brush.Style := bsClear; // Прозрачный фон текста

  TextOut(50,40,'Hi!'); // Вывод текста

   Brush.Color := clAqua; // Укажем цвет закраски

   // Закраска области (x,y, цвет который стирать)

   FloodFill(50,70, Pixels[50,70], fsSurface);

end;

end;

2. СОЗДАНИЕ ИНТЕРАКТИВНОГО ГРАФИЧЕСКОГО ИНТЕРФЕЙСА НА БАЗЕ КОМПОНЕНТА «STRINGGRID»

Установки «StringGrid1»:

    ColCount = 60; RowCount = 50; DefaultColWidth = 5; DefaultRowHeight = 5

    FixedCols = 0; FixedRows = 0; Options -> goRangSelection -> False

unit Unit1;

interface

. . . . . . .

var Form1: TForm1;

const

  fp_down=tobject(1); fp_up=tobject(0); fp_color=clred;

  x_min=0; x_max=10; y_min=-1; y_max=1; step=0.1;

implementation

{$R *.dfm}

function TForm1.GetColFromX(x_min, x_max, x: real; col_count: integer): integer;

{ Вычисление номера колонки по координате X }

var c: integer;

begin

  try c:=col_count-round((x-x_min)*(col_count-1)/(x_max-x_min)+1);

  except c:=0; end;

  if c<0 then c:=0; if c>col_count then c:=col_count;

  GetColFromX:=c;

end;

function TForm1.GetRowFromY(y_min, y_max, y: real; row_count: integer): integer;

{ Вычисление номера строки по координате Y }

var r: integer;

begin

  try r:=row_count-round((y-y_min)*(row_count-1)/(y_max-y_min)+1);

  except r:=0; end;

  if r<0 then r:=0; if r>row_count then r:=row_count;

  GetRowFromY:=r;

end;

procedure TForm1.Button1Click(Sender: TObject);

{ Очистка ячеек }

var i,j: integer;

begin

  with StringGrid1 do begin

    for i:=0 to colcount-1 do for j:=0 to rowcount-1 do begin

        Objects[i,j]:=fp_up;

      end;

  end;

end;

procedure TForm1.Button2Click(Sender: TObject);

{ Построение синусоиды }

var c,r: integer; x: real;

begin

  button1.Click;

  with StringGrid1 do begin x:=0;

    while x<=10 do begin try

      c:=GetColFromX(x_min, x_max, x, stringgrid1.colcount);

      r:=GetRowFromY(y_min, y_max, sin(x), stringgrid1.rowcount);

      except r:=0; end;

      Objects[c,r]:=fp_down;

      x:=x+step;

      end;

  end;

end;

procedure TForm1.StringGrid1MouseDown(Sender: TObject;

  Button: TMouseButton; Shift: TShiftState; X, Y: Integer);

{ Нанесение/стирание кружка }

var C, R: Longint; t: TRect;

begin

  with StringGrid1 do begin

    MouseToCell(X, Y, C, R);

    if Objects[c,r]=fp_down then Objects[c,r]:=fp_up else Objects[c,r]:=fp_down;

  end;

end;

procedure TForm1.StringGrid1DrawCell(Sender: TObject; ACol, ARow: Integer;

  Rect: TRect; State: TGridDrawState);

{ Механизм ручной прорисовки ячеек StringGrid }

var t: TRect;

begin

  with StringGrid1 do begin

     t:=StringGrid1.CellRect(ACol, ARow);

    if Objects[ACol, ARow]<>fp_down then begin

      canvas.Pen.Color:=clWhite; canvas.Rectangle(t);

    end else begin

      canvas.Brush.Color:=fp_color; canvas.Pen.Color:=fp_color;

      canvas.Ellipse(t);

 

    end;

  end;

end;

procedure TForm1.FormCreate(Sender: TObject);

{ Инициализация программы }

begin

  label1.Caption:=formatfloat('##0.00',y_max); label2.Caption:=formatfloat('##0.00',y_min);

  label3.Caption:=formatfloat('##0.00',x_min); label4.Caption:=formatfloat('##0.00',x_max);

end;

procedure TForm1.Button3Click(Sender: TObject);

{ Выход из программы }

begin

  close;

end;

end.

3. РАБОТА С «TCHART»

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

Рассмотрим на простейшем примере работу с компонентом «TChart». Поместите компонент на форму, щелкните по нему мышью двойным щелчком. В появившемся меню выберите вкладку «Series» и нажмите на ней кнопку «Add» дважды, чтобы создать две пустые серии. При нажатии на кнопку «Add» нужно будет указать вид графика для создаваемой серии (линейный, круговой и т.д.). Все остальные настройки будут производиться программным путем. Cодержимое процедур-обработчиков программы приведено ниже.

procedure TForm1.Button1Click(Sender: TObject);

{ Загрузить серию 1 из мемо – компонента }

var n: integer;

begin

  for n:=0 to memo1.lines.count-1 do

      { Добавляем в первую серию число с наклейкой к нему и данным цветом }

      Chart1.series[0].add(strtofloat(memo1.lines[n]), inttostr(n),clBlue);

end;

procedure TForm1.Button2Click(Sender: TObject);

{ Загрузить синусоиду в серию 2 }

var n: integer;

begin

  for n:=0 to 10 do Chart1.series[1].add(sin(n),inttostr(n)+’!’,clRed);

end;

procedure TForm1.Button3Click(Sender: TObject);

{ Очистка графиков (серий) }

begin

  Chart1.series[0].clear; Chart1.series[1].clear;

end;

procedure TForm1.Chart1ClickSeries(Sender: TCustomChart; Series: TChartSeries;

                 ValueIndex: Integer; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);

{ Щелчок мыши по серии }

begin

  ShowMessage(' Выбрали серию: '+Series.Title+'; точку N: '+

     inttostr(valueindex+1)+' со значением Y= '+floattostr(Series.YValues.Value[valueindex]));

end;

procedure TForm1.FormActivate(Sender: TObject);

{ Настройка компонента }

begin

  Chart1.title.text.clear; Chart1.title.text.add('Пример'); Chart1.title.text.add('двух графиков');

  Chart1.series[0].title:='Серия-1'; Chart1.series[1].title:='Серия-2';

  Chart1.series[0].SeriesColor:=clBlue; Chart1.series[1].SeriesColor:=clRed;

  Chart1.cursor:=crCross; { Вид курсора над графиками в виде прицела }

end;

procedure TForm1.Chart1MouseMove(Sender: TObject; Shift: TShiftState; X,Y: Integer);

{ Перемещение мыши над графиком }

begin

  StatusBar1.Panels[0].Text := 'x='+floattostr(x)+ ' y='+floattostr(y);

  StatusBar1.Panels[1].Text := 'x='+floattostr( chart1.series[0].XScreenToValue(x))+

    ' y='+floattostr(chart1.series[0].YScreenToValue(y));

end;

Данный компонент имеет очень много возможностей и настроек, которые можно узнать из справочной системы «Delphi».

Рейтинг@Mail.ru