AGB  ·  Datenschutz  ·  Impressum  







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

Ausführen einer Methode bei MethodAddress

Ein Thema von josef-b · begonnen am 4. Feb 2024 · letzter Beitrag vom 5. Feb 2024
Antwort Antwort
Benutzerbild von Olli73
Olli73

Registriert seit: 25. Apr 2008
Ort: Neunkirchen
782 Beiträge
 
#1

AW: Ausführen einer Methode bei MethodAddress

  Alt 4. Feb 2024, 10:15
Entweder guckst du hier ab:

https://docwiki.embarcadero.com/Libr....MethodAddress

Oder du machst sowas:

(aComp as TControl).Repaint;
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

AW: Ausführen einer Methode bei MethodAddress

  Alt 4. Feb 2024, 11:29
Entweder selbst durch die TypeInfo kämpfen Delphi-Referenz durchsuchenTypInfo
oder die erweiterte RTTI benutzen Delphi-Referenz durchsuchenTRTTI.

Die Funktionen an TObjekt kennen keine Typen (das sind die Funktionen, welche der DFM-Loader/Writer nutzt, aber deswegen prüft/vergleicht inzwischen der FormDesigner, in der IDE, nun beim Speichern zumindest mal die Typen der Felder und Methoden-Parameter zwischen PAS und DFM)
Ein Therapeut entspricht 1024 Gigapeut.
  Mit Zitat antworten Zitat
josef-b

Registriert seit: 6. Jun 2004
Ort: bei Jena in Thüringen
95 Beiträge
 
Delphi 11 Alexandria
 
#3

AW: Ausführen einer Methode bei mehreren Komponenten

  Alt 4. Feb 2024, 14:35
So richtig komme ich noch nicht klar.

Mit einer einzelnen bestimmten Komponente gehts..

Delphi-Quellcode:
procedure TFMain.repaint_bauteil(acomp_name: string; astatus: integer);
var
  aComp: TComponent;
  acolor: TColor;
begin
aComp := FMain.FindComponent(aComp_Name);
acolor := (acomp as TMyOwnComp).FarbeDefault;

case aStatus of
  99: Acolor := clred;
  100: Acolor := clyellow;
  end;

(acomp as TMyOwnComp).Farbe := acolor;
(acomp as TMyOwnComp).Repaint;

end;
Da ich aber verschiedene eigene Klassen habe (verschiedene eigene Grafiken) vom
Typ TmyOwnCompName1, TmyOwnCompName2..... dachte ich mir, es geht vielleicht wie folgt,
tuts aber nicht

Alle Komponenten haben die Eigenschft Farbe und die Methode Repaint;

Delphi-Quellcode:
procedure TFMain.repaint_bauteil(acomp_name: string; astatus: integer);
var
  aComp: TComponent;
  acolor: TColor;

  aClassType: TClass;

begin

aComp := FMain.FindComponent(aComp_Name);

aCLassType := aComp.ClassType;

.....

(acomp as aClassType).Farbe := acolor; // geht nicht *******
end;
  Mit Zitat antworten Zitat
Benutzerbild von Olli73
Olli73

Registriert seit: 25. Apr 2008
Ort: Neunkirchen
782 Beiträge
 
#4

AW: Ausführen einer Methode bei MethodAddress

  Alt 4. Feb 2024, 14:41
Wie ist denn die Klassenhierarchie für deine Komponenten?
  Mit Zitat antworten Zitat
Benutzerbild von Olli73
Olli73

Registriert seit: 25. Apr 2008
Ort: Neunkirchen
782 Beiträge
 
#5

AW: Ausführen einer Methode bei MethodAddress

  Alt 4. Feb 2024, 14:43
Wenn das z.b irgendwie alles von t-control abgeleitet ist, dann reicht as TControl für repaint.
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
9.969 Beiträge
 
Delphi 12 Athens
 
#6

AW: Ausführen einer Methode bei MethodAddress

  Alt 4. Feb 2024, 15:13
Wenn das alles deine eigenen Klassen sind, leite sie doch einfach von einer gemeinsamen Elternklasse ab, die diese Funktionalität bereitstellt. Dann kannst du darauf casten.

Wenn das nicht geht, kannst du ein Interface verwenden, in dem die Funktionalität erreichbar ist, so dass deine Klassen dieses alle implementieren können. Dann kannst du mit Supports dieses holen und nutzen.
Sebastian Jänicke
AppCentral
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

AW: Ausführen einer Methode bei MethodAddress

  Alt 4. Feb 2024, 15:25
Casten und die Methode "direkt" aufrufen ist natürlich immernoch das Beste, am Einfachsten über einen gemeinsamen Vorfahren.

Delphi-Quellcode:
type
  TMyForm = class(TForm)
  private
    procedure Test;
    procedure DoLog(S, S2: string);
  end;

procedure TMyForm.Test;
begin
  for var M in TRttiContext.Create.GetType({TMyForm}Self.ClassType).GetMethods do // ja, es fehlt ein .FindMethod('DoLog') ... k.A. warum die immer wieder so dämlich sind
    if M.Name = 'DoLogthen
      M.Invoke(Self, ['abc', 'def']);
end;
Ein Therapeut entspricht 1024 Gigapeut.
  Mit Zitat antworten Zitat
josef-b

Registriert seit: 6. Jun 2004
Ort: bei Jena in Thüringen
95 Beiträge
 
Delphi 11 Alexandria
 
#8

AW: Ausführen einer Methode bei MethodAddress

  Alt 4. Feb 2024, 21:31
Wenn das alles deine eigenen Klassen sind, leite sie doch einfach von einer gemeinsamen Elternklasse ab, die diese Funktionalität bereitstellt. Dann kannst du darauf casten.
So habe ich das jetzt gemacht. Funktioniert prima. Vielen Dank für Eure Hilfe
  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 10:53 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