Шаг2. Взаимодействие органов управления - пример PortDemoControl.
____________________________________


Ниже приводится описание исходного кода более сложного примера 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).


------------------------------------------------------------------------------------------------------------------------------

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.

---------------------------------------------19.04.04-----------------------------------------------------------------------



Скачайте этот пример (исходник 13 kb) - Primer1cod.zip , созданный на основе шаблона.
Шаг3. Пишем FM тюнер

Назад на Шаг1. Поля ввода номера порта и данных


О проекте

Скачать шаблон - Shablon.zip (6 kb)
Скачать исходник PortDemoControl + EXE файл - Primer1.zip (210 kb)

******

Валерий Ковтун US4LEH
..

О сайте

Вернуться на главную страницу
Программа PortControl V3+
Программа PinRegistrator D1+


Гостевая книга
Обратная связь