Шаг2. Взаимодействие органов управления - пример 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 тюнер |