Einzelnen Beitrag anzeigen

Medium

Registriert seit: 23. Jan 2008
3.686 Beiträge
 
Delphi 2007 Enterprise
 
#3

AW: Methodenzeiger zur Designtime

  Alt 31. Mär 2011, 12:44
Naja, das ist grad leider der Punkt. Es gibt praktisch kein Standardverhalten. Ich habe hier z.B. ein mal den Fall, dass einfach nur der Name von Source1 übernommen wird. Dann, dass der Name von Source1 abzüglich des ersten Zeichens, plus eines festen Zwischenteils, plus dem Namen von Source2 zusammen gebaut wird. Dann einen Fall, wo Präfix + Source1 steht, und einen mit den letzten 3 Zeichen von Source1 plus eines Suffix. Das kann total beliebig sein, daher ja überhaupt die Motivation einen Handler für dieses Zusammenbasteln zu erstellen. Das Dingen ist auch: Es müssen nachher Mitarbeiter damit klar kommen, die die Quelle der Labelkompo nicht haben/kennen/verändern dürfen, so dass diese Custom-Prozedur nicht in dessen Source stehen kann.


Edit:
Ich habe mal ein wenig rumgespielt, und die Prozedur SetMethodProp() in der Unit TypInfo aufgetan. Problem:
Delphi-Quellcode:
procedure TMyLabel.SetOnBuild(const Value: TMyLabelBuilder);
begin
  SetMethodProp(self, 'OnBuildCaption', TMethod(Value));
end;
An sich(!) scheint das garnicht mal so übel, das Dingen ist jedoch, dass TMethod(Value).Code immer 1 ist, wodurch ein Assigned() natürlich false ergibt. Der .Data Anteil hat einen realistischer aussehenden Wert, jedoch gibt es beim Aufrufen natürlich Schelte in Form einer Exception.
Alles auch irgendwo logisch, da dieses TMethod zur Designtime ja kaum mehr als ein Dummy-Wert sein kann, da die Adresse mangels Kompilierung ja noch nicht bekannt ist. Ich suche daher nach einem Weg, Delphi mitteilen zu können: "Bitte bitte kompilier diesen Fetzen, und lass mich ihn aufrufen."
Bei meinen Suchen bin ich hier und da über die ToolsAPI gestolpert, habe aber keinerlei Erfahrung in diesem Zusammenhang. Gibt es da ggf. einen Weg?
"When one person suffers from a delusion, it is called insanity. When a million people suffer from a delusion, it is called religion." (Richard Dawkins)

Geändert von Medium (31. Mär 2011 um 15:03 Uhr)
  Mit Zitat antworten Zitat