Шаг2. Взаимодействие органов управления – пример PortDemoControl.
Ниже приводится описание исходного кода более сложного примера PortDemoControl демонстрирующего взаимосвясь органов управления в программе.
Расположите на форме необходимые инструменты (кнопки, поля ввода данных, комбобокс выбора порта, радиокнопки и чекбоксы, движок SpinEdit, индикатор прогресса).
Между собой взаимодействуют следующие органы управления:
Button1: TButton;
Button2: TButton;
Button3: TButton;
Edit1: TEdit;
StaticText1: TStaticText;
Button4: TButton;
Timer1: TTimer;
RadioButton1: TRadioButton;
RadioButton2: TRadioButton;
Button5: TButton;
Edit3: TEdit;
Edit4: TEdit;
Edit2: TEdit;
ComboBox1: TComboBox;
SpinEdit1: TSpinEdit;
Edit5: TEdit;
TrackBar1: TTrackBar;
Timer2: TTimer;
CheckBox1: TCheckBox;
RadioButton3: TRadioButton;
RadioButton4: TRadioButton;
CheckBox2: TCheckBox;
Gauge1: TGauge;
Программа позволяет читать значения с выбранного порта, вводить значения (данные) на запись , устанавливать порт записи и чтения одновременно, читать вручную с помощью кнопки и автоматически, запись в порт вручную и автоматически, автоматическую запись в выбранный порт последовательных значений 1..256 – как на увеличение (+), так и на уменьшение (-), а также демонстрирует блокировку кнопки “Выход” когда Pin 2 порта 888 не равен 5в (число 1).
[pas]procedure TForm1.Button1Click(Sender: TObject);begin
PortWriteByte (888,1); //–простая запись в порт
end;
procedure TForm1.Button2Click(Sender: TObject); //–чтение с назначеного порта
Var
pa : integer; //–порт адресс
b : byte; //–данные, тип байт
pin2 : Boolean; //–true/false
begin
if(Edit2.Text <> ”) then //–если поле ввода порта не пустое
begin
pa:= StrToInt(Edit2.Text); //–преобразуем строку в числа
b :=( PortReadByte(pa) ) ; //–читаем данные с порта
Edit1.text := IntToStr(b); //–преобразуем в строковое значение и выводим
if b = 1 then pin2 := true else pin2 := false ; //–если в порту число 1
if pin2 = true then StaticText1.Color := clred else //–тогда красный колор
StaticText1.Color := clBtnFace; //–если нет тогда серый
Button4.Enabled := pin2; //–1 кнопка доступна (true), не 1 – недоступна (false)
end else
ShowMessage (‘Введите адрес порта’); //–сообщение
end;
procedure TForm1.Button3Click(Sender: TObject);
begin
PortWriteByte ($378,$0 ); //–простая запись 0 в HEX тоже что (888,0)
end;
procedure TForm1.Button4Click(Sender: TObject); //–кнопка выхода
begin
close;
end;
procedure TForm1.Button5Click(Sender: TObject); //–запись значений выбр. порта
Var
b : byte; //–данные
pa : integer; //–порт адресс
begin
if (Edit3.Text <> ”) and //–если не нет ничего
(Edit4.Text <> ”) then // –тоже
begin
pa := StrToInt(Edit3.Text); //–преобразуем строку в число адреса порта
b := StrToInt(Edit4.Text); //–преобразуем строку в байты данных
PortWriteByte((pa),(b)); //–пишем в порт (адрес), (данные)
end else
ShowMessage (‘Введите данные’);
end;
procedure TForm1.Timer1Timer(Sender: TObject);
begin
Button2.Click ; //–простой пример автоматического чтения с пом. таймера
end;
procedure TForm1.RadioButton2Click(Sender: TObject);
begin
Timer1.Enabled := true ; //–включить таймер чтения
end;
procedure TForm1.RadioButton1Click(Sender: TObject);
begin
Timer1.Enabled := false; //–ручное (отключить таймер)
end;
procedure TForm1.ComboBox1Click(Sender: TObject);
begin
Edit2.Text := ComboBox1.Text; //– установить выбраный адрес порта
Edit3.Text := ComboBox1.Text;
end;
procedure TForm1.SpinEdit1Change(Sender: TObject);
begin
Edit4.Text := IntToStr(SpinEdit1.Value); //–показывать интервал
end;
procedure TForm1.Timer2Timer(Sender: TObject); //– +/-
begin
if Edit4.Text <= ‘0’ then exit else //–останавливается когда 0
begin
if RadioButton3.Checked = true then //–если стоит галочка тогда
Edit4.Text := IntToStr(StrToInt(Edit4.Text)+1)else //–прибавить к числу 1
Edit4.Text := IntToStr(StrToInt(Edit4.Text)-1); //–иначе отнять 1
end;
if CheckBox2.Checked = true then //–включает автозапись в порт
Button5.Click;
end;
procedure TForm1.CheckBox1Click(Sender: TObject); //–автоперебор
begin
if CheckBox1.Checked = true then //–если галочка тогда включить
begin
Timer2.Enabled := true ; //–вкл таймер
CheckBox2.Enabled := true; //– разрешить включать автозапись
end
else begin
Timer2.Enabled := false; //–откл таймер
CheckBox2.Enabled := false; //– запретить автозапись вкл/откл
end;
end;
procedure TForm1.TrackBar1Change(Sender: TObject); //–плавный движок
begin
Timer2.Interval := TrackBar1.Position *10; //– интервал = положению движка *10
Edit5.Text := IntToStr( Timer2.Interval ); //–показуем интервал
end;
procedure TForm1.Edit4Change(Sender: TObject);
begin
if Edit4.Text = ‘256’ then Edit4.Text := ‘1’; //–ограничитель 1..256
end;
procedure TForm1.FormActivate(Sender: TObject);
begin
Application.HintColor := clYellow; //–цвет hint
end;
procedure TForm1.Edit1Change(Sender: TObject); //–на изменение читаемых значений
Var
pr : integer; //–прогресс
begin
pr := StrToInt(Edit1.Text); //–преобразуем чит. значения в число
Gauge1.Progress := pr; //–выводим на индикатор прогресса
end;
end[/pas]
Скачайте этот пример (исходник 13 kb) – Primer1cod.zip , созданный на основе шаблона.
Шаг3. Пишем FM тюнер