掲示板システム
ホーム
アクセス解析
カテゴリ
ログアウト
角丸の四角形に複数行の文字列を表示するには? (ID:20749)
名前
ホームページ(ブログ、Twitterなど)のURL (省略可)
本文
igyさん、アドバイスありがとうございます! > APIのDrawTextを使うのは、どうでしょう? おかげさまで、TLableをベースにAPIを使ってテキストを描画し、複数行表示できました。 今回の手法は他の場面でも応用できそうです。ありがとうございます。 TLabelは角丸の外側領域が(親の?)背景色で描かれるみたいですね。 他のラベルと重なった場合に、ちょっと汚く見えてしまうので、できればその部分を改善したいと思います。 そのためには、1)のTPanel方式で複数行表示すればいいのかもしれません。引き続き検討してみます。 > TLabelを使う場合、WordWrap プロパティをTrueにするとか。 Captionに指定したテキストは、Canvas.RoundRectで塗りつぶされてしまうみたいなんです。 それで、直接文字を描画することを考えました。 ほんとうはCaptionを使えると、シンプルに考えられていいのですけど・・。 DrawTextを使ったコードを添付します。 //Win32APIのDrawTextを利用して実装した例20060330 byデル太 //参考ページ:http://www2.ocn.ne.jp/~mizu/api/d/d0001.html←感謝m(__)m //他のラベルと重なると、角丸の外側が汚くなるのが課題 unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, ExtCtrls; type TMyLabel = class(TLabel) protected procedure Paint; override; end; TForm1 = class(TForm) Button1: TButton; Label1: TLabel; //重なったときの表示を確認するためのもの procedure Button1Click(Sender: TObject); private { Private 宣言 } public { Public 宣言 } end; var Form1: TForm1; implementation {$R *.dfm} { TMyLabel } procedure TMyLabel.Paint; var ARect: TRect; S: String; begin inherited; ARect := Rect(5,5,Width -5, Height -5); S := 'この日本語文をラベルの表面に表示します'+#13+'改行も使えます'; with Self do begin Canvas.Brush.Color := clRed; //赤いブラシで Canvas.RoundRect(0,0,Width, Height, 10, 10); //角丸の四角形を表示 DrawText(Self.Canvas.Handle, PChar(S), -1, ARect, DT_WORDBREAK); //ワードラップを指定 end; end; procedure TForm1.Button1Click(Sender: TObject); var ALabel: TMyLabel; begin ALabel := TMyLabel.Create(Self); ALabel.Top := 20; ALabel.Left := 20; ALabel.Width := 200; ALabel.Height := 60; ALabel.Parent := Self; end; end.
←解決時は質問者本人がここをチェックしてください。
更新する
戻る
掲示板システム
Copyright 2021 Takeshi Okamoto All Rights Reserved.