Edit等をForm上に動的作成し、PGMを実行してないForm上でその情報を反映させるには?

解決


行き詰まり屋  2004-07-21 05:49:58  No: 9992

初めまして。質問です!
動的にEdit,Label等を作成する方法は、
TEdit.Create(Self)
等で分かるのですが、
これって、PGMを実行している時だけですよね?
例えば、新規にフォームを作る際、EditやLabel等を動的に作成して、
ソースに反映させる方法ってあるのですか?
TcomponentList等を使って作成出来るのですか??
知っている方、宜しくお願いします。


jok  2004-07-21 06:14:32  No: 9993

> 例えば、新規にフォームを作る際、EditやLabel等を動的に作成して、
> ソースに反映させる方法ってあるのですか?

ありません。実行時に動的にソースを変更できません。

動的に作成する事自体をソースに書かなければならないので、なぜ、そのような
ことが必要なのか分かりません。例えば、ユーザがボタンを3回押して、TLabel
を三つつくったとします。その事を次回の起動時に反映させるには、ini ファイル
等に3回押したことを記録し、それを起動時に読みとって動的に3つのラベルを
つくるようにすることはそのようにコードを書けば出来ます。


ふぐちゃん  2004-07-21 06:21:34  No: 9994

誤解していたらすみませんが、これ、テンプレートのことでは?
コンポーネントテンプレート、リポジトリ、フレームをキーワードにして
ヘルプで調べてみてください。


行き詰まり屋  2004-07-21 07:38:11  No: 9995

返事ありがとうございます。
えーと、もう少し詳しく言いますと、
別の言語で開発したアプリがあってそのフォーム
(DelphiでいうEdit,Label,Grid等の位置、桁、内容等はファイルで持っている)
をDelphiのフォームで新規に作成したい!!と思いまして
つまり、自動変換ツールみたいなプログラムが作れればな〜
と思ったんですけど、ソース自体に書き込むのはやはり無理なんですかね?


jok  2004-07-21 08:35:17  No: 9996

> つまり、自動変換ツールみたいなプログラムが作れればな〜
> と思ったんですけど、ソース自体に書き込むのはやはり無理なんですかね?

簡単ではありませんが不可能ではないと思います。
Delphi の RAD では、フォームの定義は *.pas とそれに対応する *.dfm ファイル
があれば、完全に記述されます。例えば、Form2 に適当に Edit1 と Label1 を
置いたときの pas ファイルは

unit Unit2;

interface

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

type
  TForm2 = class(TForm)
    Edit1: TEdit;
    Label1: TLabel;
  private
    { Private 宣言 }
  public
    { Public 宣言 }
  end;

var
  Form2: TForm2;

implementation

{$R *.DFM}

end.

であり、対応する dfm ファイルの内容は

object Form2: TForm2
  Left = 192
  Top = 108
  Width = 696
  Height = 480
  Caption = 'Form2'
  Color = clBtnFace
  Font.Charset = SHIFTJIS_CHARSET
  Font.Color = clWindowText
  Font.Height = -12
  Font.Name = 'MS Pゴシック'
  Font.Style = []
  OldCreateOrder = False
  PixelsPerInch = 96
  TextHeight = 12
  object Label1: TLabel
    Left = 36
    Top = 52
    Width = 33
    Height = 12
    Caption = 'Label1'
  end
  object Edit1: TEdit
    Left = 32
    Top = 16
    Width = 121
    Height = 20
    TabOrder = 0
    Text = 'Edit1'
  end
end

です。ですから

> (DelphiでいうEdit,Label,Grid等の位置、桁、内容等はファイルで持っている)

のファイルを読みとって上のような pas と dfm ファイルを生成するツールをつ
くることは出来ると思います。dfm ファイルの内容を研究してみてください。


行き詰まり屋  2004-07-21 09:12:07  No: 9997

XX.pas & YY.dfm をtxt形式等で作成して、
それを、pas、dfmファイルとして保存すれば
可能そうですね!
ありがとうございました。


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

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






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