PanelのCaptionで複数行表示するには

解決


Delphi初心者  2006-05-03 21:54:46  No: 21317

フォームに配置したPanelのCaptionに複数行の文字を表示したいのですが、
うまく複数行表示されません。何かやり方がまずいのでしょうか?
教えてください。

Panel1.Caption := 'AAA' + #13#10 + 'BBB';


ひと手間かければ  2006-05-04 00:22:43  No: 21318

>まずいのでしょうか?
TCustomPanelから派生したパネルを作れば美味しくいただけますよ。


Delphi初心者  2006-05-04 01:05:17  No: 21319

返信ありがとうございます。
出来ればサンプルコードを提示して頂けると嬉しいです。
宜しくお願いします。


タバスコ  2006-05-04 04:18:23  No: 21320

これでどうでしょう?

http://leed.issp.u-okyo.ac.jp/~takeuchi/delphi/article/017/017735.html


タバスコ  2006-05-04 04:26:06  No: 21321

テストもせずに挙げてみたら、これではできないみたいですね。残念。
まぁ、他の人の参考にでもなれば・・になってしまいました・・。


タバスコ  2006-05-04 05:13:42  No: 21322

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

これでできるといいですが、当方では未テストです。


Delphi  2006-05-04 06:11:30  No: 21323

返信ありがとうございます。
タバスコさんに教えていただいた過去ログを見てみて、
実装してみたらうまくいきました!
ただ、過去ログのように動的に作成したPanelではうまくいくことを
確認できたのですが、あらかじめFormに作成しておいたPanelに対して
複数行の文字を表示するには、どうしたらいいのですか?
宜しくお願いします。


注文の多い料理店  2006-05-04 08:43:07  No: 21324

当方の用意してございますパネルメニューではお客サマのご注文に対応できませんことご了承いただきたく、真に申し訳。


igy  2006-05-04 09:10:41  No: 21325

>あらかじめFormに作成しておいたPanelに対して
>複数行の文字を表示するには、どうしたらいいのですか?

<1>
ひと手間かければ さんが

>TCustomPanelから派生したパネルを作れば美味しくいただけますよ。

といったとおり

>過去ログのように動的に作成したPanelではうまくいくことを
>確認できたのですが

この部分を参考にして、コンポーネントにする。

<2>
Captionでは文字を表示しないようにし(Caption := '')、
Label(WordWrap プロパティをTrue)をパネルの上に追加して
使用する。

でどうでしょう?


Delphi初心者  2006-05-06 09:01:29  No: 21326

igyさん返信ありがとうございます。

><1>
何度も聞いて申し訳ないのですが、いまいちピンとこないので
もう少しヒントを頂けないでしょうか?
既存のPanelから過去ログでいうTMyPanel.Paintが呼び出せれば
うまくいくような気がするのですが、やり方がわかりません。。。

><2>
>Captionでは文字を表示しないようにし(Caption := '')、
>Label(WordWrap プロパティをTrue)をパネルの上に追加して
>使用する。
なるほど!そういうやり方もあるのですね。
良いアイディアをありがとうございます。
<1>がうまく実現出来ない時に、<2>を参考にさせて頂きたいと
思います。


えーと  2006-05-06 09:18:26  No: 21327

> 既存のPanelから過去ログでいうTMyPanel.Paintが呼び出せれば

これが

> あらかじめFormに作成しておいたPanelに対して
> 複数行の文字を表示するには、どうしたらいいのですか?

このことを意味してるなら、「できません」。

派生クラスをつくるしかないです。動的に既存クラスのメソッドを横取りすることは
一般にはできません。


Delphi初心者  2006-05-06 11:05:09  No: 21328

>派生クラスをつくるしかないです。
派生クラスがあまり理解出来ていませんが、派生クラスで作成したPanelと
あらかじめフォームに配置したPanelをどのように結びつけるのですか?
うまく質問出来なくてすみません。

ちなみに、TCustomPanelから派生したパネルとは下記のようでいいのですか?

type
  TMyPanel = class(TCustomPanel)
  protected
    procedure Paint; override;
  end;


えーと  2006-05-06 12:17:53  No: 21329

> 派生クラスがあまり理解出来ていませんが、派生クラスで作成したPanelと
> あらかじめフォームに配置したPanelをどのように結びつけるのですか?

うーむ、なぜ、「あらかじめフォームに配置したPanel」にこだわるのか
わかりません。コンポーネントの派生クラスを作るってことは、新しく
コンポーネントを作ることです。TPanel と TMyPanel は全く同じようにして
コンポーネントパレットからドロップして使います。


igy  2006-05-06 18:22:17  No: 21330

>><1>
>何度も聞いて申し訳ないのですが、いまいちピンとこないので
>もう少しヒントを頂けないでしょうか?

すでに既存のコンポーネントを派生したもの(TMyPanel)ができていて、
動作確認も済んでいるようですので、
あとは登録して、コンポーネントパレットから選択できるようにするだけだと思います。

# もし、TMyPanelが別ファイルになっていないならば、別ファイルにします。
# コンポーネントパレットで表示されるイメージを作成するには、
# Image Editorで、「Delphiコンポーネントリソースファイル」を作成します。

Delphi5のヘルプでは、

「カスタムコンポーネントの作成」ヘルプの

コンポーネント開発者ガイド
  + 既存のコンポーネントの変更
     + コンポーネントの作成と登録

あたりが参考になるかと。


Delphi初心者  2006-05-06 21:07:45  No: 21331

えーとさん、igyさん返信ありがとうございます。

>コンポーネントの派生クラスを作るってことは、新しくコンポーネントを作ることです。
そういうことなんですね。コンポーネントは作成した事もありませんでしたので、みなさんがおっしゃってることが理解出来ていませんでした。

私としては、ただ新規にコンポーネントを作成せずに既存のTPanelを
使用して複数行が実現出来ないかなーと思っただけです。
けれど、みなさんの返信を見る限り既存のTPanelで複数行は
実現出来ないということがわかりました。

igyさんに教えて頂いたとおり、TPanelの上にLabelを追加して
複数行を実現しようと思います。

また機会があればコンポーネント作成にも挑戦してみようと思います。

長々とお付き合い頂きましてありがとうございました。


横着な貴兄に…  2006-05-06 21:38:40  No: 21332

>私としては、ただ新規にコンポーネントを作成せずに既存のTPanelを
>使用して複数行が実現出来ないかなーと…

procedure TMyPanel.Paint;
begin
  // 複数行Caption描画
end;

procedure TForm1.ReplacePanel(var Panel: TPanel);
var
  s: string;
begin
  with TMyPanel.Create(Self) do begin
    Parent := Panel.Parent;
    Top := Panel.Top;
    Left := Panel.Left;
    Width := Panel.Width;
    Height := Panel.Height;
    s := Panel.Name;
    Panel.Free;
    Name := s;
  end;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  ReplacePanel(Panel1);
  ReplacePanel(Panel2);
  Panel1.Caption := '貼り付けてあったPanel1を'#13#10'TMyPanelと入れ換えたよ';
  Panel2.Caption := '貼り付けてあったPanel2を'#13#10'TMyPanelと入れ換えたよ';
end;


Delphi初心者  2006-05-07 08:51:29  No: 21333

横着な貴兄に…さん返信ありがとうございます。

無理な注文に答えて頂き、またサンプルコードまで提供して頂きありがとうございます。

TMyPanelとTPanelをうまく入れ替えることで、見た目上いかにも
TPanelで複数行実現出来ているように見えます。

素晴らしいアイデアをありがとうございます。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加