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 2 von 2     12   
Benutzerbild von Jasocul
Jasocul

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

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

  Alt 16. Nov 2021, 09:12
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?
Wenn ich das bisher richtig verstanden habe, dann verschiebst du das Problem zwar, aber an eine Stelle, wo du es verarbeiten kannst.
Du könntest dann einfach aus deinen Menüpunkten immer die selbe Formklasse verwenden und übergibst beim Create einen Parameter, auf den die Form reagieren kann. Je nach Parameter, wird der passende Frame genutzt.
Peter
  Mit Zitat antworten Zitat
fisipjm

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

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

  Alt 16. Nov 2021, 09:16
Wenn ich das bisher richtig verstanden habe, dann verschiebst du das Problem zwar, aber an eine Stelle, wo du es verarbeiten kannst.
Du könntest dann einfach aus deinen Menüpunkten immer die selbe Formklasse verwenden und übergibst beim Create einen Parameter, auf den die Form reagieren kann. Je nach Parameter, wird der passende Frame genutzt.
Wie mach ich dann den Aufruf mit einem Frame? Auch mein Frame müsste dann wieder eine Ableitung von einem "MainFrame" sein und die Ausreißer wären doch auch wieder seperate Ableitungen vom MainFrame. Damit weis ich doch dann in der Form wieder nicht wie ich an die richtige TFrame klasse komme, oder steh ich grad völlig auf dem Schlauch?
  Mit Zitat antworten Zitat
BerndS

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

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

  Alt 16. Nov 2021, 09:25
Hier ein einfaches Beispiel:
Delphi-Quellcode:
procedure TForm1.bt1Click(Sender: TObject);
var
  F: TPersistentClass;
  D:TForm;
begin
  F := FindClass('TForm2');
  if Assigned(F) then
  begin
    Application.CreateForm(TComponentClass(F) , D);
    D.Show;
  end;

end;
  Mit Zitat antworten Zitat
Benutzerbild von Jasocul
Jasocul

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

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

  Alt 16. Nov 2021, 09:35
Wie mach ich dann den Aufruf mit einem Frame? Auch mein Frame müsste dann wieder eine Ableitung von einem "MainFrame" sein und die Ausreißer wären doch auch wieder seperate Ableitungen vom MainFrame. Damit weis ich doch dann in der Form wieder nicht wie ich an die richtige TFrame klasse komme, oder steh ich grad völlig auf dem Schlauch?
An irgendeiner Stelle muss du doch wissen, mit welcher Maske die Tabelle dargestellt werden soll. Wenn du es beim Erstellen der Form weißt, kannst du das Create der Form überschreiben und einen zusätzlichen Parameter übergeben. Dann weiß die Form, welcher Frame beim Create eingebaut werden muss.

Wenn ich so darüber Nachdenke, sollte vielleicht erstmal geklärt werden, ab wann die Anwendung weiß, welche Maske erforderlich ist. Irgendwann muss irgendeine passende Information in der Anwendung ja vorhanden sein.
Peter
  Mit Zitat antworten Zitat
BerndS

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

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

  Alt 16. Nov 2021, 09:44
Ich habe noch eine Typenprüfung hinzugefügt:
Delphi-Quellcode:
uses
  System.TypInfo;
...

procedure TForm1.bt1Click(Sender: TObject);
var
  F: TPersistentClass;
  D:TForm;
begin
  F := FindClass('TForm2');
  if Assigned(F) and PTypeInfo(F.ClassInfo).TypeData^.ClassType.InheritsFrom(TCustomForm) then
    begin
      Application.CreateForm(TComponentClass(F) , D);
      D.Show;
    end;

end;

Geändert von BerndS (16. Nov 2021 um 09:46 Uhr) Grund: uses System.TypInfo hinzugefügt
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

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

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

  Alt 16. Nov 2021, 11:28
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
Unter der Annahme, dass TTolleNeueForm von TMainForm abgeleitet ist:
Delphi-Quellcode:
type
  TMainFormClass = class of TMainForm;

var
  MainFormClass: TMainFormClass;
  PersistentClass: TPersistentClass;
begin
  MainFormClass := TMainForm;
  PersistentClass := GetClass('TTolleNeueForm');
  if PersistentClass <> nil then
    MainFormClass := TMainFormClass(PersistentClass);

  myForm := MainFormClass.Create(Application);
end;
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
BerndS

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

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

  Alt 16. Nov 2021, 11:43
gelöscht
  Mit Zitat antworten Zitat
Benutzerbild von uligerhardt
uligerhardt

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

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

  Alt 16. Nov 2021, 14:08
Unter der Annahme, dass TTolleNeueForm von TMainForm abgeleitet ist:
Delphi-Quellcode:
type
  TMainFormClass = class of TMainForm;

var
  MainFormClass: TMainFormClass;
  PersistentClass: TPersistentClass;
begin
  MainFormClass := TMainForm;
  PersistentClass := GetClass('TTolleNeueForm');
  if PersistentClass <> nil then
    MainFormClass := TMainFormClass(PersistentClass);

  myForm := MainFormClass.Create(Application);
end;
Als ein Sicherheitsfanatiker würde ich die Annahme prüfen:
Delphi-Quellcode:
  if Assigned(PersistentClass) then
  begin
    Assert(PersistentClass.InheritsFrom(TMainForm));
    MainFormClass := TMainFormClass(PersistentClass);
  end;
Uli Gerhardt
  Mit Zitat antworten Zitat
fisipjm

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

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

  Alt 23. Nov 2021, 16:33
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
Unter der Annahme, dass TTolleNeueForm von TMainForm abgeleitet ist:
Delphi-Quellcode:
type
  TMainFormClass = class of TMainForm;

var
  MainFormClass: TMainFormClass;
  PersistentClass: TPersistentClass;
begin
  MainFormClass := TMainForm;
  PersistentClass := GetClass('TTolleNeueForm');
  if PersistentClass <> nil then
    MainFormClass := TMainFormClass(PersistentClass);

  myForm := MainFormClass.Create(Application);
end;
Tut genau was es soll. Vielen dank!
Hab mich in den letzten Tagen mehr mit Klassen und insbesondere auch RTTI auseinander gesetzt. Wilkommen in einer neuen Abstraktionsebene Mein Kopf raucht, aber auf eine gute weise
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 2     12   


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 03:09 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