1 я бы сделал так (вставил бы выход из процедуры - помечено красным):
Код:
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:='Закрыть';
exit;
end; end else
...
2 товарищ DJ PhoeniX правильно сомневается в номере порта, конечно если ваш момед не USB (в этом случае номер порта действительно не 1 или 2 - из-за установки виртуального COM'a)
3 чтобы быть уверенным в отправке/получении информации стоит посмотреть утилитой Руссиновича
PORTMON
4 а где, собственно, настройки порта? может вашему момеду нужны нестандартные (дефолтовые) настройки порта (четность, стоповый бит, количество битов, скорость)
5 можете марку момеда назвать для большей определенности, ну или как-то иначе его идентифицировать - это по крайней мере уберет неясности в точности номера COM'a, да и предварительные настройки порта неплохо бы сделать
вот вам в помощь, как раз синхронный режим работы с портом.