AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

Funktion als Generic - wie?

Ein Thema von exasoft · begonnen am 22. Jan 2019 · letzter Beitrag vom 23. Jan 2019
Antwort Antwort
Benutzerbild von exasoft
exasoft

Registriert seit: 19. Nov 2015
Ort: Frankfurt
47 Beiträge
 
#1

Funktion als Generic - wie?

  Alt 22. Jan 2019, 17:14
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:
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...
umstellen wollte, habe ich das so versucht:

Delphi-Quellcode:
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.
Ich möchte zB TEdit aber auch TMemo, TComboEdit, etc. mitgeben. Hab da bestimmt noch nen Denkfehler. Jemand nen Tipp?

Tks vorab..

de schorsch
  Mit Zitat antworten Zitat
Der schöne Günther

Registriert seit: 6. Mär 2013
4.872 Beiträge
 
Delphi 10 Seattle Enterprise
 
#2

AW: Funktion als Generic - wie?

  Alt 22. Jan 2019, 17:24
Generics sind erst einmal völlig generisch - Da kann alles rein. Und nicht alles hat .Parent .

Deshalb müssen wir hingehen und sagen: "Ok, alles jetzt nicht, aber bitte alles was ein TControl ist."

Einschränkungen für Generics formuliert man mit einem Doppelpunkt, z.B. so: function TForm1.getY<T: TControl>(Sender: TObject; AMaster: TLayout): single; 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: T; AMaster: TLayout): single;

Lesestoff: http://docwiki.embarcadero.com/RADSt...isierte_Typen)

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 TEdit einsetzen und bekomme als Rückgabe ein Array mit allen Edit-Felder auf dem Formular. Oder alle Buttons. Oder was auch immer.
  Mit Zitat antworten Zitat
Benutzerbild von exasoft
exasoft

Registriert seit: 19. Nov 2015
Ort: Frankfurt
47 Beiträge
 
#3

AW: Funktion als Generic - wie?

  Alt 22. Jan 2019, 17:33
Hey, do solltest Bücher scheiben - das habe sogar ich verstanden.

Tks!
  Mit Zitat antworten Zitat
Benutzerbild von exasoft
exasoft

Registriert seit: 19. Nov 2015
Ort: Frankfurt
47 Beiträge
 
#4

AW: Funktion als Generic - wie?

  Alt 22. Jan 2019, 17:41
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.
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
26.773 Beiträge
 
Delphi 10.3 Rio
 
#5

AW: Funktion als Generic - wie?

  Alt 22. Jan 2019, 17:45
Wieso übergibst Du dann nicht direkt TControl als Sender-Type? Generics braucht man dafür nicht.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Benutzerbild von exasoft
exasoft

Registriert seit: 19. Nov 2015
Ort: Frankfurt
47 Beiträge
 
#6

AW: Funktion als Generic - wie?

  Alt 22. Jan 2019, 17:46
Also so:

Delphi-Quellcode:
function TfrmMain.getY<T>(Sender: TObject; AMaster: TLayout): single;
begin

end;
wirds wenigstens kompiliert - und so stehts auch irgendwie im Buch nur, wie behandel ich jetzt <T>?
  Mit Zitat antworten Zitat
Benutzerbild von exasoft
exasoft

Registriert seit: 19. Nov 2015
Ort: Frankfurt
47 Beiträge
 
#7

AW: Funktion als Generic - wie?

  Alt 22. Jan 2019, 17:53
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..
  Mit Zitat antworten Zitat
22. Jan 2019, 21:24
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.
Rollo62

Registriert seit: 15. Mär 2007
1.934 Beiträge
 
Delphi 10.3 Rio
 
#9

AW: Funktion als Generic - wie?

  Alt 23. Jan 2019, 07:03
Vielleicht hilft dir das weiter ?
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 09:28 Uhr.
Powered by vBulletin® Copyright ©2000 - 2019, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2019 by Daniel R. Wolf