在Delphi中(我的情况是Delphi 6),有没有一种方法可以包装TPanel.Caption
中的文本?
很抱歉,默认情况下似乎不行。从TPanel的源代码可以看出,文本是通过DrawText() Windows API绘制的:
procedure TCustomPanel.Paint;
{snip}
begin
{snip}
Flags := DT_EXPANDTABS or DT_SINGLELINE or
VerticalAlignments[FVerticalAlignment] or Alignments[FAlignment];
Flags := DrawTextBiDiModeFlags(Flags);
DrawText(Handle, PChar(Caption), -1, Rect, Flags);
end;
你可以继承并重写Paint方法,或者你可以使用标签(label)代替。
这里是真正可用的代码:
const
Alignments: array[TAlignment] of Longint = (DT_LEFT, DT_RIGHT, DT_CENTER);
VerticalAlignments: array[TVerticalAlignment] of Longint = (DT_TOP, DT_BOTTOM, DT_VCENTER);
var
Rect: TRect;
...
if ShowCaption AND (Caption <> '') then
begin
Rect := GetClientRect;
Canvas.Brush.Style := bsClear;
Canvas.Font := Self.Font;
Flags := DT_NOPREFIX OR
DT_WORDBREAK OR
VerticalAlignments[VerticalAlignment] OR
Alignments[Alignment];
Flags := DrawTextBiDiModeFlags(Flags);
DrawText(Canvas.Handle, PChar(Caption), Length(Caption), Rect, Flags);
end;