![]() |
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] |
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; |
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 ? |
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); |
Re: Programmoberfläche dynamisch erzeugen
Zitat:
Gerd |
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. |
Re: Programmoberfläche dynamisch erzeugen
Dann aber FreeAndNil()
|
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.
|
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.
|
Re: Programmoberfläche dynamisch erzeugen
Zitat:
|
Re: Programmoberfläche dynamisch erzeugen
wie würde ich denn nun am besten z.b. eine tabelle dynamisch erstellen lassen ?
|
Re: Programmoberfläche dynamisch erzeugen
mit welcher Komponente würdest du denn eine Tabelle darstellen wenn du es nicht dynamich machst? mit genau der gleichen solltest du es auch machen wenn es dynmich erzeugt wird.
|
Re: Programmoberfläche dynamisch erzeugen
Zitat:
Ich wollte damit nur angeben, daß es möglich ist, daß das Objekt (TButton) an einer anderen Stelle freigegeben werden "kann" und man sich schon überlegen muss, wann man mit deiner Variante die Buttons freigibt. Sollte die andere Stelle "schneller" mit der Freigabe sein als du, dann läufst du mit deiner Variante in eine Exception. Wie gesagt, dein array bekommt einfach nicht mit, wenn die Buttens von einer anderen Stelle freigegeben werden. Wenn schon, dann solltes du bei der Freigabe dich überzeugen, daß der Zeiger in deinem array tatsächlich auf eine noch gültige instanz zeigt. (Einfach mit components und componentcount prüfen) Teilweise ist es ja auch gewünscht, daß ein anderes Objekt sich um die Freigabe meiner manuell erzeugen Objekte kümmert. Siehe TObjectList mit "ownsobjects:=true". Würdest du dich dort auch um die Freigabe deiner erzeugten Objekte kümmern? Die gleiche Ausnahme sehe ich in Objekten vom Type TComponent. Wenn ich einen Owner angebe, dann weiss ich, dass ich die Kontrolle abgeben kann. Gerd |
Re: Programmoberfläche dynamisch erzeugen
Zitat:
Gerd |
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:57 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz