Den Code hatte ich von nem Freund:
Delphi-Quellcode:
if val and $40 > 0 then
pff := 1
else
pff := 0;
Dieser ist meiner:
Delphi-Quellcode:
if pos(uppercase('Frame_Rate'),uppercase(listbox1.items[i])) > 0 then {nothing} else
if pos(uppercase(' '),uppercase(listbox1.items[i])) > 0 then
begin
temp:=listbox1.Items[i];
for tempi := 7 to length(temp) do
begin
value:=GetTok(temp, tempi, ' ');
if hextoint(value) and $40 > 0 then thirtytwo:=thirtytwo+1;
end;
end;
if thirtytwo > 0 then
checkbox1.checked:=true else checkbox1.checked:=false;
Ich scanne einen Text wie z.B. diesen Ausschnitt:
Code:
Aspect_Ratio=16:9
Picture_Size=720x576
Field_Operation=0
Frame_Rate=25000 (25/1)
Location=0,0,5,108C
d00 1 0 2048 1 1 92 b2 a2 b2 b2 a2 b2 b2 a2 b2 b2 a2
900 1 0 53248 1 1 32 32 92 b2 b2 a2 b2 b2 a2 b2 b2 a2
nach ' ' ab. Ich überspringe die Zeile mit 'Frame_Rate' und gehe dann auf
z.B. diese Zeile und beschränke mich auf die grünen Zahlen ...
d00 1 0 2048 1 1
92 b2 a2 b2 b2 a2 b2 b2 a2 b2 b2 a2
... mit folgendem Code:
Delphi-Quellcode:
function GetTok(const Str: string; const Idx: Integer; const Sep: Char): string;
var
StrLen: Integer;
StrIdx: Integer;
ResLen: Integer;
TokIdx: Integer;
begin
Result := '';
if Idx > 0 then
begin
StrLen := Length(Str);
SetLength(Result, StrLen);
ResLen := 0;
TokIdx := 0;
for StrIdx := 1 to StrLen do
begin
if (Str[StrIdx] <> Sep) and ((StrIdx = 1) or (Str[StrIdx-1] = Sep)) then
Inc(TokIdx);
if TokIdx > Idx then
Break
else if (TokIdx = Idx) and (Str[StrIdx] <> Sep) then
begin
Inc(ResLen);
Result[ResLen] := Str[StrIdx];
end;
end;
SetLength(Result, ResLen);
end;
end
Ich vergleiche nun die Werte mit
Code:
function HexToInt(s: string): Longword;
var
b: Byte;
c: Char;
begin
Result := 0;
s := UpperCase(s);
for b := 1 to Length(s) do
begin
Result := Result * 16;
c := s[b];
case c of
'0'..'9': Inc(Result, Ord(c) - Ord('0'));
'A'..'F': Inc(Result, Ord(c) - Ord('A') + 10);
else
raise EConvertError.Create('No Hex-Number');
end;
end;
end;
'if hextoint(value) and $40 > 0' und zähle dann die Ergebnisse
Ergebnisswerte > 0 then Checkbox1.checked:=true;
Das war nun das Beispiel für Bit6 mit $40.
Bit1 müsste dann $02 sein.
Wie sollte ich denn Deinen Code verwenden?
Hier nochmal meine letzte Rls meines Tools:
Version 0.06
* PFF/TFF routine fixed (i hope so)
*
Download bin version 0.06
*
Download source version 0.06