AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein GUI-Design mit VCL / FireMonkey / Common Controls Delphi TForm Klasse dynamisch erstellen ja nachdem ob Klasse vorhanden ist
Thema durchsuchen
Ansicht
Themen-Optionen

TForm Klasse dynamisch erstellen ja nachdem ob Klasse vorhanden ist

Ein Thema von fisipjm · begonnen am 15. Nov 2021 · letzter Beitrag vom 23. Nov 2021
Antwort Antwort
Seite 1 von 2  1 2      
fisipjm

Registriert seit: 28. Okt 2013
299 Beiträge
 
#1

TForm Klasse dynamisch erstellen ja nachdem ob Klasse vorhanden ist

  Alt 15. Nov 2021, 17:23
Hi,

ich versuch mal zu erklären was ich gerne machen würde.
Ich habe ein Programm mit einem Menü als Hauptfenster. Darin gibt es x Einträge die immer für eine Tabelle in einer Datenbank stehen. Das ganz läuft dynamisch. Es gibt also eine "MainForm" die alles notwendige enthält um die Informationen einer Tabelle der Datenbank anzuzeigen. Über eine Abfrage wird nun die Anzahl der Tabellen in der DB Abgefragt und je nach dem wie viele Tabellen da sind Einträge im Menü erstellt. Der Aufruf erfolgt in so fern dynamisch, dass die Form immer mit dem TabellenNamen erzeugt wird und in sich selbst dann die Captions usw. anpasst und die jeweiligen Daten darstellt. Ich habe also stand jetzt 20 Menüpunkte aber nur eine HauptMaske("TMainForm" - Ableitung von "TForm").
Was ich nun gern erreichen würde. Es gibt manche Tabellen wo die Maske einen leicht abweichenden Aufbau zum Standard haben soll. Ich leite mir also in der IDE eine neue Form "TTolleNeueForm" von "TMainForm" ab. Im Menu erstelle ich einen Punkt zum Aufruf händisch. Ich würde jetzt gerne erreichen das beim klick auf den händisch eingefügten Menü Punkt nicht die TMainForm created wird sondern die "TTolleNeueForm". Und das Dynmaisch, also zb. über getclass('T'+Tabellenname), die Forms würden nämlich jeweils wie die Tabellen heißen und über ein RegisterClass im initialize Teil kann ich das dann schön Programmweit abfragen ob es etwas gibt. Nur leider krieg ich das mit dem Create nicht hin.

Ich hoffe es ist einigermaßen verständlich was ich vor habe.

Grüße
PJM
  Mit Zitat antworten Zitat
BerndS

Registriert seit: 8. Mär 2006
Ort: Jüterbog
491 Beiträge
 
Delphi 12 Athens
 
#2

AW: TForm Klasse dynamisch erstellen ja nachdem ob Klasse vorhanden ist

  Alt 15. Nov 2021, 17:34
Ich habe das mal schnell hingetippt ohne zu testen. Aber so in etwas würde ich das machen, wobei die Funtion GetMainFormClass die entsprechende Formclass ermitteln müsste.
Delphi-Quellcode:
type
  TMainFormClass = class of TMainForm;

...
var
  FC: TMainFormClass ;
  F: TMainForm;
begin
  FC := GetMainFormClass(TableName);
  F := TC.Create(...);
  try
    ....
    F.ShowModal;
  finally
    F.Release;
  end;

 
end;
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.475 Beiträge
 
Delphi 12 Athens
 
#3

AW: TForm Klasse dynamisch erstellen ja nachdem ob Klasse vorhanden ist

  Alt 15. Nov 2021, 17:36
Und was funktioniert an GetClass('T' + Tabellenname) jetzt nicht?
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
fisipjm

Registriert seit: 28. Okt 2013
299 Beiträge
 
#4

AW: TForm Klasse dynamisch erstellen ja nachdem ob Klasse vorhanden ist

  Alt 16. Nov 2021, 08:28
Und was funktioniert an GetClass('T' + Tabellenname) jetzt nicht?
Also GetClass funktioniert, liefert mir aber logischerweise nur eine TPersistant zurück. Und ich scheitere daran aus dieser Tpersistant dann die Form zu createn. Ich befürchte ich hab da irgendwo noch eine riesen Wissenslücke
  Mit Zitat antworten Zitat
fisipjm

Registriert seit: 28. Okt 2013
299 Beiträge
 
#5

AW: TForm Klasse dynamisch erstellen ja nachdem ob Klasse vorhanden ist

  Alt 16. Nov 2021, 08:29
Ich habe das mal schnell hingetippt ohne zu testen. Aber so in etwas würde ich das machen, wobei die Funtion GetMainFormClass die entsprechende Formclass ermitteln müsste.
Delphi-Quellcode:
type
  TMainFormClass = class of TMainForm;

