Das ist nichts was man mit Assembler optimieren kann/sollte.
Ist das denn wirklich so langsam?
Falls ja, würde ich mir mal Canvas.TextWidth anschauen. und dann Canvas.TextWidth(LabCap) mit MaxWidth vergleichen.
Das Zuweisen der Caption (und die implizite Größenänderung des Labels) wird wahrscheinlich die meiste Zeit schlucken.
Vielleicht ist das schneller:
Delphi-Quellcode:
function ChangeLabelWidth(Lab: TLabel; MaxWidth: Integer): Boolean;
var LabCap: String;
begin
if Lab.Width > MaxWidth then
begin
LabCap:= Lab.Caption;
MaxWidth := MaxWidth - Lab.Canvas.TextWidth('...');
repeat
SetLength(LabCap, Length(LapCap)-1);
until Lab.Canvas.TextWidth(LabCap) <= MaxWidth;
Lab.Caption := LabCap + '...';
Result:= True;
end
else
Result := false;
end;
oder so vielleicht:
Delphi-Quellcode:
function ChangeLabelWidth(Lab: TLabel; MaxWidth: Integer): Boolean;
var LabCap:
String;
CurrWidth, n: Integer;
begin
if Lab.Width > MaxWidth
then
begin
LabCap:= Lab.Caption;
MaxWidth := MaxWidth - Lab.Canvas.TextWidth('
...');
CurrWidth := Lab.Canvas.TextWidth(LabCap);
n := Length(LapCap);
repeat
CurrWidth := CurrWidth - Lab.Canvas.TextWidth(LabCap[n]);
dec(n);
until (CurrWidth <= MaxWidth)
or (n <= 0);
Lab.Caption := copy(LabCap, 1, n) + '
...';
Result:= True;
end
else
Result := false;
end;
Das zweite ist wahrscheinlich sogar schneller als das erste denke ich mal.
Michael
"Programmers talk about software development on weekends, vacations, and over meals not because they lack imagination,
but because their imagination reveals worlds that others cannot see."