Zur Laufzeit erstellte Komponenten verwalten
-
Hi,
also ich hab mal eine Frage. In meinem kleinen Projekt verwende ich ein eine dynamische Anzahl von TFrames die ich über eine kleine "Klasse" erzeuge.
Der Framemanger ist ausschiesslich nur dazu da die Frames zu erzeugen. Früher habe ich intern ein DynamicArray verwendet, aber der Code wurde dadurch ziemlich unübersichtlich. Aufgrund dessen habe ich mich jetzt hingesetzt und den Manager neu gebastelt.
Der neue Aufbau ist zwar weitaus besser zu lesen und ist - meiner Meinung nach im Vergleich zum alten Code recht übersichtlich. Allerdings gefällt mir der neue Aufbau immer noch nicht sonderlich gut da ich hier immer noch das TObject casten muss um auf den "Tag" zu zugreifen um intern im Manager zu wissen, welcher Button Click für das entsprechende TFrame ist. Insbesondere deshalb, weil ich weiterhin auf eine Public Member Funktion im jeweligen TFrame zugreifen muss
Der Manager erzeugt neben dem TFrame auch einen ToolButton sowie einen Menüeintrag. Während dem erstellen weise ich der "Tag Property" eine ID zu. (auf diese greife ich dann via Cast (siehe oben) zu.
Ich habe mal den Testprojekt Source zum selbst kompilieren hochgeladen und ist hier zu finden: - gelöscht -
Ich habe das Testprojekt auf ein absolutes Minimum beschränkt: Das erzeugen der Frames - mehr nicht.
Jetzt meine Frage:
Wie kann ich das besser "verwalten" ohne immer das TObject zu casten? Der Code ist zwar meiner Meinung nach ganz ok und wird auch nicht mehr erweitert aber so ganz effizient erscheint mir das trotzdem nicht...Ursprünglich hatte ich vor eine kleine Struktur zu benutzen wo ich die Zeiger speichere und diese Struktur wollte ich dann in eine TList packen. Danach einfach via Schleife und Cast darauf zugreifen, aber hier habe ich Zugriffsverletzungen bekommen, dazu kommt noch ein ausführlicheres Post! Aber den Weg mit der Struct habe ich - erstmal verworfen. Aber dazu wollte ich noch ein Post machen.
Nebenfrage:
Das dynamische erstellen vom TFrame dient dazu um mit einem Server über TCP zu verbinden. Also jedes Frame ist sozusagen ein "eigenständiger" TCP Client.Warum muss ich innerhalb dem TFrame auf manche Komponenten via "this" zugreifen? Wenn ich das z.b. bei einem Memo nicht mache, wird der Text in das nächste Memo im nächsten Frame geschrieben. Bisher kommt das "this" mehr oder weniger durch Ausprobieren dazu, aber so ganz verstanden habe ich das nicht warum ich das so machen muss... Erleuchtung erbeten, danke
So, jetzt mal das andere Post vorbereiten
-
Danke für die rege Teilnahme
Ich habs jetzt anders gemacht und der Link oben ist jetzt entfernt.
Kann ein Mod den Thread hier bitte löschen? Danke!
-
Erst sagst du uns, welche Lösung du gefunden hast!
Dass (noch) niemand geantwortet hat, heisst ja nicht automatisch, dass sich niemand mit deinem Problem befasst hat.
-
Jansen schrieb:
Erst sagst du uns, welche Lösung du gefunden hast!
Dass (noch) niemand geantwortet hat, heisst ja nicht automatisch, dass sich niemand mit deinem Problem befasst hat.
Zu hilfe, ich werde von Jansen unterdrückt :p
Momentan die "fertige" Version: http://ql.spacequadrat.de/misc/FrameTest.rar