Недавно добавленные исходники

•  DeLiKaTeS Tetris (Тетрис)  296

•  TDictionary Custom Sort  3 445

•  Fast Watermark Sources  3 191

•  3D Designer  4 950

•  Sik Screen Capture  3 444

•  Patch Maker  3 647

•  Айболит (remote control)  3 848

•  ListBox Drag & Drop  3 111

•  Доска для игры Реверси  82 588

•  Графические эффекты  4 050

•  Рисование по маске  3 346

•  Перетаскивание изображений  2 719

•  Canvas Drawing  2 869

•  Рисование Луны  2 672

•  Поворот изображения  2 284

•  Рисование стержней  2 217

•  Paint on Shape  1 617

•  Генератор кроссвордов  2 298

•  Головоломка Paletto  1 815

•  Теорема Монжа об окружностях  2 315

•  Пазл Numbrix  1 713

•  Заборы и коммивояжеры  2 089

•  Игра HIP  1 308

•  Игра Go (Го)  1 259

•  Симулятор лифта  1 506

•  Программа укладки плитки  1 252

•  Генератор лабиринта  1 578

•  Проверка числового ввода  1 397

•  HEX View  1 528

•  Физический маятник  1 383

 
скрыть


Delphi FAQ - Часто задаваемые вопросы

| Базы данных | Графика и Игры | Интернет и Сети | Компоненты и Классы | Мультимедиа |
| ОС и Железо | Программа и Интерфейс | Рабочий стол | Синтаксис | Технологии | Файловая система |



Delphi Sources

Работа с последовательными портами 2



Если вам нужно что-то РЕАЛЬНОЕ, то попробуйте это. Можете только добавить проверку на ошибки.

<<Книги>> Serial Communications: A C++ Developer's Guide by Mark Nelson, M&T Books.

Правда, по большей части это про DOS, а Windows посвящена только одна глава. Проверьте это.


unit Comm;
interface

uses
  SysUtils, WinTypes, WinProcs, Messages, Classes, Forms;

type
  TCommEvent = procedure(Sender: TObject; Data: Char) of object;
  TCommErrEvent = procedure(Sender: TObject; Error: Integer) of object;
  TComm = class(TComponent)
  private
    Wnd: HWND;
    DCB: TDCB;
    CommID: Integer;
    Buf: array[0..2048] of char;
    NumChars: Integer;
    FOnCommErr: TCommErrEvent;
    FOnCommRecvd: TCommEvent;
    procedure CommWndProc(var Message: TMessage);
  public
    function Send(data: Char): Boolean;
    function Connect: Boolean;
    constructor Create(AOwner: TComponent); override;
    destructor destroy; override;
  published
    property OnCommErr: TCommErrEvent read FOnCommErr write FOnCommErr;
    property OnCommRecvd: TCommEvent read FOnCommRecvd write FOnCommRecvd;
  end;
procedure Register;
implementation

constructor TComm.Create(AOwner: TComponent);
begin

  inherited Create(AOwner);
  Wnd := AllocateHwnd(CommWndProc);
end;

procedure TComm.CommWndProc(var Message: TMessage);
var

  Error, count: Integer;
  Stat: TComStat;
begin

  if Message.Msg = WM_COMMNOTIFY then
  begin
    Message.Result := 0;
    GetCommEventMask(CommId, $3FFF);
    NumChars := ReadComm(CommID, @Buf, 2048);
    Error := GetCommError(CommId, Stat);
    if Error = 0 then
    begin
      if Assigned(FOnCommRecvd) then
      begin
        for count := 0 to NumChars - 1 do
          FOnCommRecvd(Self, Buf[count]);
      end;
    end
    else
    begin
      if Assigned(FOnCommErr) then
      begin
        FOnCommErr(Self, Error);
      end;
    end;
  end;
end;

function TComm.Send(data: Char): Boolean;
var

  Error: Integer;
begin

  Error := TransmitCommChar(CommId, data);
  if Error < 0 then
    Result := False
  else
    Result := True;
end;

function TComm.Connect: Boolean;
var

  Config: array[0..20] of Char;
begin

  CommId := OpenComm('COM2', 2048, 2048);
  StrCopy(Config, 'com2:96,n,8,1'); {Здесь меняем настройки порта}
  BuildCommDCB(Config, DCB);
  DCB.ID := CommId;
  SetCommState(DCB);
  EnableCommNotification(CommID, Wnd, 1, -1);
  SetCommEventMask(CommId, ev_RXChar);
  Result := True;
end;

destructor TComm.destroy;
begin

  CloseComm(CommID);
  DeallocateHwnd(Wnd);
  inherited destroy;
end;

procedure Register;
begin

  RegisterComponents('Samples', [TComm]);
end;
end.





Похожие по теме исходники

Nstruct (работа с DBF)

Работа с принтером

fwZIP - Работа с ZIP архивами




Copyright © 2004-2024 "Delphi Sources" by BrokenByte Software. Delphi World FAQ

Группа ВКонтакте