Registriert seit: 26. Nov 2003
Ort: Halle/Saale
4.343 Beiträge
Delphi 11 Alexandria
|
Re: String mit ... abkürzen
20. Mär 2008, 14:44
Ich hab´s mir selbst so gebastelt:
Delphi-Quellcode:
function TVCustom.PaintCanvas: TCanvas; // damit´s auch mit den AlphaSkins funktioniert
begin
if SkinData.Skinned then
Result := SkinData.FCacheBMP.Canvas
else
Result := Canvas;
end;
procedure TVCustom.WriteValue(X, Y: Integer; S: String; TextColor: TColor = clWindowText);
var Rect: TRect;
H, P: String;
Flags: Longint;
begin
if not (csDesigning in ComponentState) then
begin
if not (csDestroying in ComponentState) then
begin
with PaintCanvas do begin
Font.Color := TextColor;
Inc(X, 3);
Brush.Style := bsClear;
Rect := ClipRect;
{
... freien Bereich evtl. eingrenzen
if CheckBoxVisible then Rect.Left := Rect.Left + CheckBoxData.Width;
if ImageVisible then Rect.Right := Rect.Right - ImageData.Width;
}
Rect.Left := Rect.Left + X;
Rect.Top := Rect.Top + Y;
H := S;
P := ' ';
// hier wird die Länge ermittelt...
while (TextWidth(S + P) >= Rect.Right - Rect.Left) and (S <> ' ') do
begin
Delete(S, Length(S), 1);
// ... evtl. mit 3 Punkten ersetzt
if P = ' ' then P := ' ...';
end;
S := S + P;
Flags := 0;
DrawText( Handle, PChar(S), -1, Rect, Flags);
// ... und wenn der Platz nicht reicht, der Text im Hint angegeben
if P <> ' ' then
begin
ShowHint := True;
Hint := H;
end
else begin
ShowHint := False;
Hint := ' ';
end;
end;
end;
end;
end;
|
|
Zitat
|