salut,
par exemple je veux recevoir cette trame :ABC 10020001 R XYZ<cr> <lf>
ma question c'est comment tester(sans perdre de donné), la fin de trame(<cr> <lf>) et afficher ABC 10020001 R XYZ.
à l'aide de mon programme je reçois : ABC 10020001 R XYZ
suivit d'un caractère 't' (apparemment c'est <cr> <lf>)
voilà mon programme :
unit Unit1;
//Programmé par Yoann
//
http://delphipage.free.fr/
//DLL disponible à l'adresse suivante :
http://www.b-kainka.de/
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
ExtCtrls, StdCtrls;
type
TForm1 = class(TForm)
Button1: TButton;
Button2: TButton;
Timer1: TTimer;
Label1: TLabel;
Edit2: TEdit;
ListBox1: TListBox;
Button3: TButton;
Label2: TLabel;
procedure FormCreate(Sender: TObject);
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure Timer1Timer(Sender: TObject);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
procedure Button3Click(Sender: TObject);
private
{ Déclarations privées }
SortieClgn:Integer;
public
{ Déclarations publiques }
end;
var
Form1: TForm1;
implementation
{$R *.DFM}
//Importe les procédures et les fonctions de la DLL que l'on a besoin
function OPENCOM(OpenString:PChar):Integer; stdcall; external 'RSCOM.DLL';
procedure CLOSECOM(); stdcall; external 'RSCOM.DLL';
procedure TXD(d:WORD); stdcall; external 'RSCOM.DLL';
procedure SENDBYTE (Dat: Integer); stdcall; external 'RSCOM.DLL';
function READBYTE(): Integer; stdcall; external 'RSCOM.DLL';
procedure SENDSTRING (Buffer: PChar); stdcall; external 'RSCOM.DLL';
function READSTRING (): PChar; stdcall; external 'RSCOM.DLL';
Procedure CLEARBUFFER (); stdcall; external 'RSCOM.DLL';
function INPUTS():Integer; stdcall; external 'RSCOM.DLL';
procedure TForm1.FormCreate(Sender: TObject);
begin
SortieClgn:=0; //Initialise la variable "SortieClgn"
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
OpenCom('COM1: baud=9600 parity=N data=8 stop=1'); //Ouvre et paramètre la connexion sur COM1
{On peut également faire ceci : "OpenCom('COM1:9600,N,8,0');" mais la notation recommandée par l'auteur (Burkhard Kainka) de la DLL pour toutes les versions de Windows est la première}
Timer1.Enabled:=True; //Active le timer
Label1.Color:=clLIME; Label1.Caption:='COM..OK'; //Timer1Timer(Sender);
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
Timer1.Enabled:=False; //Désactive le timer
CloseCOM; //Libère le port
Label1.Color:=clRED;
Label1.Caption:='COM..BAD';
end;
procedure TForm1.Timer1Timer(Sender: TObject);
Var i,a:integer; aa,bb: string;
TAB : array[0..1000]of string; b,d:byte;
begin
bb:=readstring();
if bb<>'' then //on ajoute à liste box que si on reçoit des données
listBox1.AddItem(bb, sender);
Label1.Visible:=True; //Affiche le label
end;
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
if Timer1.Enabled=true then //Si le Timer n'est pas arrêter alors on se déconnecte avant de quitter le programme
Button2Click(Sender)
end;
procedure TForm1.Button3Click(Sender: TObject);
begin
ListBox1.Clear;
end;
end.