Hallo,
ich bin gerade auf einen mir unbekannten Effekt gestoßen. (Delphi 5)
Innerhalb einer Klasse habe ich folgende Klassenfunktion definiert:
class function TMyObject.FindCtrlTag(Text: string; Offset: integer; out CtrlTag: string): integer;
Von anderer Stelle habe ich diese Funktion dann aufgerufen:
Delphi-Quellcode:
...
var
CtrlTag : string;
Idx: integer
MyText : string;
begin
MyText := 'test <tag> test';
...
Idx := TMyObject.TMyObject.FindCtrlTag(MyText, 0, CtrlTag);
while Idx > 0 do
Idx := TMyObject.TMyObject.FindCtrlTag(MyText, Idx + Length(CtrlTag), CtrlTag);
end;
Ich hoffe es wird klar worauf ich hinaus will. Ziel ist alle Tags in Text zu durchlaufen.
Beim zweiten Aufruf von FindCtrlTag kommt innerhalb der Funktion aber nur der Wert von "Idx" an und nicht der Wert von "Idx + Length(CtrlTag)".
Zuvor hatte ich dort auch mal "Pred(Idx + Length(CtrlTag))" stehen. Dann kam in der Funktion immer 0 an.
gelöst habe ich es so:
Delphi-Quellcode:
...
type
TMyObject = class
...
class function TMyObject.FindCtrlTag(Text: string; var Offset: integer; out CtrlTag: string): integer; //Offset als "var"
...
end;
...
var
CtrlTag : string;
Idx: integer
MyText : string;
begin
MyText := 'test <tag> test';
...
Idx := TMyObject.TMyObject.FindCtrlTag(MyText, 0, CtrlTag);
while Idx > 0 do
begin
Inc(Idx, Length(CtrlTag)); //Idx vorher erhöhen
Idx := TMyObject.TMyObject.FindCtrlTag(MyText, Idx, CtrlTag);
end;
end;
Kann mir das jemand erklären?
Danke!