Home » Tipps & Tricks » Komponenten » Buttons » Mehrzeilige Button-Überschrift

Mehrzeilige Button-Überschrift

Um einem Button, wobei es sich um einen TButton, TSpeedbutton oder auch TBitBtn handeln kann, eine mehrzeilige Überschrift zu verpassen, fügen Sie der Eigenschaft „Caption“ an passender Stelle einen Zeilenumbruch zu:

 Button1.Caption := 'Zeile eins' + sLineBreak + 'Zeile zwei'; 

sLineBreak enthält den für das System passenden Zeilenumbruch. Sie steht Programmierern allerdings erst ab Delphi 6 zur Verfügung. Programmierer, die mit älteren Versionen arbeiten, sollten zu dem ASCII-Zeichen #10 (=LineFeed) greifen:

 Button1.Caption := 'Zeile eins' + #10 + 'Zeile zwei'; 

Dieses Vorgehen funktioniert nicht nur bei der Caption-Eigenschaft, sondern auch bei vergleichbaren Eigenschaften, wie z.B. Hint.Einige Komponenten von Drittanbietern registrieren sog. Property-Editoren, die auch vorhandene Komponenten beeinflussen. Haben Sie beispielsweise die JVCL installiert, können Sie bereits im Objektinspektor mehrzeilige Überschriften setzen (vorrausgesetzt Sie haben im JVCL Installer die Option „globale Eigenschafts- und Komponenteneditoren registrieren“ gewählt).Bei einem TBitBtn oder TSpeedButton steht Ihnen ein Canvas zur Verfügung. Sie können damit das Zeichnen selbst in die Hand nehmen. Folgende Procedure zeichnet die überschrift mithilfe der API DrawText. Über „DT_CENTER or DT_WORDBREAK“ wird die Funktion angewiesen den Text zu zentrieren und falls nötig an passender Stelle einen Zeilenumbruch hinzuzufügen:

procedure TForm1.FormCreate(Sender: TObject);
var
 R: TRect;
 NewCaption: String;
begin
 with BitBtn1 do
 begin
   NewCaption:='A really really long caption';
   Caption:='';

   glyph.canvas.font:=Font;
   glyph.width:=width-6;
   glyph.height:=height-6;
   R:=Bounds(0,0,Glyph.Width,0);
   DrawText(glyph.canvas.handle, PChar(NewCaption), Length(NewCaption), R, 
     DT_CENTER or DT_WORDBREAK or DT_CALCRECT);
   OffsetRect(R, (Glyph.Width-R.Right) div 2, (Glyph.Height-R.Bottom) div 2);
   DrawText(Glyph.Canvas.Handle, PChar(NewCaption), Length(NewCaption), R, 
     DT_CENTER or DT_WORDBREAK);
 end;
end;