![]() |
Funktion als Generic - wie?
Hi @ALL,
hab mal bissi mit generics rumprobiert und wollte mal testweise eine Funktion umstellen - bekomme es aber nicht hin: Wenn ich zB:
Delphi-Quellcode:
umstellen wollte, habe ich das so versucht:
function TForm1.getY_TEdit(Sender: TObject; AMaster: TLayout): single;
var stufe: integer; begin Result := 0; stufe := 0; if tedit(sender).Parent = AMaster then stufe := 1...
Delphi-Quellcode:
Ich möchte zB TEdit aber auch TMemo, TComboEdit, etc. mitgeben. Hab da bestimmt noch nen Denkfehler. Jemand nen Tipp?
function TForm1.getY<T>(Sender: TObject; AMaster: TLayout): single;
var stufe: integer; begin Result := 0; stufe := 0; egal, was ich hier versuche - ich kann nicht auf ".Parent" zugreifen bzw. da wird gemeckert. Tks vorab.. de schorsch |
AW: Funktion als Generic - wie?
Generics sind erst einmal völlig generisch - Da kann alles rein. Und nicht alles hat
Delphi-Quellcode:
.
.Parent
Deshalb müssen wir hingehen und sagen: "Ok, alles jetzt nicht, aber bitte alles was ein
Delphi-Quellcode:
ist."
TControl
Einschränkungen für Generics formuliert man mit einem Doppelpunkt, z.B. so:
Delphi-Quellcode:
Von da an kannst du in deiner Methode auf alles zugreifen was ein TControl hat. Und wenn du die Methode aufrufst kann der Compiler sicherstellen dass du auch ein TControl reinstecken musst, sonst macht das alles wenig Sinn. Es sähe dann also eher so aus:
function TForm1.getY<T: TControl>(Sender: TObject; AMaster: TLayout): single;
Delphi-Quellcode:
function TForm1.getY<T: TControl>(Sender: T; AMaster: TLayout): single;
Lesestoff: ![]() Ganz verstanden was du wirklich willst habe ich allerdings nicht. Leute neigen oft dazu Generics als eine Lösung für alles mögliche anzusehen, obwohl Generics hier überhaupt nichts helfen. Auf einem Formular kann man sich wahnsinnig tolle Hilfsfunktionen bauen wie z.B. "Gib mir alles auf dem Formular was ein T ist" und ich kann für T einfach
Delphi-Quellcode:
einsetzen und bekomme als Rückgabe ein Array mit allen Edit-Felder auf dem Formular. Oder alle Buttons. Oder was auch immer.
TEdit
|
AW: Funktion als Generic - wie?
Hey, do solltest Bücher scheiben - das habe sogar ich verstanden.
Tks! |
AW: Funktion als Generic - wie?
das funktioniert so aber nicht - da meckert er.
Ich möchte im Prinzip aus einigen "Edit-Controls" im jew. onEnter eine "globale" Funktion aufrufen an die ich "Sender" übergebe. In der Funktion möchte ich auf "Sender.Parent" zugreifen ohne eben den "Sender" abfragen zu müssen "if Sender.ClassType = TEdit... - da dachte ich, dass das vielleicht mit generics geht, weil ja alle entspr. Kompos .Parent haben. |
AW: Funktion als Generic - wie?
Wieso übergibst Du dann nicht direkt TControl als Sender-Type? Generics braucht man dafür nicht.
|
AW: Funktion als Generic - wie?
Also so:
Delphi-Quellcode:
wirds wenigstens kompiliert - und so stehts auch irgendwie im Buch nur, wie behandel ich jetzt <T>?
function TfrmMain.getY<T>(Sender: TObject; AMaster: TLayout): single;
begin end; |
AW: Funktion als Generic - wie?
uups, da habe ich mir wohl die falsche Funktion als Testfunktion ausgesucht. Klar einfach als TControl übergeben ist viel einfacher in dem Fall. Uralter Code. Mich interessiert es halt - deswegen probiere ich jetzt noch bissi rum..
Tks.. |
Dieses Thema wurde am "22. Jan 2019, 22:24 Uhr" von "Luckie" aus dem Forum "Programmieren allgemein" in das Forum "Object-Pascal / Delphi-Language" verschoben.
|
AW: Funktion als Generic - wie?
Vielleicht hilft
![]() |
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:54 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