AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) Delphi im PropertyEditor Mehtode mittels MehtodenNamen finden
Thema durchsuchen
Ansicht
Themen-Optionen

im PropertyEditor Mehtode mittels MehtodenNamen finden

Ein Thema von Bernhard Michel · begonnen am 26. Feb 2008 · letzter Beitrag vom 7. Mär 2008
Antwort Antwort
Bernhard Michel

Registriert seit: 2. Apr 2007
2 Beiträge
 
#1

im PropertyEditor Mehtode mittels MehtodenNamen finden

  Alt 26. Feb 2008, 08:34
Hallo,

habe einen PropertyEditor zur Erstellung einer EreignisbehandlungsRoutine geschrieben. Wenn man also im OI auf "OnCheckInteger" (ähnlich wie z.B. OnFormCreate) clickt, wird eine Ereignisroutine erstellt und im Property "OnCheckInteger" eingetragen und die EingabeMarke an die neu erzeugte Routine gestellt. Folgender Code macht das schon einwandfrei.
jetzt möchte ich eine andere Mehtode in "OnCheckInteger" eingtagen. es wird mir eine Liste mit den passenden Methoden angeboten. ich wähle eine aus. in TPropertyEditro.SetValue muss nun aus dem Übergebenen Value:string die Mehtode mit diesem Namen gefunden werden; aber wie???

???? wie finde ich die Methode; der Name=value ist bekannt;
???? auch der Owner in der Unit, in der die Mehtode steht ist bekannt;
???? es müsste so etwas sein wie Designer.MethodExists('MethodenName')
???? leider wird hier nur Boolean zurück gegeben und nicht die Mehtode;
???? p1 := TMyComponentOwnerAusUnit.MethodAddress(value); liefert nil



Delphi-Quellcode:
TAAAPrEdTDomainValue = class(TPropertyEditor)
private
  function GetAttributes: TPropertyAttributes; override;
  procedure GetValues(Proc: TGetStrProc) ; override;
  function GetValue: string ; override;
  procedure SetValue(const Value: string) ; override;
  procedure Edit; override;
end;


function TAAAPrEdTDomainValue.GetAttributes: TPropertyAttributes;
begin
  //es soll eine AusWahlListge angezeigt werden; das funktioniert
  if GetName = 'OnCheckInteger'
  then Result :=    [paValueList]
end;

procedure TAAAPrEdTDomainValue.GetValues(Proc: TGetStrProc);
begin
  //findet alle passenden Routinen und listet sie auf; geht auch
  if GetName = 'OnCheckInteger'
  then Designer.GetMethods(GetTypeData(GetPropType),Proc);
end;

function TAAAPrEdTDomainValue.GetValue: string;
begin
  //gibt den MethodenNamen der in "OnCheckInteger" eingetragenen Routine wieder; funktioniert
  if GetName = 'OnCheckInteger'
  then Result := Designer.GetMethodName(GetMethodValue);
end;

procedure TAAAPrEdTDomainValue.Edit;
begin
  //erstellt eine Routine/Mehtode in der aktuellen Unit mit dem Namen 'MyCheckInteger' vom Typ GetPropType
  //und wird in den ProdeurenZeiger TMyCollectionItem(GetComponent(0).OnCheckInteger eingetragen
  //das funktioniert
  if GetName = 'OnCheckInteger'
  then begin    
    TMyCollectionItem(GetComponent(0).OnCheckInteger :=
      TCheckInteger(Designer.CreateMethod
      ('MyCheckInteger',GetTypeData(GetPropType)));
  //die Eingabe Marke wird auf die Procedure/Methode "MyCheckInteger" gesetzt; das funktioniert
    Designer.ShowMethod('MyCheckInteger');
  end;
end;

procedure TAAAPrEdTDomainValue.SetValue(const Value: string);
var p1:pointer;
begin
  if GetName = 'OnCheckInteger'
  then begin
      TMyCollectionItem(GetComponent(0).OnCheckInteger :=
     ???? wie finde ich die Methode; der Name=value ist bekannt;
     ???? auch der Owner in der Unit, in der die Mehtode steht ist bekannt;
     ???? es müsste so etwas sein wie Designer.MethodExists('MethodenName')
     ???? leider wird hier nur Boolean zurück gegeben und nicht die Mehtode;
     ???? p1 := TMyComponentOwnerAusUnit.MethodAddress(value); liefert nil
  end;
end;
  Mit Zitat antworten Zitat
Bernhard Michel

Registriert seit: 2. Apr 2007
2 Beiträge
 
#2

Re: im PropertyEditor Mehtode mittels MehtodenNamen finden

  Alt 7. Mär 2008, 12:22
gibt's keine Antwort?
gebt mir doch bitte mal ein Feedback;
ist das Thema zu kompliziert; oder zu kompliziert formuliert?
  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:29 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