こんばんは。
お尋ねします!
1つのパネルコンポで2行表示はどのようにするとよろしいのでしょうか?
対象文字列が、20バイト以上の時は2行にするみたいな感じです。
var
str:String;
str:=:='12345678901234567890';
Pnl.Caption:=Str;
実行時
1234567890
1234567890
よろしくお願いします。
Panel の上から Label を貼り付けるのが簡単でいいと思います。この場合、改行させたいところで、#10#13 で。
ありがとうございます。
Labelでは、#10#13 が使用できるのですね!
Panelでは、#10#13 は使用できないのでしょうか?
Panelでやってみたけど、改行できなっかたので不思議でした。
https://www.petitmonte.com/bbs/answers?question_id=3899
>Panelでは、#10#13 は使用できないのでしょうか?
>Panelでやってみたけど、改行できなっかたので不思議でした。
それがPanel.Captionの仕様で、改行は想定外ということでしょうか…
TPanelには、Private部にCanvasプロパティがあります。
Canvasが使用できれば、複数行も画像も表示可能です。以下例です。
この例は、この掲示板にも何回か提示していますので、説明は省略します。
implementation
{$R *.DFM}
// PanelのPrivate部のCanvasプロパティにアクセスするためのクラス定義
type
TMyPanel=class(TCustomPanel);
//=============================================================================
// CanvasのTextOutやWin32APIのDrawTextを使用してPanelのCanvasに描画する
// この方法なら任意の位置にテキストや画像を表示可能。位置の調整はPanelのサイ
// ズなどの値から計算する。
// 指定したバイト数で2行以上にする場合は、先頭からのバイト数を数えるればい
// いので説明の必要はないでしょう。
//=============================================================================
procedure TForm1.Button1Click(Sender: TObject);
begin
TMyPanel(Panel1).Canvas.TextOut(20,10,'123');
TMyPanel(Panel1).Canvas.TextOut(20,25,'ABC');
end;
>この例は、この掲示板にも何回か提示していますので、説明は省略します。
と言っても探すのが大変ですね。う〜む。
説明が必要でしたらまた訊いて下さい。
> TMyPanel=class(TCustomPanel);
もちろん
TMyPanel=class(TPanel);
でも構いません。TMyPanleは任意ですが、クラスなので頭にTをつけた方が
いいでしょう。
単に
>TMyPanel(Panel1).Canvas.TextOut(20,10,'123');
だと、上からフォームなどがかぶさった場合、そのフォームがなくなると消えてしまいます。なのでコード的にもラベルが最適かと.....。
スタティク・テキストでもできるかとやってみたところ、下のほうの文字が半分切れてしまいました。
>そのフォームがなくなると消えてしまいます。
ありっ、これは失礼。OnPaintでの描画が必要なようですね。
TLabelでしのぐのがよさそうですね。
ツイート | ![]() |