AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Wie erstelle ich dynamische forms richtig ?

Ein Thema von Int3g3r · begonnen am 5. Mär 2019 · letzter Beitrag vom 6. Mär 2019
Antwort Antwort
Int3g3r

Registriert seit: 28. Nov 2018
Ort: Schweiz
118 Beiträge
 
Delphi 10.3 Rio
 
#1

Wie erstelle ich dynamische forms richtig ?

  Alt 5. Mär 2019, 11:24
Guten Tag,

Ich möchte wissen wie man Forms dynamisch richtig und ressourcensparend erstellt.

Ich habe das Gefühl das mein momentaner Ansatz viel zu aufwändig / falsch ist.
Der Ansatz funktioniert, nur habe ich zweifel das dieser ressourcen spart da jedes Form komplett erstellt wird.

Wie ihr im code seht möchte ich jedes dynamisch erstellte Form(child) ansprechen können um jeweilige Parameter definieren zu können.
Dazu müssen die childs innerhalb eines containers (scrollbox) positioniert werden.

Ist dieser Ansatz korrekt ? Was könnte ich verbessern ?

Delphi-Quellcode:
unit Unit2;

interface

uses form_child;


type
   TForm2 = class(TForm)
      RadioGroup1: TRadioGroup;
      BitBtn1: TBitBtn;
      cxTimeEdit1: TcxTimeEdit;
      DateTimePicker1: TDateTimePicker;
      JvTimeEdit1: TJvTimeEdit;
    BitBtn2: TBitBtn;
      Label1: TLabel;
      btnCreateChild: TBitBtn;
      BitBtn3: TBitBtn;
      cxScrollbox: TcxScrollBox;
      cxDBTimeEdit1: TcxDBTimeEdit;
      Edit1: TEdit;
      dxMemData1: TdxMemData;
      dxMemData1time: TTimeField;
      DataSource1: TDataSource;
      dxLayoutControl1Group_Root: TdxLayoutGroup;
      dxLayoutControl1: TdxLayoutControl;
      dxLayoutItem1: TdxLayoutItem;
      dxLayoutItem2: TdxLayoutItem;
      dxLayoutGroup1: TdxLayoutGroup;
      procedure cxButton1Click(Sender: TObject);
      procedure btnCreateChildClick(Sender: TObject);
      procedure BitBtn3Click(Sender: TObject);
      procedure FormCreate(Sender: TObject);
      procedure FormActivate(Sender: TObject);
      procedure cxDBTimeEdit1Enter(Sender: TObject);
   private
      { Private declarations }
      ChildArray: array of Tfrm_Child;
      ChildArraySize: integer;
      ContainerActualWidth: integer;
      ContainerActualHeigt: integer;
   public
      { Public declarations }
   end;

var
   Form2: TForm2;

implementation


procedure TForm2.btnCreateChildClick(Sender: TObject);
begin
      ChildArraySize := (ChildArraySize+1);
      SetLength(ChildArray, ChildArraySize);
      ChildArray[ChildArraySize-1] := Tfrm_child.Create(Form2);
      ChildArray[ChildArraySize-1].Align := alLeft;
      ChildArray[ChildArraySize-1].Parent := cxScrollbox;
      ChildArray[ChildArraySize-1].AlignWithMargins := true;
      ChildArray[ChildArraySize-1].pnlchild.Color := clRed;
      ChildArray[ChildArraySize-1].pnlchild.Caption := 'ArrayINDEX ='+(ChildArraySize-1).ToString;
      ChildArray[ChildArraySize-1].Show;
end;

procedure TForm2.FormCreate(Sender: TObject);
begin
   ChildArraySize := 0;
   ContainerActualWidth := cxScrollbox.Width;
   ContainerActualHeigt := cxScrollbox.Height;
end;

Geändert von Int3g3r ( 5. Mär 2019 um 14:04 Uhr)
  Mit Zitat antworten Zitat
Alt 5. Mär 2019, 12:38     Erstellt von mkinzler
Dieser Beitrag wurde von mkinzler gelöscht.
Benutzerbild von haentschman
haentschman
Online

Registriert seit: 24. Okt 2006
Ort: Seifhennersdorf / Sachsen
5.312 Beiträge
 
Delphi 12 Athens
 
#3

