ページコントロールを動的に削除

解決


はざま  2007-05-17 03:44:28  No: 26146

はじめまして。
ページコントロールを動的に生成させることはネット上でいろいろなサンプルがありましたのでなんとかできました。
しかしながら、ページを削除しようとすると、なぜかアドレスの読み込み違反としかられます。
pagecontrol1.ActivePage.Free;
ボタンを押したときにこれをしているだけです。
いくつもの  フォームの上にあるページの上にフレームを乗せていてそのフレームにあるボタンを押すと  フォーム.unitの関数により上記を実行するんですが、なぜかエラー出てしまいます。タブ式のエディタやブラウザをよく見かけるにもかかわらず、こんなところでつまずく自分が情けないです。


グッチ聞くぞう  2007-05-17 21:20:37  No: 26147

>なぜかエラー出てしまいます
まぁ、コードのドコかにミスがあるんでしょうねぇ。
>こんなところでつまずく自分が情けないです。
グッチ言うぞう(はざま)さん、ガンバ。


WMあpp  2007-05-17 21:30:52  No: 26148

これは、ユーザーメッセージを定義して、PostMessageする例です。

const
  WM_TabDelete = WM_APP +400;

type
  TForm1 = class(TForm)
    Button1: TButton;
    PageControl1: TPageControl;
    procedure Button1Click(Sender: TObject);

  private
    { Private 宣言 }
    procedure WMTabDelete(var Msg: TMessage); message WM_TabDelete;
    procedure ButtonCloseClick(Sender: TObject);
  public
    { Public 宣言 }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
var
  tab: TTabSheet;
  btn: TButton;
begin
  tab:= TTabSheet.Create(self);
  tab.PageControl:= PageControl1;
  PageControl1.ActivePage:= tab;
  btn:= TButton.Create(tab);
  btn.Caption:= '×';
  btn.SetBounds(10, 10, 100, 20);
  btn.Parent:= tab;
  btn.OnClick:= ButtonCloseClick;
end;

procedure TForm1.ButtonCloseClick(Sender: TObject);
begin
  //これだとエラーになる
  //if PageControl1.ActivePage<>nil then
  //   PageControl1.ActivePage.Free;

  PostMessage(Handle, WM_TabDelete, 0, 0);
end;

procedure TForm1.WMTabDelete(var Msg: TMessage);
begin
  if PageControl1.ActivePage<>nil then
     PageControl1.ActivePage.Free;
end;

end.


はざま  2007-05-18 10:15:22  No: 26149

>>グッチ聞くぞう
ありがとうございます。    (^ ^;;;

>>WMあpp
詳細な解説ありがとうございます。折り返し質問申し訳ないですが、ユーザメッセージを定義する場合vistaには対応できるのでしょうか。
いまdelphi6.0  xpを使用しているのですが、あまりウィンドウズメッセージは使いたくないんです。。。
API使うとVISTAだと危ういというのは誤解なんでしょうか。。。


はぁ  2007-05-18 13:19:46  No: 26150

>API使うとVISTAだと危ういというのは誤解なんでしょうか。。

誤解です。
本当なら、APIのラッパであるVCLは使えません。


はざま  2007-05-19 07:31:26  No: 26151

>>はぁさん
すいません。そうですよね。

皆さま本当にありがとうございます。どうにか目的が達成できました。


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

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






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