Is there a way to wrap the text in a TPanel.Caption
in Delphi (in my case Delphi 6)?
Asked
Active
Viewed 5,706 times
2 Answers
11
Not by default, I'm afraid. As you can see from the sourcecode for TPanel, the text is drawn by the 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;
You can either derive and override the Paint-method, or you could just use a label instead.
-
7+1 for suggesting using a label. Just drop it inside the TPanel (if you want the borders) and set the anchors. – Bruce McGee Aug 13 '09 at 22:02
-
1+1 for showing that many questions can be answered easily by just having a quick look at the VCL source code. – mghie Aug 14 '09 at 04:13
0
Here is code that actually works:
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;

Gabriel
- 20,797
- 27
- 159
- 293