COM порты в Delphy
Пользователи, просматривающие топик: none
|
Зашли как: Guest
|
Имя |
Сообщение |
<< Старые топики Новые топики >> |
|
|
COM порты в Delphy - 2005-12-05 19:41:40
|
|
|
De}{is
Сообщений: 137
Оценки: 0
Присоединился: 2005-11-22 11:21:42
|
Народ, объясните, пожалуйста тупому динозавру, как заставить Делфяк общаться через ком-порт с модемом. Три дня уже мучаюсь, но нефига не получается. Я нарыл уже все возможные функции и т.п., а вот собрать это в реально работающий пример ума не хватает. Если не трудно, помогите плз. Заранее благодарен…
|
|
|
COM порты в Delphy - 2005-12-06 01:13:13
|
|
|
Bill Killer
Сообщений: 57
Оценки: 0
Присоединился: 2005-04-03 19:10:00
|
блин , спроси у ГУГЕЛА![sm=mad.gif][sm=mad.gif][sm=mad.gif] я спросил и тут же получил много подходящего[sm=em121.gif] например-http://articles.org.ru/docum/comport.php
|
|
|
COM порты в Delphy - 2005-12-06 20:48:41
|
|
|
De}{is
Сообщений: 137
Оценки: 0
Присоединился: 2005-11-22 11:21:42
|
quote:
—————-<BR>Цитата: Дата:06.12.2005 1:13:13, Автор:Bill Killer :: блин , спроси у ГУГЕЛА![sm=mad.gif][sm=mad.gif][sm=mad.gif]<BR> —————-
А ты думаешь, я не спрашивал. Я прочитал штук пять подобных статей, но ни в одной из них нет цельного примера реально работающей программы.
Основывыясь на прочитанном материале я пишу следующее:
unit Unit1;
interface
uses windоws, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls;
type Thread = class(TThread) protected procedure Execute; override; end;
type TForm1 = class(TForm) Button1: TButton; Button2: TButton; Edit1: TEdit; Edit2: TEdit; Edit3: TEdit; procedure Button1Click(Sender: TоЬjесt); procedure Button2Click(Sender: TоЬjесt); private Th:Thread; { Private declarations } public { Public declarations } end;
var Form1: TForm1; hcom:THandle;
implementation
{$R *.DFM}
procedure TForm1.Button1Click(Sender: TоЬjесt); begin hcom:= CreateFile('COM1',GENERIC_READ or GENERIC_WRITE,0, nil, OPEN_EXISTING, 0, 0); if hcom = INVALID_HANDLE_VALUE then raise Exception.Create('Error opening port'); if not PurgeComm(hcom, PURGE_TXCLEAR or PURGE_RXCLEAR) then raise Exception.Create('Error purging port');
th:=Thread.Create(true); Th.Priority := tpHighest; Th.Resume; end;
procedure TForm1.Button2Click(Sender: TоЬjесt); var wb:Cardinal; OverLp:TOverlapped; s,buf:string; begin buf:='AT'+#13; OverLp.hEvent := CreateEvent(nil, True, False, nil); if OverLp.hEvent = Null then raise Exception.Create('Error creating write event');
th.Terminate;
if (not WriteFile(hcom, buf, length(buf), wb, @OverLp)) then raise Exception.Create('Error writing port');
th.Resume;
str(wb,s); Edit1.Text:=s; end;
procedure Thread.Execute; var rb:Cardinal; OverLp:TOverlapped; buf,s:string; begin FreeOnTerminate := True;
OverLp.hEvent := CreateEvent(nil, True, False, nil); if OverLp.hEvent = Null then raise Exception.Create('Error creating write event');
while not Terminated do begin ReadFile(hcom,buf,1,rb,@OverLp); if rb <> 0 then begin Application.MessageЬох('Что прочитали!!!!','',0); Form1.Edit3.Text:=Form1.Edit3.Text + buf; str(rb,s); Form1.Edit2.Text:=s; end; end; end;
end.
Но всё енто не фига не работает :(((((((((((((((( Кто-нить может объяснить, где ошибка или что неправильно????
|
|
|
COM порты в Delphy - 2005-12-07 08:52:23
|
|
|
SergeyAKM
Сообщений: 14
Оценки: 0
Присоединился: 2005-12-07 00:20:53
|
Можно воспользоваться компонентом Comm32. Оставь мыло, вышлу его и краткий мануал.
|
|
|
COM порты в Delphy - 2005-12-07 18:41:31
|
|
|
De}{is
Сообщений: 137
Оценки: 0
Присоединился: 2005-11-22 11:21:42
|
quote:
—————-<BR>Цитата: Дата:07.12.2005 8:52:23, Автор:SergeyAKM :: Оставь мыло, вышлу его и краткий мануал.<BR> —————-
Ну, если не влом, то кинь на nook@mail2k.ru. Посмотрю, что енто такое, хотя и с api хотелось бы разобраться…
|
|
|
COM порты в Delphy - 2005-12-09 07:43:00
|
|
|
De}{is
Сообщений: 137
Оценки: 0
Присоединился: 2005-11-22 11:21:42
|
Пробовал это компонент, скачал ещё штук пять аналогичных из сети, а результат тот же. Модем не отвечает на команды, хотя программы, вроде бы написаны верно, может я неправильно шлю каманды модему. Кто знает точно, в конце команды дожно стоять #13 или #10?
|
|
|
|
|