初めまして。質問です!
動的にEdit,Label等を作成する方法は、
TEdit.Create(Self)
等で分かるのですが、
これって、PGMを実行している時だけですよね?
例えば、新規にフォームを作る際、EditやLabel等を動的に作成して、
ソースに反映させる方法ってあるのですか?
TcomponentList等を使って作成出来るのですか??
知っている方、宜しくお願いします。
> 例えば、新規にフォームを作る際、EditやLabel等を動的に作成して、
> ソースに反映させる方法ってあるのですか?
ありません。実行時に動的にソースを変更できません。
動的に作成する事自体をソースに書かなければならないので、なぜ、そのような
ことが必要なのか分かりません。例えば、ユーザがボタンを3回押して、TLabel
を三つつくったとします。その事を次回の起動時に反映させるには、ini ファイル
等に3回押したことを記録し、それを起動時に読みとって動的に3つのラベルを
つくるようにすることはそのようにコードを書けば出来ます。
誤解していたらすみませんが、これ、テンプレートのことでは?
コンポーネントテンプレート、リポジトリ、フレームをキーワードにして
ヘルプで調べてみてください。
返事ありがとうございます。
えーと、もう少し詳しく言いますと、
別の言語で開発したアプリがあってそのフォーム
(DelphiでいうEdit,Label,Grid等の位置、桁、内容等はファイルで持っている)
をDelphiのフォームで新規に作成したい!!と思いまして
つまり、自動変換ツールみたいなプログラムが作れればな〜
と思ったんですけど、ソース自体に書き込むのはやはり無理なんですかね?
> つまり、自動変換ツールみたいなプログラムが作れればな〜
> と思ったんですけど、ソース自体に書き込むのはやはり無理なんですかね?
簡単ではありませんが不可能ではないと思います。
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 ファイルの内容を研究してみてください。
XX.pas & YY.dfm をtxt形式等で作成して、
それを、pas、dfmファイルとして保存すれば
可能そうですね!
ありがとうございました。
ツイート | ![]() |