Witam. Więc jest tak...
Mam kilka funkcji: GetTextWidth - zwraca szerokość podanego tekstu w pikselach.
Biggest - zwraca największą liczbę ze znalezionych w podanym StringList
I mam takie tablice:
type
TK= record
tyt: string;
//inne pola
end;
type
TPole = record
nazwa: string;
len: integer;
end;
var
k: array of TK;
p: array[0..10] of TPole;
Najpierw się ort!, jak wyglądają moje funkcje:
function TForm1.GetTextWidth(text: string; fs: TFontStyles): integer;
begin
canvas.Font.Name:='Arial';
canvas.Font.Size:=10;
canvas.Font.Style:=fs;
result:=canvas.TextWidth(text);
end;
//i ta funkcja jest ok, bo sprawdzałem
function TForm1.Biggest(s: TStringList): integer;
var
i: integer;
nw: integer;
begin
nw:=0;
for i:=0 to s.Count-1 do
if nw<StrToInt(s.Strings[i]) then nw:=StrToInt(s.Strings[i]);
result:=nw;
end;
procedure TForm1.Button1Click(Sender: TObject);
var
i: integer;
s: TStringList;
begin
s:=TStringList.Create;
for i:=0 to high(k) do
begin
s.Add(k[i].tyt);
s.Strings[i]:=intToStr(GetTextWidth(s.Strings[i], []));
end;
p[5].len:=Biggest(s);
s.Clear;
s.Free;
end;
Oczywiście w odpowiednim miejscu zwiększam tablicę K :)
Teraz chodzi o to, że powiedzmy mam tekst, który pikselowo ma szerokość 495.
Robiłem ten program z debuggerem i wszystko niby było ok. Wszystko było ok, dopóki program nie opuścił funkcji BIGGEST. Chociaż w linii:
result:=nw;
pokazywał, że nw ma wartość 495.
Lecz gdy sprawdzam wartość pole[5].len (po wykonaniu funkcji Biggest oczywiście) wynik mam 195.
POLE[5].LEN powinno mieć wartość 495, a ma 195. Dlaczego? Gdzie tu jest jakiś błąd?