📄 comportunit.pas
字号:
{$apptype console}
unit ComPortUnit;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls, OoMisc, AdPort, ExtCtrls, ADTrmEmu, ComCtrls;
type
TMyListBox = class(TListBox)
procedure TriggerAvail(var Message : TMessage); message APW_TRIGGERAVAIL;
end;
TComPortForm = class(TForm)
ApdComPort1: TApdComPort;
Test: TButton;
LogOps: TRadioGroup;
PageControl1: TPageControl;
TabSheet1: TTabSheet;
AdTerminal1: TAdTerminal;
TabSheet2: TTabSheet;
procedure TestClick(Sender: TObject);
procedure ApdComPort1TriggerAvail(CP: TObject; Count: Word);
procedure LogOpsClick(Sender: TObject);
procedure ApdComPort1TriggerData(CP: TObject; TriggerHandle: Word);
procedure ApdComPort1TriggerTimer(CP: TObject; TriggerHandle: Word);
procedure FormShow(Sender: TObject);
private
{ Private declarations }
ListBox1 : TMyListBox;
TimerHandle : Word;
Data1Handle : Word;
Data2Handle : Word;
Data3Handle : Word;
public
{ Public declarations }
end;
var
ComPortForm: TComPortForm;
implementation
{$R *.DFM}
procedure WriteIt(C : Char);overload;
begin
if Ord(C) > 32 then
begin
Write(C);
ComPortForm.AdTerminal1.WriteChar(C);
end
else begin
Write(format('[%d]', [Ord(C)]));
ComPortForm.AdTerminal1.WriteString(format('[%d]', [Ord(C)]));
end;
end;
procedure WriteIt(s : string);overload;
begin
Write(s);
ComPortForm.AdTerminal1.WriteString(s);
end;
procedure TMyListBox.TriggerAvail(var Message : TMessage);
var
I : Word;
S : String;
begin
S := '';
for I := 1 to Message.wParam do
S := S + ComPortForm.ApdComPort1.GetChar;
Items.Add(S);
end;
procedure TComPortForm.TestClick(Sender: TObject);
begin
TimerHandle := ApdComPort1.AddTimerTrigger;
ApdComPort1.SetTimerTrigger(TimerHandle, 91, True);
Data1Handle := ApdComPort1.AddDataTrigger('TI', True);
Data2handle := ApdComPort1.AddDataTrigger('OK', True);
Data3handle := ApdComPort1.AddDataTrigger('288', True);
{发送字符串到Modem将触发全部的触发器}
ApdComPort1.PutString('ATI'^M);
end;
procedure TComPortForm.ApdComPort1TriggerAvail(CP: TObject; Count: Word);
var
I : Word;
C : Char;
begin
WriteIt(format('OnTriggerAvail event: %d bytes received'#$d#$a,[Count]));
for I := 1 to Count do begin
C := ApdComPort1.GetChar;
WriteIt(C);
end;
WriteIt(#$d#$a);
WriteIt('--------'#$d#$a);
end;
procedure TComPortForm.LogOpsClick(Sender: TObject);
const
InClick : Boolean = False;
begin
if not InClick then
begin
InClick := True;
ApdComPort1.Logging := TTraceLogState(LogOps.ItemIndex);
LogOps.ItemIndex := Ord(ApdComPort1.Logging);
AdTerminal1.SetFocus;
InClick := False;
end;
end;
procedure TComPortForm.ApdComPort1TriggerData(CP: TObject;
TriggerHandle: Word);
begin
WriteIt(format('OnTriggerData 事件: '#$d#$a, [TriggerHandle]));
end;
procedure TComPortForm.ApdComPort1TriggerTimer(CP: TObject;
TriggerHandle: Word);
begin
WriteIt(format('OnTriggerTimer 事件: '#$d#$a, [TriggerHandle]));
end;
procedure TComPortForm.FormShow(Sender: TObject);
begin
ListBox1 := TMyListBox.Create(Self);
ListBox1.Name := 'ListBox1';
ListBox1.Parent := TabSheet2;
ListBox1.Align:=alClient;
ListBox1.Show;
ApdComPort1.Dispatcher.RegisterWndTriggerHandler(ListBox1.Handle);
end;
end.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -