パネルコンポで2行表示するには?


ひろみ  2006-05-19 22:53:28  No: 21667  IP: 192.*.*.*

こんばんは。
お尋ねします!

1つのパネルコンポで2行表示はどのようにするとよろしいのでしょうか?
対象文字列が、20バイト以上の時は2行にするみたいな感じです。
var
str:String;

str:=:='12345678901234567890';

Pnl.Caption:=Str;

実行時
1234567890
1234567890

よろしくお願いします。

編集 削除
Label  2006-05-19 23:27:44  No: 21668  IP: 192.*.*.*

Panel の上から Label を貼り付けるのが簡単でいいと思います。この場合、改行させたいところで、#10#13 で。

編集 削除
ひろみ  2006-05-19 23:37:44  No: 21669  IP: 192.*.*.*

ありがとうございます。

Labelでは、#10#13 が使用できるのですね!

Panelでは、#10#13 は使用できないのでしょうか?
Panelでやってみたけど、改行できなっかたので不思議でした。

編集 削除
Panelではとても面倒です  2006-05-20 00:04:41  No: 21670  IP: 192.*.*.*

https://www.petitmonte.com/bbs/answers?question_id=3899

編集 削除
使用不可仕様  2006-05-20 00:06:04  No: 21671  IP: 192.*.*.*

>Panelでは、#10#13 は使用できないのでしょうか?
>Panelでやってみたけど、改行できなっかたので不思議でした。

それがPanel.Captionの仕様で、改行は想定外ということでしょうか…

編集 削除
Mr.XRAY  URL  2006-05-20 01:28:10  No: 21672  IP: 192.*.*.*

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;

編集 削除
Mr.XRAY  URL  2006-05-20 01:36:34  No: 21673  IP: 192.*.*.*

>この例は、この掲示板にも何回か提示していますので、説明は省略します。
と言っても探すのが大変ですね。う〜む。
説明が必要でしたらまた訊いて下さい。

編集 削除
Mr.XRAY  URL  2006-05-20 01:44:58  No: 21674  IP: 192.*.*.*

> TMyPanel=class(TCustomPanel);
もちろん
 TMyPanel=class(TPanel);
でも構いません。TMyPanleは任意ですが、クラスなので頭にTをつけた方が
いいでしょう。

編集 削除
消える  2006-05-20 02:41:21  No: 21675  IP: 192.*.*.*

単に
>TMyPanel(Panel1).Canvas.TextOut(20,10,'123');
だと、上からフォームなどがかぶさった場合、そのフォームがなくなると消えてしまいます。なのでコード的にもラベルが最適かと.....。
スタティク・テキストでもできるかとやってみたところ、下のほうの文字が半分切れてしまいました。

編集 削除
Mr.XRAY  URL  2006-05-20 11:53:50  No: 21676  IP: 192.*.*.*

>そのフォームがなくなると消えてしまいます。
ありっ、これは失礼。OnPaintでの描画が必要なようですね。
TLabelでしのぐのがよさそうですね。

編集 削除