...
var
  FC: TMainFormClass ;
  F: TMainForm;
begin
  FC := GetMainFormClass(TableName);
  F := TC.Create(...);
  try
    ....
    F.ShowModal;
  finally
    F.Release;
  end;

 
end;
Was macht GetMainFormClass ?
  Mit Zitat antworten Zitat
BerndS

Registriert seit: 8. Mär 2006
Ort: Jüterbog
491 Beiträge
 
Delphi 12 Athens
 
#6

AW: TForm Klasse dynamisch erstellen ja nachdem ob Klasse vorhanden ist

  Alt 16. Nov 2021, 08:39
Zitat:
Was macht GetMainFormClass ?
Das wäre die Funktion, die anhand des Tabellennamens die Klassse des zu erstellenden Formulars zurück gibt.
Entweder man kodiert das hart oder registriert in einer TList/TDictionary die Formualrtypen und durchsucht diese.
Wenn man nichts findet, könnte es eine Standard geben.
  Mit Zitat antworten Zitat
Benutzerbild von Jasocul
Jasocul

Registriert seit: 22. Sep 2004
Ort: Delmenhorst
1.355 Beiträge
 
Delphi 11 Alexandria
 
#7

AW: TForm Klasse dynamisch erstellen ja nachdem ob Klasse vorhanden ist

  Alt 16. Nov 2021, 08:53
Es gibt manche Tabellen wo die Maske einen leicht abweichenden Aufbau zum Standard haben soll.
Heißt das, dass die Form eigentlich gleich ist und nur die Maske für die Tabelle anders ist? Klingt für mich nach einem sinnvollen Einsatz von Frames. Man nimmt immer die gleiche Form-Klasse und wählt für die Darstellung den passenden Frame aus.
Peter
  Mit Zitat antworten Zitat
fisipjm

Registriert seit: 28. Okt 2013
299 Beiträge
 
#8

AW: TForm Klasse dynamisch erstellen ja nachdem ob Klasse vorhanden ist

  Alt 16. Nov 2021, 08:57
Zitat:
Was macht GetMainFormClass ?
Das wäre die Funktion, die anhand des Tabellennamens die Klassse des zu erstellenden Formulars zurück gibt.
Entweder man kodiert das hart oder registriert in einer TList/TDictionary die Formualrtypen und durchsucht diese.
Wenn man nichts findet, könnte es eine Standard geben.
Hab ich das im Prinzip nicht schon durch die RegisterClass funktion? Ich durchsuche die T+TabellenName mit findClass und wenn es was gibt nehm ich die und wenn es nix gibt nehm ich die Standard Form. Es scheitert bei mir whrscheinlich lediglich daran, das mir GetClass ja ein Tpersistant zurück gibt und ich nicht weis wie ich daraus die spziefische Klasse createn kann. Vielleicht geht das auch gar nicht.... Absolutes Neuland für mich
  Mit Zitat antworten Zitat
fisipjm

Registriert seit: 28. Okt 2013
299 Beiträge
 
#9

AW: TForm Klasse dynamisch erstellen ja nachdem ob Klasse vorhanden ist

  Alt 16. Nov 2021, 08:58
Es gibt manche Tabellen wo die Maske einen leicht abweichenden Aufbau zum Standard haben soll.
Heißt das, dass die Form eigentlich gleich ist und nur die Maske für die Tabelle anders ist? Klingt für mich nach einem sinnvollen Einsatz von Frames. Man nimmt immer die gleiche Form-Klasse und wählt für die Darstellung den passenden Frame aus.
Ja die Maske und die Aufrufe der Datenbank die darin stattfinden sind unterschiedlich. Aber warum brauch ich dafür TFrame? verschiebt das mein Problem nicht einfach nur eine Ebene Tiefer in die Maske rein?
  Mit Zitat antworten Zitat
fisipjm

Registriert seit: 28. Okt 2013
299 Beiträge
 
#10

AW: TForm Klasse dynamisch erstellen ja nachdem ob Klasse vorhanden ist

  Alt 16. Nov 2021, 09:00
Zitat:
Was macht GetMainFormClass ?
Das wäre die Funktion, die anhand des Tabellennamens die Klassse des zu erstellenden Formulars zurück gibt.
Entweder man kodiert das hart oder registriert in einer TList/TDictionary die Formualrtypen und durchsucht diese.
Wenn man nichts findet, könnte es eine Standard geben.
Und genau darin liegt ja mein Problem, mit getClass bekomme ich eine Tpersistant zurück und nicht die speziefische Klasse die ich eigentlich createn möchte.
Und über das Tpersistent bekomme ich es nicht gebacken...
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 13:01 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