Программа управления LPT портом под Windows на Delphi.
Шелепов М.И.
На основе приобретенного опыта в Delphi решил добавить статью по управлению LPT
портом под Windows 2000, XP на языке Delphi. Что будем делать? Да ничего
особенного - поуправляем регистрами порта LPT из программы на Delphi с помощью
библиотеки inpout32.dll.
Готовый прект можно скачать сдесь (среда:
Borland Delphi 7.0).
А теперь рассмотрим как это приложение сделать. Итак, запускаем Borland Delphi
7.0. Перед нами должна сразу появиться рабочая среда и заготовка формы будущего
приложения.
Давайте прикинем, каким будет наше приложение. Наверное, нам хотелось бы иметь
возможность указать адрес порта с которым будем работать, значение которое мы
захотим туда (в порт) записать и две кнопки: одна предназначена для записи
данных в порт, другая для чтения. Сказано - сделано. С верхней панели
перетаскиваем на форму нужное колличество edit-окошек, статических текстов и
кнопок. При выделении нужного элемента на форме справа в окне Object Inspector
можно задавать различные свойства для элемента. В итоге сформируйте форму так
как на рис. ниже.
Теперь возмемся собственно за программирование. Для начала нам нужно как-то
подсоединить inpout32.dll к нашему проекту. Для этого в Delphi есть несколько
вариантов, но остановися на следующем: в папку где расположен проект программы
помещаем только библиотеку inpout32.dll (lib и h файлы, как это делали ранеше,
здесь уже не нужны). Далее в заголовке программы в секции uses помещаем
прототипы функций Out32 и Inp32 со специальной директивой компилятора external,
говорящей откуда нужно эти функции брать.
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
function Inp32(PortAdr: word): byte; stdcall; external 'inpout32.dll';
function Out32(PortAdr: word; Data: byte): byte; stdcall; external
'inpout32.dll';
Ok. Теперь создадим обработчики на нажатие кнопок. Для этого дважды щелкаем на
кнопке в редакторе формы. Нас автоматом переносит к коду функции-обработчика.
Рассмотрим сначала функцию для записи данных в порт. Тут особенно сложно ни
чего нет. В переменные Port и Data помещаем данные из соответствующмх окошек
ввода предварительно преобразовав их из текста в целое число. Затем вызываем
функцию Out32() с этими параметрами.
procedure TForm1.Button1Click(Sender: TObject);
var
Port: word;
Data: Byte;
begin
Data:= StrToInt(Edit1.Text);
Port:= StrToInt(Edit2.Text);
Out32(Port, Data);
end;
Аналогично делаем для кнопки для чтения данных. Из нужного edit-окошка
считываем введенное там значение адреса порта откуда будет проводится чтение,
преобразуем его в число. Вызываем функцию Inp32() с этим параметром. Заитем
выводим окно сообщения с результатом чтения.
procedure TForm1.Button2Click(Sender: TObject);
var
Port: word;
Data: Byte;
begin
Port:= StrToInt(Edit3.Text);
Data:= Inp32(Port);
MessageDlg('Value: '+ IntToStr(Data), mtInformation, [mbOK], 0);
end;
Компилируем, запускаем (можно одной кнопкой в виде зеленой стрелки на верхней
панели). Протестируем приложение. Попробуем записать в регистр DATA LPT потра
число 0. Для этого в качестве адреса указываем 888 (или $378, что одно и тоже),
в качестве данных - 0. Нажимаем на соответствующию кнопку. Должно быть все Ok
(наблюдаем это на LPT-тестере). Аналогично проводим чтение.
На последок, хотел бы поделиться некоторыми наблюдениями относительно Borland
Delphi и Microsoft Visual Studio 8.0 (которая .NET) с ее языком
программирования C#. Не наблюдаете сходства? Я вот заметил: такое понятие как
Object Inspector Microsoft откровенно позаимствовала у Borlanda. И особенно
поразило сходство построения скелета C#приложения, т.е. что-то типа
Application.Run() и Application.CreateForm() - полное "совпадение".