Hallo
dies wird übergeben
als erstes sollte der Name der Datei übergeben werden.
Die
Dll prüft in einem Verzeichniss alle Dateien auf folgende Zeichen " IF POS('0 1 2 3 4 5 6 7 8 9',HStr)=1 THEN "
und falls vorhanden soll der Name übergeben werden.
F
Delphi-Quellcode:
UNCTION ExtFlrFirst (Name : STR255;
VAR Kopf : TFlrKopf;
VAR ExtFlrDat : TExtFlrDat) : INTEGER;
StdCall EXTERNAL 'Flr_Ein.dll' INDEX 1;
FUNCTION ExtFlrNext (VAR Kopf : TFlrKopf;
VAR ExtFlrDat : TExtFlrDat) : INTEGER;
StdCall EXTERNAL 'Flr_Ein.dll' INDEX 2;
FUNCTION ExtFlrKopf (Name : STR255;
Bez : STR255;
VAR Kopf : TFlrKopf) : INTEGER;
StdCall EXTERNAL 'Flr_Ein.dll' INDEX 3;
FUNCTION ExtFlrLesen (Name : STR255;
Bez : STR255;
VAR Kopf : TFlrKopf;
VAR Anz : INTEGER;
VAR C,X : TEHTSpalte) : INTEGER;
StdCall EXTERNAL 'Flr_Ein.dll' INDEX 4;
FUNCTION ExtFlrLoeschen (Name : STR255;
Bez : STR255;
TmpName : STR255) : INTEGER;
StdCall EXTERNAL 'Flr_Ein.dll' INDEX 5;
DLL:
Delphi-Quellcode:
FUNCTION StringIstLeer (HStr :
STRING) : BOOLEAN;
VAR I : INTEGER;
BEGIN
I := LENGTH(HStr);
WHILE (I>0)
AND (HStr[I]='
')
DO DEC(I);
StringIstLeer := I=0;
END;
{- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - }
BEGIN
HoleZeile := FALSE;
IF Dat.Flag
AND (Dat.BPos<Dat.Size)
THEN
BEGIN
Zeile.Anfg := Dat.BPos;
Zeile.Txt := '
';
Zeile.Typ := -1;
CR := FALSE;
LF := FALSE;
I := 0;
REPEAT
IF Dat.BPos>=Dat.Pos
THEN LeseBlock(Dat);
IF Dat.Flag
AND (Dat.BPos<Dat.Size)
THEN
BEGIN
B := Dat.Blk[Dat.BPos-Dat.BAnf];
INC(Dat.BPos); INC(I);
IF B=$0A
THEN LF := TRUE
ELSE
IF B=$0D
THEN CR := TRUE
ELSE
IF Length(Zeile.Txt)<128
THEN
BEGIN
{Zeichen kleiner ' ' in Leerzeichen wandeln,
fuehrende und mehrfache Leerzeichen gleich aussondern:}
IF (B>ORD('
'))
THEN Zeile.Txt := Zeile.Txt+CHR(B)
ELSE
IF (LENGTH(Zeile.Txt)>0)
AND (Zeile.Txt[Length(Zeile.Txt)]<>'
')
THEN Zeile.Txt := Zeile.Txt+'
';
END ELSE
IF I>MaxZL
THEN Dat.Flag := FALSE;
END;
UNTIL (
NOT Dat.Flag)
OR CR
OR LF
OR (Dat.BPos>=Dat.Size);
{Zeilenabschluss mit CR, folgt noch ein zugehoeriges LF?}
IF CR
AND Dat.Flag
AND (Dat.BPos<Dat.Size)
THEN
BEGIN
IF Dat.BPos>=Dat.Pos
THEN LeseBlock(Dat);
IF Dat.Flag
AND (Dat.Blk[Dat.BPos-Dat.BAnf]=$0A)
THEN INC(Dat.BPos);
END;
{Zeile gelesen?}
IF Dat.Flag
THEN
BEGIN
HoleZeile := TRUE;
{Enthaelt die Zeile Daten?}
HStr := Zeile.Txt;
{Leerzeile?}
IF StringIstLeer(HStr)
THEN Zeile.Typ := 0
ELSE
{Spaltenbeschriftung?}
IF [B]POS('
0 1 2 3 4 5 6 7 8 9',HStr)=1[/B]
THEN
BEGIN
IF StringIstLeer(COPY(HStr,20,255))
THEN Zeile.Typ := 1;