![]() |
Einstieg in Zeiger auf Methoden / Funktionen
Liste der Anhänge anzeigen (Anzahl: 1)
Moin DP,
das nächste Video ist fertig. Heute zeige ich einen Einstieg in Zeiger auf Methode bzw. Funktionen. Dabei beschränke ich mich erst einmal auf die Benutzung. In einen weiteren Video, zeige ich dann die eigene Implementierung. Mit Zeiger auf Funktionen, könnt ihr ein Dinge einfach entkoppeln und ggf. im vorhandenes im Verhalten beeinflussen. Zum Beginn zeige ich wie die VCL Ereignisse für die Oberfläche verwendet werden können und ggf. per Hand implementiert werden können. Später im Video ändern wir das Sortierungsverhalten einer Kundenliste und die Entkopplung der Kunden-Logik von der Oberfläche. Der Quelltext vom Video ist hier: Anhang 52017 Das Video ist dieses: ![]() |
AW: Einstieg in Zeiger auf Methoden / Funktionen
Vielen Dank, bin heute drauf gestoßen. Werde es mir dann zuhause anschauen =)
|
AW: Einstieg in Zeiger auf Methoden / Funktionen
Dankesehr für die Mühe, schaue ich mir später an.
Bist Du in Richtung funktionale Programmierung unterwegs ? Wäre mal interessant zu wissen und zu vergleichen wie weit man mit Delphi kommen kann, im Vergleich mit echten funktionalen Sprachen. Ich nutze Pointer auf Funktionen jetzt schon ausgiebig, aber ich würde da gerne noch bis an die Grenze des Möglichen gehen. Vor Allem: Wie bekommt man das Ganze auch noch lesbar und intuitiv verständlich eingepackt ... Ich arbeite da meistens mit ziemlich strenger Nomenklatur, was mir die Sache vereinfachen soll, aber schöner wären womöglich clevere Hilfsklassen um das besser zu kapseln. Leider komme ich im Moment kaum dazu mir um theoretische Fragen viele Gedanken zu machen, ich hoffe das es dazu dann mehr in deiner Serie gibt :stupid: Ist das so ungefähr auch die Richtung in die deine Videoserie gehen wird ? |
AW: Einstieg in Zeiger auf Methoden / Funktionen
In Richtung NextGen (Android/iOS) ist sowas für Dialoge schon nötig.
Dialoge halten dort ja nicht mehr an, also mußt du für die Auswertung des gedrückten Knopfes eine Eventmethode schreiben. Mit den anonymen Methoden (Generics) kannst bissl in Richtung von Lamda-Methoden gehen. |
AW: Einstieg in Zeiger auf Methoden / Funktionen
Hallo himitsu,
falls Du mich meinst, dankesehr für die Info. All das nutze ich bereits ausgiebig, hoffe aber dass man da noch Einiges optimieren kann. Anonyme Methoden sind nicht wirklich mit Lambdas, Funktoren, etc. aus anderen Sprachen vergleichbar, würde ich sagen. Die Frage für mich ist: Was geht, was geht gar nicht, was geht aber sollte man besser lassen. Z.B. Verschachtelte anonyme Methoden, wie weit kann man das Treiben ? Kann man die womöglich besser lesbar machen durch Hilfsklassen, Generics, etc. Ich bin da so ein bischen unschlüssig ob es da überhaupt gute Konzepte gibt, um das in Delphi tiefer zu verschachteln als in Level 1. |
AW: Einstieg in Zeiger auf Methoden / Funktionen
Verschachteln kann man die Anonymen bestimmt unendlich. (außer siehe unten)
Die geteilten Variablen (auf die man innerhalb der Methode zugreift) werden vom Compiler in ein Interface verschoben damit sie überall eindeutig gültig sind. Kannst in etwa mit dem Self-Parameter in Klassenmethoden vergleichen.
Delphi-Quellcode:
wird zu
procedure Xyz;
var x, y: Integer; begin x := 0; y := 0; Call(procedure begin if x = 0 then ; end) end;
Delphi-Quellcode:
So lange der Compiler kein Limit (statische Liste oder zu wenig Speicher) hat, sollte es da keine Grenze geben. (außer dem Speicher)
type
AnonymusVars0123456 = interface(record) x: Integer; P: AnonymusProc0123456; end; procedure AnonymusProc0123456(Self: AnonymusVars0123456); begin if Self.ax = 0 then ; end) procedure Xyz; var y: Integer; a: AnonymusVars0123456; begin a := Create...; a.P := AnonymusProc0123456; a.x := 0; y := 0; Call(AnonymusVars0123456); end; Och, ich mach es mir da einfach: alles was man noch lesen kann, das ist erlaubt. :freak: SpaghettiCode mag angeblich niemand, aber z.B. für kleine Synchronisierungsaufgaben, verwende ich die Anonymen gern mal ... finde es einfacher und übersichtlicher, als da die Prozedur ganz wo anders zu haben und immer im Zickzack gucken zu müssen.
Delphi-Quellcode:
// im Thread
... mach was mit Ergebnis in S ... TThread.Synchronize(nil, procedure begin ShowMessage(S); end); Vom linearen Arbeiten wegzukommen, hin zum Prozedualen ist auch nicht immer so einfach. Da ist man es bisher halt gewohnt, dass die MessageBox wartet und kann dann direkt danach den Code für die Auswertung machen. Und nun soll das danach alles in eine/mehrere Prozeduren, die man dann dem Dialog mitgibt.
Delphi-Quellcode:
Daraus sollen nun 2 bis 3 Methoden werden.
procedure TForm1.Button1Click(Sender: TObject);
begin if ShowDialog('wirklich?') = mbOK then DeleteDirectory('C:\Windows\*') else ShowDialog('OK, dann net'). end; Ist halt wie alles als Methoden in der Form zu haben, anstatt es in eigene Klassen auszulagern. |
AW: Einstieg in Zeiger auf Methoden / Funktionen
Mit tief verschachtelt meinte ich eher sowas in dieser Richtung ...
(freihändig eingetippt um 20:00, bitte um Gnade :-)) Der konkrete Sinn sei mal dahingestellt.
Delphi-Quellcode:
type
TProcLevel3 = reference to function( AData : Integer ) : Integer; ... TProcLevel2 = reference to procedure ( AData : Integer; AProcLevel3 : TProcLevel3); TProcLevel1 = reference to procedure ( AData : Integer; AProcLevel2 : TProcLevel2); procedure Level1( AProc1 : TProcLevel1, AProcLevel2 : TProcLevel2 ); begin if Assigned( AProc1 ) then AProc1( 1, LProcLevel2); end; procedure Level; var LProc3 : TProcLevel3; LResult : Integer; begin LProc3 .= function( AData : Integer ) : Integer begin Result := AData * AData; end; Level1( procedure ( AData : Integer; AProcLevel1 : TProcLevel1) begin end, // procedure ( AData : Integer; AProcLevel2 : TProcLevel2) begin if Assigned( AProicLevel2) then AProcLevel2( 2, LProc3 ); end, ) end; |
AW: Einstieg in Zeiger auf Methoden / Funktionen
Hallo Zusammen,
ich erzeuge in einer Procedur ein MainMenu aus einer Datenbank (SQLite). In diesem Menu möchte ich dem OnClick der einzelen Menupunkten eine wert zuweien den ich leider auch nur als String habe. Mit "methods := rttiType.GetMethods;" bekomme ich ja schon den Namen, aber wie kann ich das "TNotifyEvent" zuweisen? Wenn ich das ganze richtig verstanden habe geht das wohl nur über Pointer. Aber wie ???? Über eine Antwort würde ich mich sehr freuen. Mfg Dirk |
AW: Einstieg in Zeiger auf Methoden / Funktionen
Zitat:
![]() Bis bald... Thomas |
AW: Einstieg in Zeiger auf Methoden / Funktionen
Ich danke dir erst mal für die schnelle Antwort.
Aber leider wird in diesen Beispielen mein Problem wieder fest zugewiesen : "strList.OnChange := wrapper.DoChange1;". Was ich bräuchte ist z.B. : MeinString := "Bla Bla Bla" "strList.OnChange := MeinString" |
Alle Zeitangaben in WEZ +1. Es ist jetzt 04:38 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-2025 by Thomas Breitkreuz