xml etc ...ファイルの設定パターンを使用してDelphiアプリケーションのGUIを作成することは可能です。このような操作のためのフレームワークはすべて存在します。言語のようなスクリプトでは簡単ですが、Delphiでこの動作をシミュレートできますか?設定ファイルを使用した動的GUIの作成
私は無料のライブラリが必要です。
xml etc ...ファイルの設定パターンを使用してDelphiアプリケーションのGUIを作成することは可能です。このような操作のためのフレームワークはすべて存在します。言語のようなスクリプトでは簡単ですが、Delphiでこの動作をシミュレートできますか?設定ファイルを使用した動的GUIの作成
私は無料のライブラリが必要です。
XI LibraryまたはEControlを見てみましょう。
はい、可能です。このための擬似コードは、これには数TEDITや他のいくつかのコントロールが作成されます(たとえば、TAnotherEditOrAnotherControlTypeをしかし、あなたがのTControlとして編集変数を宣言した場合、あなたはあなたが必要とするすべてのコントロールを作成することができます)TPanel上のように宣言この
var
AParent:Tpanel;
Edit:TControl;
for i := 0 to ConfigItems.Count - 1 do
begin
if (ConfigItems[i].Type = 0) then Edit := TEdit.Create(AParent) as TControl
else Edit := TAnotherEditOrAnotherControlType.Create(APanel) as TControl;
//assume 20 pixels for each control, so thay will be placed one below another
Edit.Top := i * 20;
//Left in this case can be fixed
Edit.Left := 10;
Edit.Parent := AParent;
end;
のようなものです親。 IF句の代わりに、大きなCASE文を宣言し、適切な型のコントロールを作成することができます。当社AParentパネルに 重要な行は(動的制御を自動的に解放することができるように)
はい、TMS SoftwareによってTMS Scripter Studio Proを見てみましょう。視覚的なフォームデザイナ、オブジェクトインスペクタ 、そしてより多くのと
ネイティブ Pascalや基本的なスクリプトとフルIDE (統合開発環境)を使用してアプリケーションに究極の柔軟性とパワー を追加 。
ありがとうございます:)私はこれを、テキストボックス、ルール(行)、グラフィックスのみを使用するページデザイナーにしましたが、登録されたすべてのコントロールで動作するはずです。
[カフコードオフ近似]あなたが最初の最初にデザインを保存することができ、「フォームデザイナ」必要がある。もちろん、var
i, itemCount: Integer;
AClassName: string;
AnItemClass: TSomeBaseClass;
AnItem: TSomeDrivedBaseClass
ARect: TRect;
begin
// just so we have an initail size
ARect.Left := 100;
ARect.Top := 100;
ARect.Bottom := 200;
ARect.Right := 200;
// Alist is a specialised TStringList
for i := 0 to itemCount - 1 do
begin
AClassName := Alist.ByKey['Class' + IntToStr(i)]; // locate class name
AnItemClass := TSomeBaseClass(GetClass(AClassName)); // ClassName must be registered
AnItem := AnItemClass.Create(OwnerComponent, ARect, AParent);
AnItem.LoadFromFile(IntToStr(i), AList); // specialised loader that reads and sets all necessary properties
AddItemToComponentList(AnItem); // Add to form/frame/panel whatever
end;
end;
- 省は、私はよ...上記のちょうど逆であります読者のための練習としてそれを残してください。少し変更を加えれば、Delphiを使ってDFMファイルを読むことができます:)
ストリームとファイルからdfmファイルを保存して読み込むことができます。フォーム全体、またはコンポーネントとその子要素のみを保存/ロードできます。
例:
バイナリとして:テキストとして
AStream.WriteComponent(AComponent);
MyComponent:= Result:= AStream.ReadComponent(AComponent);
:
procedure WriteComponentAsText(AStream: TStream; AComponent: TComponent);
var
BinStream:TMemoryStream;
begin
BinStream := TMemoryStream.Create;
try
BinStream.WriteComponent(AComponent);
BinStream.Seek(0, soFromBeginning);
ObjectBinaryToText(BinStream, AStream);
finally
BinStream.Free
end;
end;
function ReadComponentAsText(AStream: TStream; AComponent: TComponent): TComponent;
var
BinStream:TMemoryStream;
begin
BinStream := TMemoryStream.Create;
try
ObjectTextToBinary(AStream, BinStream);
BinStream.Seek(0, soFromBeginning);
Result:= BinStream.ReadComponent(AComponent);
finally
BinStream.Free
end;
end;
あなたがRegisterClassで保存またはロードするすべてのクラスを登録する必要があります。
RegisterClass(TPanel);
+1、このXIライブラリはグレーに見えますt。 – mghie
XIは自分の要件を完全に満たしているようですが、それは無料ではありません。私は最初の質問でそのことを言及すべきだった。 – user114285