IPB
ЛогинПароль:

> ВНИМАНИЕ!

Прежде чем задать вопрос, смотрите FAQ.
Рекомендуем загрузить DRKB.

Наладить общение поможет, если вы подпишитесь по почте на новые темы в этом форуме.

 
 Ответить  Открыть новую тему 
> Чат через Com порт C испольованием Api, Чат через COM порт c испольованием API
сообщение
Сообщение #1


Гость






Помогите найти ошибку=( запарился уже.... blink.gif
unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ExtCtrls;

type
TForm1 = class(TForm)
Memo1: TMemo;
Button1: TButton;
Button2: TButton;
Label2: TLabel;
Edit1: TEdit;
ComboBox1: TComboBox;
Button3: TButton;
procedure FormClose(Sender: TObject; var Action: TCloseAction);
procedure FormCreate(Sender: TObject);
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure Button3Click(Sender: TObject);
private
HPrt, HThread: THandle;
DCB: TDCB;
ChRead, ChWrite: DWord;
// MaxMes: DWord;
id: Cardinal;
bInit: Boolean;
// procedure ReadMes;
procedure ThTerminate;
function ThCreate: Boolean;

{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;
today : TDateTime;
implementation

{$R *.dfm}

function ReadMes:word;
var InBuf: char;
mess: string;
begin
today := Now;
mess := '';
with form1 do
begin
while true do
begin
if not bInit then continue;
ReadFile(HPrt,InBuf,1,ChRead,nil);
if form1.ChRead = 1 then
repeat
mess := mess + InBuf;
until InBuf<>'#';
mess := 'Собеседник (' + TimeToStr(today) + ') - ' + mess;
Memo1.Lines.Add(mess);
end;
end;
end;

function TForm1.ThCreate: Boolean;
begin
Result := true;
HThread:= CreateThread(nil,0,@ReadMes,nil,0,id);
if HThread = INVALID_HANDLE_VALUE then
begin
ShowMessage('Ошибка нити');
Result := false;
end;
end;

procedure TForm1.ThTerminate;
begin
if HThread <> INVALID_HANDLE_VALUE then
begin
TerminateThread(HThread, 0);
CloseHandle(HThread);
HThread := INVALID_HANDLE_VALUE;
end;
end;

procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
ThTerminate;
if bInit then
CloseHandle(HPrt);
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
bInit := false;
ThCreate;
end;

procedure TForm1.Button3Click(Sender: TObject);
begin
HPrt:= CreateFile(PChar(ComboBox1.Items[ComboBox1.ItemIndex]),GENERIC_READ or GENERIC_WRITE,0,nil,OPEN_EXISTING,0,0);
DCB.DCBlength:= sizeof(TDCB);
GetCommState(HPrt,DCB);
DCB.BaudRate:= CBR_115200;
DCB.ByteSize:= 8;
DCB.Parity:= EVENPARITY;
DCB.StopBits:= 2;
if SetCommState(HPrt,DCB) then
begin
ShowMessage('Порт существует');
bInit := true;
end else ShowMessage('Порт не сушествует');
end;

procedure TForm1.Button1Click(Sender: TObject);
var StrSz, i: integer;
Outbuf: char;
begin
today := Now;
if not bInit then
begin
ShowMessage('Порт не подключен');
exit;
end;

StrSz:= Length(Edit1.Text);

if StrSz<>0 then
begin
ThTerminate;
for i:= 2 to StrSz do
begin
Outbuf:= Edit1.Text[i];
WriteFile(HPrt,Outbuf,1,ChWrite,nil);
end;
Outbuf := '#';
WriteFile(HPrt,Outbuf,1,ChWrite,nil);
Edit1.Text := 'Я (' + TimeToStr(today) + ') - ' + Edit1.Text;
Memo1.Lines.Add(Edit1.Text);
ThCreate;
end;
Edit1.Text:= '';
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
Memo1.Clear;
end;

end.
 К началу страницы 
+ Ответить 
сообщение
Сообщение #2


user пока
*

Группа: Пользователи
Сообщений: 16
Пол: Мужской

Репутация: -  0  +


А в чём то сама ошибка у тебя?


--------------------
Сделать можно всё, только надо знать как !!!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 





- Текстовая версия 28.09.2020 20:15
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name