
06.02.2011, 12:21
|
 |
Прохожий
|
|
Регистрация: 29.01.2011
Сообщения: 11
Репутация: 10
|
|
COM-порт, модем, Delphi
Всем добрый день. Писала программу, которая обращается к ком-порту с командами ATH0/ATH1, чтобы светодиод, подключенный к модемному разъему, выключался/включался. Цепочка спаяна, проверена на скачанной из интернета программе. Работает. Вывод -- моя программа гг. Подскажите, пожалуйста, что не так, ибо совсем еще новичок.
Код:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
TForm1 = class(TForm)
Label1: TLabel;
Button1: TButton;
Button2: TButton;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
Port:THandle;
TRBuf:PChar;
nToWrite:DWord;
nWrite:DWord;
implementation
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
begin
if button1.Caption='Открыть' then
begin
Port:=CreateFile(
'\\.\COM3',
GENERIC_READ or GENERIC_WRITE,
0,
nil,
OPEN_EXISTING,
FILE_ATTRIBUTE_NORMAL,
0
);
if (port=INVALID_HANDLE_VALUE)
then Application.MessageBox('Не хочет он','Еррор',MB_OK)
else begin
Application.MessageBox('Порт открыт','Опен',MB_OK);
button1.Caption:='Закрыть';
end; end else
if button1.Caption='Закрыть' then
begin
Application.MessageBox('Порт закрыт','Клозе',MB_OK);
CloseHandle (port);
button1.Caption:='Открыть';
end;
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
if button1.Caption='Открыть'
then Application.MessageBox('Порт закрыт, откройте его!','Еррор',MB_OK) else begin
if button2.caption='ATH0' then
begin
TRBuf:=PChar(button2.caption);
nToWrite:=length(TRBuf)+1;
WriteFile(port,TRBuf^,nToWrite,nWrite,nil);
button2.caption:='ATH1';
end else
if button2.caption='ATH1' then
begin
TRBuf:=PChar(button2.caption);
nToWrite:=length(TRBuf)+1;
WriteFile(port,TRBuf^,nToWrite,nWrite,nil);
button2.caption:='ATH0';
end;
end;
end;
end.
|