AW: Wie erstelle ich dynamische forms richtig ?

  Alt 6. Mär 2019, 07:19
Moin...
Zitat:
ressourcensparend
...und DevExpress ist ein Widerspruch in sich selbst.
Zum Thema:
Im Prinzip machst du es richtig. Ich würde aber statt dem array eine TObjectList<TForm> oder ein TObjectDictionary<string, TForm> nehmen.
Über die Freigabe der Forms kann man diskutieren. Du verwendest Form2 als Owner. Du könntest auch die Liste die Forms freigeben lassen. (OwnObjects). Das ist hilfreich wenn man einzelne Forms aus der Liste entfernt.
  Mit Zitat antworten Zitat
Int3g3r

Registriert seit: 28. Nov 2018
Ort: Schweiz
118 Beiträge
 
Delphi 10.3 Rio
 
#4

AW: Wie erstelle ich dynamische forms richtig ?

  Alt 6. Mär 2019, 07:26
Moin...
Zitat:
ressourcensparend
...und DevExpress ist ein Widerspruch in sich selbst.
Zum Thema:
Im Prinzip machst du es richtig. Ich würde aber statt dem array eine TObjectList<TForm> oder ein TObjectDictionary<string, TForm> nehmen.
Über die Freigabe der Forms kann man diskutieren. Du verwendest Form2 als Owner. Du könntest auch die Liste die Forms freigeben lassen. (OwnObjects). Das ist hilfreich wenn man einzelne Forms aus der Liste entfernt.
Ja DevExpress ist sehr überladen bei vielen Komponenten, bieten aber einen guten support und die Komponenten laufen stabil.

Könntest du mir ein Beispiel schreiben wie du das meinst mit der TObjectList und TObjectDictionary ?
  Mit Zitat antworten Zitat
Benutzerbild von haentschman
haentschman
Online

Registriert seit: 24. Okt 2006
Ort: Seifhennersdorf / Sachsen
5.312 Beiträge
 
Delphi 12 Athens
 
#5

AW: Wie erstelle ich dynamische forms richtig ?

  Alt 6. Mär 2019, 07:32
Zitat:
Komponenten laufen stabil
"Element '' hat kein übergeordnetes Fenster" habe ich 30 Mal am Tag. Stabil ist was anderes.
Zitat:
Könntest du mir ein Beispiel schreiben wie du das meinst mit der TObjectList und TObjectDictionary
...mache ich dir.
Hausaufgaben:
http://docwiki.embarcadero.com/Libra...ns.TObjectList
http://docwiki.embarcadero.com/Libra...jectDictionary
Frage:
Wo ist der Unterschied zwischen den beiden?
  Mit Zitat antworten Zitat
Int3g3r

Registriert seit: 28. Nov 2018
Ort: Schweiz
118 Beiträge
 
Delphi 10.3 Rio
 
#6

AW: Wie erstelle ich dynamische forms richtig ?

  Alt 6. Mär 2019, 08:25
Wo ist der Unterschied zwischen den beiden?
TObjectList ist eine Liste von TObjects, wenn ich aus dieser Liste ein Object entfernte wird es automatisch freigegeben.
TObjectDictionary überprüft automatisch ob ein TObject noch gebraucht wird oder nicht und gibt dies automatisch frei wenn es nicht mehr gebraucht wird.

Hmm... also ist TObjectList ein Array von Objekten mit dem unterschied wenn ich etwas aus der TObjectList entferne wird es auch automatisch freigegeben.
Mit meinem Array oben bin ich selber verantwortlich das ALLE TObjects wieder freigegeben werden die ich erstellt habe.

Korrekt ?
  Mit Zitat antworten Zitat
Benutzerbild von uligerhardt
uligerhardt

Registriert seit: 19. Aug 2004
Ort: Hof/Saale
1.735 Beiträge
 
Delphi 2007 Professional
 
#7

AW: Wie erstelle ich dynamische forms richtig ?

  Alt 6. Mär 2019, 08:49
Zitat:
Komponenten laufen stabil
"Element '' hat kein übergeordnetes Fenster" habe ich 30 Mal am Tag. Stabil ist was anderes.
Da machst du was falsch. Die Lernkurve ist zwar steil, aber das Zeug läuft bei uns rund.
Uli Gerhardt
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 05:16 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz