Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Programmoberfläche dynamisch erzeugen (https://www.delphipraxis.net/99128-programmoberflaeche-dynamisch-erzeugen.html)

meisteralex 7. Sep 2007 08:00


Programmoberfläche dynamisch erzeugen
 
Hi Leute, ich möchte eine Client - Server - Applikation schreiben, in welcher die Programmoberfläche beim Client dinamisch erzeugt wirde.
Als Beispiel bekommt der Client vom Server z.b. die Information "Zeige eine Tabelle mit 2x2 Spalten an und darunter 2 Buttons welche die Aufschriften 'Speichern' und 'Speichern unter' haben".
Der Client soll nun aus diesen Informationen dynamisch eine Programmoberfläche generieren!
Also so ein bischen wie HTML soll das funktionieren

Ist sowas in Delphi zu realisieren ?

[edit=SirThornberry]Titel korrigiert - Mfg, SirThornberry[/edit]

SirThornberry 7. Sep 2007 08:03

Re: Programmoberfläche dinamisch erzeugen
 
natürlich. Wenn du Dinge auf dem Formular zur Designzeit plazierst wird dir das beim Laden abgenommen. Wenn nicht musst du eben genau das machen was sonst automatisch gemacht wird.
Delphi-Quellcode:
ObjectInstanz := TDeinObject.Create(möglicheParameter);
[...]
ObjectInstanz.Free;

meisteralex 7. Sep 2007 08:08

Re: Programmoberfläche dinamisch erzeugen
 
puhhhh wie mache ich das z.b. mit einem button ?
und wie kann ich dem button dann ne funktion zuweisen ?

SirThornberry 7. Sep 2007 08:12

Re: Programmoberfläche dynamisch erzeugen
 
such mal nach "dynamisch" da solltest du auch einiges zu dem Thema finden.
Für den Button könnte es so aussehen.
Delphi-Quellcode:
private
  fButtons: Array of TButton;
[...]

var
  lButton : TButton;
begin
  lButton := TButton.Create(Self);
  lButton.Parent := Self;
  lButton.SetBounds(0, 0, 200, 50);
  lButton.OnClick := DeineClickMethode;

  SetLength(fButtons, Length(fButtons) + 1);
  fButtons[Length(fButtons) - 1] := lButton;
[...]
//spätestens zu Programmende wieder zerstören
for i := 0 to Length(fButtons) - 1 do
  fButtons[i].Free;
SetLength(fButtons, 0);

bernau 7. Sep 2007 08:40

Re: Programmoberfläche dynamisch erzeugen
 
Zitat:

Zitat von SirThornberry
Delphi-Quellcode:
//spätestens zu Programmende wieder zerstören
for i := 0 to Length(fButtons) - 1 do
  fButtons[i].Free;

Ist es nicht so, daß das Form sich um die Zerstörung der angelegten Buttons kümmert, da du ja die Form, welche ja in "self" hinterlegt ist, als Parent und als Owner angegeben hast?


Gerd

SirThornberry 7. Sep 2007 08:49

Re: Programmoberfläche dynamisch erzeugen
 
psst! Jemandem der damit anfängt Objekte zu erzeugen sollte gar nicht erst auf die Idee kommen etwas nicht frei zu geben.
Und es schadet ja nicht wenn er es frei gibt.

mkinzler 7. Sep 2007 08:54

Re: Programmoberfläche dynamisch erzeugen
 
Dann aber FreeAndNil()

SirThornberry 7. Sep 2007 08:57

Re: Programmoberfläche dynamisch erzeugen
 
ok, da geh ich grad noch mit. Wobei der Programmierer auch so programmieren sollte das er weiß ob ein Object frei gegeben wurde oder nicht und das nicht nur anhand dessen ob die Instanzvariable nil ist. Es gibt einige die führen mehrfach ein FreeAndNil auf ihre Instanzvarible aus anstelle die Programmlogic so zu gestalten das nur einmal das ganze aufgerufen wird und das auch nur wenn es notwendig ist.

mkinzler 7. Sep 2007 08:59

Re: Programmoberfläche dynamisch erzeugen
 
Stimmt sicherlich, aber wenn er die Objekte mit einem Owner erzeugt und sie trotzdem händisch freigibt, könnte es sonst zu Problemen kommen.

SirThornberry 7. Sep 2007 09:00

Re: Programmoberfläche dynamisch erzeugen
 
Zitat:

Zitat von mkinzler
Stimmt sicherlich, aber wenn er die Objekte mit einem Owner erzeugt und sie trotzdem händisch freigibt, könnte es sonst zu Problemen kommen.

Nein, denn die Componenten tragen sich in ihrem Destructor aus dem Owner aus. Zu dem weiß der Owner nicht von irgendwelchen Instanzvariablen die es in rauhen Mengen geben kann.


Alle Zeitangaben in WEZ +1. Es ist jetzt 17:12 Uhr.
Seite 1 von 2  1 2      

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