子フォームを表示するには?

解決


LAIT  2005-10-16 17:34:53  No: 18118

MDI親フォームにMDI子フォームを表示するにはどうすればいいでしょうか。
Delphi 6 Personal
お願いします。


Mr.XRAY  URL  2005-10-16 18:59:18  No: 18119

MDIのアプリを作成したいということでしょうか.

(1)新規プロジェクトを作成.FormはForm1となっている
(2)Form1のFormStyleプロパティをfsMDIFormに
(3)[ファイル][新規作成]で[フォーム].Form2となっているハズ
(4)Form2のFormStyleプロパティをfsMDIChildにする

これで実行してみて下さい.
ということなのかな.外していたらゴメン!!


LAIT  2005-10-17 00:26:41  No: 18120

新規作成ボタンをクリックする。

新しいタブが自動で作成される(タブ式MDI風に)

新しい子フォームを表示する。

という風にタブ式MDIにしたいのです。
説明不足でごめんなさい。


MDI  2005-10-17 00:58:09  No: 18121

http://delphi.sakura.vg/index2.html
ここのタブブラウザ編が参考になるかもしれません。


LAIT  2005-10-17 01:10:21  No: 18122

このページは見ましたが、今一説明がわかりません。
わがままみたいですいません。


MDI  2005-10-17 04:10:53  No: 18123

Mr.XRAYさんが書いた、
>(1)新規プロジェクトを作成.FormはForm1となっている
>(2)Form1のFormStyleプロパティをfsMDIFormに
>(3)[ファイル][新規作成]で[フォーム].Form2となっているハズ
>(4)Form2のFormStyleプロパティをfsMDIChildにする
をしてから、TabControlを貼り付けて、
新規作成ボタンのイベントに
var
form :TForm2;
begin
  form := TForm2.Create(Application);
  TabControl1.Tabs.AddObject('新規タブ', TObject(form));
end;
でできるはずです。


LAIT  2005-10-17 06:00:49  No: 18124

やりましたが、エラーが出ました。
(ソースコード)
unit Unit2;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, Buttons, StdCtrls, ExtCtrls, ComCtrls;

(中略)

  form : Form3;  //ここで、[エラー] Unit2.pas(54): 未定義の識別子 : 'Form3'が発生
implementation

uses Unit1, Unit3;

{$R *.dfm}

(中略)

procedure TForm2.SpeedButton3Click(Sender: TObject);
var
form :Form3;
begin
form := Form3.Create(Application);  //ここで演算子またはセミコロン (';') が必要ですと表示される
Form1.TabControl1.Tabs.AddObject('無題', TObject(form));
end;

(エラー内容)
[エラー] Unit2.pas(54): 未定義の識別子 : 'Form3'
[エラー] Unit2.pas(133): 演算子またはセミコロン (';') が必要です
[致命的エラー] Project1.dpr(7): 'Unit2.pas' ユニットはコンパイルできませんでした

ちなみに、Delphi 6 Personalです。


MDI  2005-10-17 06:34:20  No: 18125

>form : Form3;  //ここで、[エラー] Unit2.pas(54): 未定義の識別子 : 'Form3'が発生
form : TForm3;
じゃないですか?

>procedure TForm2.SpeedButton3Click(Sender: TObject);
>var
>form :Form3;
>begin
>form := Form3.Create(Application);  //ここで演算子またはセミコロン (';') が必要ですと表示される
>Form1.TabControl1.Tabs.AddObject('無題', TObject(form));
>end;
これも
var
form :TForm3;
begin
form := TForm3.Create(Application);
じゃないですか?


LAIT  2005-10-18 01:23:14  No: 18126

TForm3にしても同じエラーが表示されます。


えーと  2005-10-18 01:39:24  No: 18127

Unit2なので、TForm2・・・なんて事は無いですか?
TForm3を使いたいなら、上の方のusesにUnit3を追加するのかな。


LAIT  2005-10-19 02:17:52  No: 18128

モジュールエラーが発生しました。


cscs  2005-10-19 21:56:00  No: 18129

技術的な面での問題ではないですよね。自身でデバッグされたほうがよろしいのでは・・・?
どのクラス、どのユニットを使用すべきかなんて、こちらでは判断できませんし。


LAIT  2005-10-24 03:09:52  No: 18130

わがまま言ってすいませんでした。
ありがとうございました。


Mr.XRAY  URL  2005-10-24 09:33:53  No: 18131

ちょっと気になったので...
新規にフォームを作成した時に,例えば以下の様になっているバズです.

unit Unit2;   //(1)保存するユニット名

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs;

type
  TForm2 = class(TForm)
  private
    { Private 宣言 }
  public
    { Public 宣言 }
  end;

var
  Form2: TForm2;  //(2)フォームの名前
 
implementation

{$R *.DFM}

end.
 
上の(1)(2)をコード上で書換えていませんか?
もちろん書換える方法もありますが,最初の内は,
(1)の部分 -- Unit2のタブを選択して[ファイル][名前を付けて保存]
(2)の部分 -- フォームを選択して,オブジェクトインスペクタでNameプロパティを変更する

で変更した方が無難です.最初の内は,理屈よりも,とにかく約束ごと
にしたがってやってみることです.いろいろな技はそれからでも遅く
ありません.あせらないことです.


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

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






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