Het standaard Indy telnet component met een procedure om een opdracht weg te sturen en een om de antwoorden terug te sturen. De code die je overal op internet tegenkomt als voorbeeld van Indy.
Nu stuur ik de nieuwe opdracht handmatig als ik als antwoord weer een cursor heb.
Later moet dit geautomatiseerd gaan maar eerst moet het werken.
Bij de create van het form worden de poort en ip adres gezet en geconnect.
Op zich werkt de code wel maar als je een command naar het modem stuurt krijg je als antwoord maar de helft van de opdracht terug. En omdat hij die niet uit kan voeren ook gelijk een error.
Het modem is een Portech MV-372
Als ik via de webinterface een SMS stuur gaat het goed maar die kun je niet via code aansturen. Dan hebben we hier nog een GSM gateway staan maar daar moet je via een compoort een SMS server aanhangen. Dat is veel te complex en ik hoef ook geen TV spelletjes functionaliteit te hebben als SMS Piet om hem door te laten gaan naar de finale
Het moet een SMS attendering worden om mensen aan afspraken te herrinneren en aan te geven wat ze mee moeten nemen.
Elke andere werkende oplossing is ook goed zeker als die snel is.
Code:
procedure TForm1.IdTelnet1DataAvailable(Sender: TIdTelnet; const Buffer: string);
const
CR = #13;
LF = #10;
var
Start, Stop : Integer;
begin
if Memo1.Lines.Count = 0 then
Memo1.Lines.Add('');
Start := 1;
Stop := Pos(CR, Buffer);
if Stop = 0 then
Stop := Length(Buffer) + 1;
while Start <= Length(Buffer) do begin
Memo1.Lines.Strings[Memo1.Lines.Count - 1] :=
Memo1.Lines.Strings[Memo1.Lines.Count - 1] +
Copy(Buffer, Start, Stop - Start);
if Buffer[Stop] = CR then begin
Memo1.Lines.Add('');
{$IFNDEF Linux}
SendMessage(Memo1.Handle, WM_KEYDOWN, VK_UP, 1);
{$ENDIF}
end;
Start := Stop + 1;
if Start > Length(Buffer) then
Break;
if Buffer[Start] = LF then
Start := Start + 1;
Stop := Start;
while (Buffer[Stop] <> CR) and (Stop <= Length(Buffer)) do
Stop := Stop + 1;
end;
edtSendCommand.SetFocus;
end;
Code:
procedure TForm1.edtSendCommandKeyPress(Sender: TObject;
var Key: Char);
var
i : integer;
s : string;
begin
if IdTelnet1.Connected then
if (key = #13) then
begin
s := edtSendCommand.text;
for i := 1 to length(s) do
IdTelnet1.SendCh(s[i]);
IdTelnet1.SendCh(#13);
end;
if IdTelnet1.Connected then
if (key = #10) then
begin
s := edtSendCommand.text;
for i := 1 to length(s) do
IdTelnet1.SendCh(s[i]);
IdTelnet1.SendCh(#26);
end;
end;
Bookmarks