Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.07.18;
Скачать: CL | DM;

Вниз

IrDA   Найти похожие ветки 

 
SniZ ©   (2004-06-06 00:35) [0]

Может есть какой нить компонент для передачи данных по ИК?
Мне нужно передовать или принимать допустим файл по ИК!


 
я думаю вы меня помните   (2004-06-06 11:30) [1]

Работа с ИК портом аналогична работе с RS232 (COM-порт). Компонентов для этого насоздавали туеву хучу, даже, наверное, на этом сайте лежат.
Только всеравно лучше ручками на winapi.
Имя файла обычно - "IrDA", в WinNT на него точно выделяется виртуальный COM-порт (например "COM5").


 
GanibalLector ©   (2004-06-06 13:55) [2]

Соглашусь с "я думаю вы меня помните "
WinApi рулят...
Если нужен сабж,скажи.Я не жадный


 
SniZ ©   (2004-06-06 15:28) [3]

2 GanibalLector:
дай


 
GanibalLector ©   (2004-06-06 19:45) [4]

ну...даю

function LStr(const Source:Ansistring;Count:Integer):Ansistring;
begin
 Result:=Copy(Source,1,Count);
end;

function OpenComm(Mode:AnsiString):THandle;
var
 DCB : TDCB;
 TOut: TCommTimeouts;
 I:Integer;
 Bfr:AnsiString;
begin
 Bfr:=Mode;
 UniqueString(Bfr);
 I:=Pos(":",Bfr)-1;
 if I<=0 then I:=4;
 Result := CreateFile(PChar(LStr(Bfr,I)),GENERIC_READ or GENERIC_WRITE,
        0,nil,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,0);

 GetCommState( Result, DCB) ;
 BuildCommDCB(PChar(Bfr),DCB);
 DCB.EvtChar := #13;
 SetCommState( Result, DCB) ;
 //
 TOut.ReadIntervalTimeout         := MAXDWORD;
 TOut.ReadTotalTimeoutMultiplier  := 0;
 TOut.ReadTotalTimeoutConstant    := 0;
 TOut.WriteTotalTimeoutMultiplier := 0;
 TOut.WriteTotalTimeoutConstant   := 0;
 SetCommTimeOuts( Result, TOut);
   SetCommMask(Result,EV_RLSD OR EV_RXFLAG);
   PurgeComm(Result,PURGE_TXCLEAR);      //clear transmit buffer
   PurgeComm(Result,PURGE_RXCLEAR);      //clear receive buffer
end;

function ReadComm(Handle:THandle; var Bfr:AnsiString):Integer;
var
 I,J:DWord;
begin
 Result:=0;
 J:=Length(Bfr);
 repeat
   ReadFile(Handle, Bfr[Result+1], J-DWord(Result), I, nil);
   Inc(Result,Integer(I));
  if DWord(Result)=J then break;
 until I=0;
end;

function WriteComm(Handle:THandle; const Bfr:AnsiString):Integer;
var
 I,J:DWord;
begin
 Result:=0;
 J:=Length(Bfr);
 repeat
   WriteFile(Handle, Bfr[Result+1], J-DWord(Result), I, nil);
   Inc(Result,Integer(I));
   if DWord(Result)=J then break;
 until I=0;
end;

function CloseComm(Handle:THandle):boolean;
begin
CloseHandle(Handle);
result:=true;
end;

function SetRxTime(Handle:THandle; const TimeC,TimeM:Integer):Boolean;
var
 TOut:TCommTimeouts;
begin
 if (TimeC=0) AND (TimeM=0) then
   TOut.ReadIntervalTimeout       := MAXDWORD
 else TOut.ReadIntervalTimeout    := 0;
 TOut.ReadTotalTimeoutMultiplier  := TimeM;
 TOut.ReadTotalTimeoutConstant    := TimeC;
 TOut.WriteTotalTimeoutMultiplier := 0;
 TOut.WriteTotalTimeoutConstant   := 0;
 Result:=SetCommTimeOuts(Handle, TOut);
end;



Как работать:(это кусок моего кода)
function initcomm(co:string;baud:string;var outst:string;var par:string):boolean; stdcall;
 var st,str,aa:string;
 count,t_out:integer;
 begin
 count:=0;
 Handle:=OpenComm("COM"+co+":BAUD="+baud+" PARITY=N DATA=8 STOP=1");
 if Handle=INVALID_HANDLE_VALUE then begin result:=false;exit;end;
 if GetFileType(Handle)<>FILE_TYPE_CHAR then begin result:=false;exit;end;
 setrxtime(handle,100,25);   //100,25
str:="";
setlength(st,1);
   if readcomm(Handle,st)=1 then begin
   if st<>chr($0d) then begin str:=str+st;
   //... ну и так далее

надеюсь понятно...



Страницы: 1 вся ветка

Текущий архив: 2004.07.18;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.045 c
3-1087851662
DimDim
2004-06-22 01:01
2004.07.18
Упаковать таблицы DBISAM


3-1087988695
nik7777
2004-06-23 15:04
2004.07.18
Вопрос по репликации


3-1087818091
SergP
2004-06-21 15:41
2004.07.18
Работа с Oracle через dbExpress


1-1089185904
Ларра
2004-07-07 11:38
2004.07.18
Передача данных из базы данных в EXCEL


14-1088403348
Игорь Шевченко
2004-06-28 10:15
2004.07.18
Современные политтехнологии - где больше вранья ?