Einzelnen Beitrag anzeigen

VizeTE

Registriert seit: 31. Dez 2002
178 Beiträge
 
Delphi 5 Enterprise
 
#1

einer Klassenfunktion einen berechneten Wert übergeben?

  Alt 15. Mai 2009, 17:06
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!
  Mit Zitat antworten Zitat