AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Generics TForm

Ein Thema von Stefan1286b · begonnen am 20. Feb 2024 · letzter Beitrag vom 21. Feb 2024
Antwort Antwort
Stefan1286b

Registriert seit: 6. Jan 2012
Ort: Dinklage
25 Beiträge
 
Delphi 11 Alexandria
 
#1

Generics TForm

  Alt 20. Feb 2024, 19:38
Delphi-Version: 11 Alexandria
Guten Abend.
Ich versuche gerade Generics mit Ableitungen von TForm insbesondere im Form Designer hinzubekommen.

Folgendes Beispiel:

Unit1
Delphi-Quellcode:
type
TForm1 = class(TForm) // DFM: object Form1: TForm1

end;

TForm2<T> = class(TForm1)
public
 A: T;
 B: T;

end;
Unit3
Delphi-Quellcode:
type
TForm3 = class(TForm2<Integer>)

end;

TForm4 = class(TForm3) // DFM: inherited Form4: TForm4

end;
Das scheint allerdings alleine deswegen schon nicht zu funktionieren, da es wohl nicht möglich ist das sich zwischen TForm4 und TForm1 eine Klasse befindet die keine DFM hat.
Aber DFM untersützt anscheinend keine Generics.

Jemand eine Idee?
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.149 Beiträge
 
Delphi 12 Athens
 
#2

AW: Generics TForm

  Alt 20. Feb 2024, 20:05
Du hast natürlich auch eine DFM-Ressource, welche wirklich 'TForm2<Integer>' heißt?

Weiß garnicht, ob < und > in Resourcenbezeichnern erlaubt sind (glaub aber fast nicht dran).
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests

Geändert von himitsu (20. Feb 2024 um 22:49 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

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

AW: Generics TForm

  Alt 20. Feb 2024, 21:34
Das würde auch nicht gehen, wenn man eine Klasse TForm2Integer = class(TForm2<Integer>) dazwischen schaltet. Generics werden bei visueller Formvererbung einfach nicht unterstützt.
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Rollo62

Registriert seit: 15. Mär 2007
3.908 Beiträge
 
Delphi 12 Athens
 
#4

AW: Generics TForm

  Alt 21. Feb 2024, 06:12
Du kannst aber einen eigenen TForm-Interposer bauen, der dann deine eigenen Funktionen mit hereinbringt.
Wenn man es nicht übertreibt, dann bleibt die neue TForm auch ganz normal im Designer verfügbar, es muss nur deine Unit z.B. "FMX.Form.Interposer" immer hinter dem normalen FMX.Form eingebunden werden, damit das neue TForm verwendet wird.

Das geht natürlich für VCL genauso wie für FMX.

Delphi-Quellcode:
unit FMX.Form.Interposer;

interface

Uses
  FMX.Form;


type
  TForm = class( FMX.Form.TForm )

      procedure MeineTolleFunktion;

  end;
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
9.349 Beiträge
 
Delphi 11 Alexandria
 
#5

AW: Generics TForm

  Alt 21. Feb 2024, 06:56
Ich hätte dafür nie Bedarf, denn die generische Funktionalität gehört zur Formularlogik, nicht zum Formular selbst. Wenn man das entsprechend trennt, hat man das Problem auch nicht.

Es gibt viele Möglichkeiten, z.B. kann man dem Formular eine Property geben, die vom Typ der Basisklasse für die generischen Ableitungen ist, so dass man die dort reinpacken kann. Dann kann das Formular darauf zugreifen. Umgekehrt kann man auch einen TMyFormController<T> verwenden, der das Formular steuert und sich in dessen veröffentlichte Events einklinkt. Für neue Implementierungen ist eher die zweite Variante interessant, die erste, wenn man bestehende Funktionalität auslagern möchte.
Sebastian Jänicke
Alle eigenen Projekte sind eingestellt, ebenso meine Homepage, Downloadlinks usw. im Forum bleiben aktiv!
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.149 Beiträge
 
Delphi 12 Athens
 
#6

AW: Generics TForm

  Alt 21. Feb 2024, 09:17
Da im FormDesigner eh immer nur eine generische Dummy-Klasse von TForm verwendet wird, welche "bloß" so wie deine Form-Klasse heißt, und nicht der originale Typ, sind eh keine Published-Property der Vorfahren, sowie überschriebene "Ereignisse" (Create/Loaded/...), im Designer sichtbar bzw. aktiv ... egal welche Art der Vererbung.

Und soll die Form im Designer bearbeitbar oder im Code via Create erstellbar sein, dann müssen alle Vorfahren bis/nach TForm eine DFM-Ressource gleichen Namens besitzen.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Antwort Antwort

 

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 17:23 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