Hallo!
ihr habt mir vor kurzem geraten meinen LPT-Port über die Win32API zu steuern. so, jetzt hab ich mich mal in die
API eingelesen und hier und da im netz gestöbert. ein wunderschönes beispiel zum steuern des
Com-Ports hab ich hier gefunden:
http://www.swissdelphicenter.ch/de/showcode.php?id=841
In abgeänderter Version für den LPT sieht das ganze dann so aus:
Delphi-Quellcode:
function OpenLPTPort: Boolean;
var
DeviceName:
array[0..80]
of Char;
begin
StrPCopy(DeviceName,'
LPT1');
LPTFile := CreateFile(DeviceName,
GENERIC_READ
or GENERIC_WRITE,
0,
nil,
OPEN_EXISTING,
FILE_ATTRIBUTE_NORMAL,
0);
if LPTFile = INVALID_HANDLE_VALUE
then
Result := False
else
Result := True;
end;
procedure CloseLPTPort;
begin
CloseHandle(LPTFile);
end;
function ReadText:
string;
var
d:
array[1..80]
of Char;
s:
string;
BytesRead:DWord;
i: Integer;
begin
Result := '
';
if not ReadFile(LPTFile, d, SizeOf(d), BytesRead,
nil)
then
begin
showmessage('
ERROR while reading from LPT1!');
end;
s := '
';
for i := 1
to BytesRead
do s := s + d[I];
Result := s;
end;
procedure SendText(s:
string);
var
BytesWritten: DWORD;
begin
s := s + #13 + #10;
WriteFile(LPTFile, s[1], Length(s), BytesWritten,
nil);
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
if OpenLPTPort=false
then showmessage('
ERROR while opening handle!');
end;
procedure TForm1.FormClose(Sender: TObject;
var Action: TCloseAction);
begin
try
CloseLPTPort;
except
showmessage('
ERROR while closing handle!');
end;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
panel1.Caption:=ReadText;
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
try
Sendtext(edit1.text);
except
showmessage('
ERROR while sending to LPT1!');
end;
end;
Das einzige Problem: Es funktioniert nicht! (Nicht mal das Orginal hab ich zum Laufen gebracht.) Nirgends erhalte ich eine
exception oder ähnliches, daher dürfte es ja rein theoretisch geklappt haben.
Aber: Beim Schreiben kann ich keine Veränderung an der Schnittstelle feststellen und beim schreiben erhalt ich auch nur den string''. Könnt ihr mir hier sagen, was falsch ist?
Danke,
Borti