掲示板システム
ホーム
アクセス解析
カテゴリ
ログアウト
角丸の四角形に複数行の文字列を表示するには? (ID:20751)
名前
ホームページ(ブログ、Twitterなど)のURL (省略可)
本文
Panelのリージョンを変形し複数行の文字を表示することもできました。 期待どおり、角丸の外側が他のコントロールに重なっても汚くなりません。 最終的に次のようなコードになりました。 本件について、アドバイスをいただいたigyさん、ありがとうございました。 今回作成した2つのコードは他のスレッドでMr.XRAYさん、ぽんちゃんさんがご提示くださったコードを参考にしています。 ありがとうございます。 以下、コードを掲載させていただきますね。 //Panelのリージョンを変形し複数行の文字を表示20060330 byデル太 //わかりやすいように角丸の丸みを強くしました //角丸の外側には文字が表示されずクリックイベントも発生しないことを確認できます //角丸の外側に他のPanelが重なっても汚くなりません //参考ページ:http://yokohama.cool.ne.jp/chokuto/urawaza/windowrgn.html←感謝m(__)m unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, ExtCtrls; type TMyPanel = class(TPanel) protected procedure Paint; override; end; TForm1 = class(TForm) Button1: TButton; Panel1: TPanel; //重なったときの表示を確認するためのもの Label1: TLabel; // 〃 procedure Button1Click(Sender: TObject); procedure MyPanelClick(Sender: TObject); //APanel用イベントハンドラ private { Private 宣言 } public { Public 宣言 } end; var Form1: TForm1; implementation {$R *.dfm} { TMyPanel } procedure TMyPanel.Paint; var ARect: TRect; S: String; begin inherited; ARect := Rect(5,5,Width -5, Height -5); S := 'この日本語文をラベルの表面に表示します'+#13+'改行も使えます'; with Self do begin DrawText(Self.Canvas.Handle, PChar(S), -1, ARect, DT_WORDBREAK); //ワードラップを指定 end; end; procedure TForm1.Button1Click(Sender: TObject); var APanel: TMyPanel; rgn: HRGN; begin APanel := TMyPanel.Create(Self); APanel.Top := 10; APanel.Left := 20; APanel.Width := 200; APanel.Height := 60; APanel.BevelOuter := bvNone; //デフォルトから変更 APanel.OnClick := MyPanelClick; //クリックイベントをイベントハンドラへ結びつける APanel.Parent := Self; //フォーム上に表示 rgn := CreateRoundRectRgn(0,0,APanel.Width-5,APanel.Height-5,70,50); APanel.Color := clRed; SetWindowRgn(APanel.Handle, rgn, true); DeleteObject(rgn); end; procedure TForm1.MyPanelClick(Sender: TObject); begin ShowMessage('APanel Clicked!'); end; end.
←解決時は質問者本人がここをチェックしてください。
更新する
戻る
掲示板システム
Copyright 2021 Takeshi Okamoto All Rights Reserved.