フォームに配置したPanelのCaptionに複数行の文字を表示したいのですが、
うまく複数行表示されません。何かやり方がまずいのでしょうか?
教えてください。
Panel1.Caption := 'AAA' + #13#10 + 'BBB';
>まずいのでしょうか?
TCustomPanelから派生したパネルを作れば美味しくいただけますよ。
返信ありがとうございます。
出来ればサンプルコードを提示して頂けると嬉しいです。
宜しくお願いします。
これでどうでしょう?
http://leed.issp.u-okyo.ac.jp/~takeuchi/delphi/article/017/017735.html
テストもせずに挙げてみたら、これではできないみたいですね。残念。
まぁ、他の人の参考にでもなれば・・になってしまいました・・。
https://www.petitmonte.com/bbs/answers?question_id=3801
これでできるといいですが、当方では未テストです。
返信ありがとうございます。
タバスコさんに教えていただいた過去ログを見てみて、
実装してみたらうまくいきました!
ただ、過去ログのように動的に作成したPanelではうまくいくことを
確認できたのですが、あらかじめFormに作成しておいたPanelに対して
複数行の文字を表示するには、どうしたらいいのですか?
宜しくお願いします。
当方の用意してございますパネルメニューではお客サマのご注文に対応できませんことご了承いただきたく、真に申し訳。
>あらかじめFormに作成しておいたPanelに対して
>複数行の文字を表示するには、どうしたらいいのですか?
<1>
ひと手間かければ さんが
>TCustomPanelから派生したパネルを作れば美味しくいただけますよ。
といったとおり
>過去ログのように動的に作成したPanelではうまくいくことを
>確認できたのですが
この部分を参考にして、コンポーネントにする。
<2>
Captionでは文字を表示しないようにし(Caption := '')、
Label(WordWrap プロパティをTrue)をパネルの上に追加して
使用する。
でどうでしょう?
igyさん返信ありがとうございます。
><1>
何度も聞いて申し訳ないのですが、いまいちピンとこないので
もう少しヒントを頂けないでしょうか?
既存のPanelから過去ログでいうTMyPanel.Paintが呼び出せれば
うまくいくような気がするのですが、やり方がわかりません。。。
><2>
>Captionでは文字を表示しないようにし(Caption := '')、
>Label(WordWrap プロパティをTrue)をパネルの上に追加して
>使用する。
なるほど!そういうやり方もあるのですね。
良いアイディアをありがとうございます。
<1>がうまく実現出来ない時に、<2>を参考にさせて頂きたいと
思います。
> 既存のPanelから過去ログでいうTMyPanel.Paintが呼び出せれば
これが
> あらかじめFormに作成しておいたPanelに対して
> 複数行の文字を表示するには、どうしたらいいのですか?
このことを意味してるなら、「できません」。
派生クラスをつくるしかないです。動的に既存クラスのメソッドを横取りすることは
一般にはできません。
>派生クラスをつくるしかないです。
派生クラスがあまり理解出来ていませんが、派生クラスで作成したPanelと
あらかじめフォームに配置したPanelをどのように結びつけるのですか?
うまく質問出来なくてすみません。
ちなみに、TCustomPanelから派生したパネルとは下記のようでいいのですか?
type
TMyPanel = class(TCustomPanel)
protected
procedure Paint; override;
end;
> 派生クラスがあまり理解出来ていませんが、派生クラスで作成したPanelと
> あらかじめフォームに配置したPanelをどのように結びつけるのですか?
うーむ、なぜ、「あらかじめフォームに配置したPanel」にこだわるのか
わかりません。コンポーネントの派生クラスを作るってことは、新しく
コンポーネントを作ることです。TPanel と TMyPanel は全く同じようにして
コンポーネントパレットからドロップして使います。
>><1>
>何度も聞いて申し訳ないのですが、いまいちピンとこないので
>もう少しヒントを頂けないでしょうか?
すでに既存のコンポーネントを派生したもの(TMyPanel)ができていて、
動作確認も済んでいるようですので、
あとは登録して、コンポーネントパレットから選択できるようにするだけだと思います。
# もし、TMyPanelが別ファイルになっていないならば、別ファイルにします。
# コンポーネントパレットで表示されるイメージを作成するには、
# Image Editorで、「Delphiコンポーネントリソースファイル」を作成します。
Delphi5のヘルプでは、
「カスタムコンポーネントの作成」ヘルプの
コンポーネント開発者ガイド
+ 既存のコンポーネントの変更
+ コンポーネントの作成と登録
あたりが参考になるかと。
えーとさん、igyさん返信ありがとうございます。
>コンポーネントの派生クラスを作るってことは、新しくコンポーネントを作ることです。
そういうことなんですね。コンポーネントは作成した事もありませんでしたので、みなさんがおっしゃってることが理解出来ていませんでした。
私としては、ただ新規にコンポーネントを作成せずに既存のTPanelを
使用して複数行が実現出来ないかなーと思っただけです。
けれど、みなさんの返信を見る限り既存のTPanelで複数行は
実現出来ないということがわかりました。
igyさんに教えて頂いたとおり、TPanelの上にLabelを追加して
複数行を実現しようと思います。
また機会があればコンポーネント作成にも挑戦してみようと思います。
長々とお付き合い頂きましてありがとうございました。
>私としては、ただ新規にコンポーネントを作成せずに既存の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;
横着な貴兄に…さん返信ありがとうございます。
無理な注文に答えて頂き、またサンプルコードまで提供して頂きありがとうございます。
TMyPanelとTPanelをうまく入れ替えることで、見た目上いかにも
TPanelで複数行実現出来ているように見えます。
素晴らしいアイデアをありがとうございます。
ツイート | ![]() |