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

解決


LAIT  2005-10-16 08:34:53  No: 18118  IP: 192.*.*.*

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

編集 削除
Mr.XRAY  URL  2005-10-16 09:59:18  No: 18119  IP: 192.*.*.*

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

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

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

編集 削除
LAIT  2005-10-16 15:26:41  No: 18120  IP: 192.*.*.*

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

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

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

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

編集 削除
MDI  2005-10-16 15:58:09  No: 18121  IP: 192.*.*.*

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

編集 削除
LAIT  2005-10-16 16:10:21  No: 18122  IP: 192.*.*.*

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

編集 削除
MDI  2005-10-16 19:10:53  No: 18123  IP: 192.*.*.*

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-16 21:00:49  No: 18124  IP: 192.*.*.*

やりましたが、エラーが出ました。
(ソースコード)
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-16 21:34:20  No: 18125  IP: 192.*.*.*

>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-17 16:23:14  No: 18126  IP: 192.*.*.*

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

編集 削除
えーと  2005-10-17 16:39:24  No: 18127  IP: 192.*.*.*

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

編集 削除
LAIT  2005-10-18 17:17:52  No: 18128  IP: 192.*.*.*

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

編集 削除
cscs  2005-10-19 12:56:00  No: 18129  IP: 192.*.*.*

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

編集 削除
LAIT  2005-10-23 18:09:52  No: 18130  IP: 192.*.*.*

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

編集 削除
Mr.XRAY  URL  2005-10-24 00:33:53  No: 18131  IP: 192.*.*.*

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

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プロパティを変更する

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

編集 削除