Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Sourcecode für zur Designtime erzeugten Methode per designer.createmethod (https://www.delphipraxis.net/189813-sourcecode-fuer-zur-designtime-erzeugten-methode-per-designer-createmethod.html)

Keldorn 25. Jul 2016 16:19

Sourcecode für zur Designtime erzeugten Methode per designer.createmethod
 
Hallo

Ich möchte für mich das Handling von actions etwas vereinfachen und mir eine kleine Designtime-Hilfskomponente schreiben, mit der ich actions zusätzlich zum actionmanager besser verwalten und vorallem schneller anlegen kann. Speziell nervt mich das ständige hin und hergeklicke und das Erzeugen des onexecutes-Ereignisses.

Erste vorsichtige Versuchsschritte sind:
Delphi-Quellcode:
Procedure Proc_NeueAktionErstellen(AMH:TActionManagerHelper);
Var Action:TAction;

    //quelle: http://www.gexperts.org/open-tools-api-faq/
    procedure DoCreateMethod(Persistent: TPersistent;
                             MethodShortName, MethodSourceName: string);
    var
      Method: TMethod;
      PropInfo: PPropInfo;
      TypeInfo: PTypeInfo;

    begin
      TypeInfo := PTypeInfo(Persistent.ClassInfo);
      PropInfo := GetPropInfo(TypeInfo, 'On' + MethodShortName);
      Method  := Designer.CreateMethod(MethodSourceName, GetTypeData(PropInfo^.PropType^));

      SetMethodProp(Persistent, PropInfo, Method);
    end;


begin
    Action := TAction(Designer.CreateComponent(TAction,
                                               AMH.ActionManager.Owner,
                                               0,0,0,0));
    Action.Name     := Designer.UniqueName('Action_test');
    Action.caption  := 'test';
    Action.Category := 'TestCategory';
    Action.ActionList:= AMH.ActionManager;

    DoCreateMethod(Action,
                   'Execute',
                   Action.Name+'Execute');

    Designer.ShowMethod(Action.Name+'Execute');

    Designer.Modified;
end;
Macht das, was ich will: legt eine neue action+dazugehöriges Ereignis an.

Frage: Wie bekomme ich aber sourcecode in die erzeugte EreignisMethode reingeschrieben?

Hat da einer eine Idee :)?

Danke & Gruß Frank

DeddyH 25. Jul 2016 18:11

AW: Sourcecode für zur Designtime erzeugten Methode per designer.createmethod
 
Aus der Hilfe zu TMethod:
Zitat:

Sie können eine TMethod-Variable füllen, indem Sie Daten als Zeiger auf ein Objekt und mit MethodAddress Code zuweisen und den Methodennamen als String-Parameter für diese Methode festlegen.
Beispielcode müsste hier in der DP zu finden sein. Hilft Dir das weiter?

Keldorn 25. Jul 2016 19:20

AW: Sourcecode für zur Designtime erzeugten Methode per designer.createmethod
 
Danke, aber nicht so richtig :oops:. Zu createmethod hatte ich in der DP gar nix für mich gefunden

die dahingehend angeschauten Beispiele hatte ich immer so verstanden, dass damit zur Laufzeit was umgebogen werden kann. Das will ich ja nicht, ich möchte ja gerne, dass der Code zur Designtime erstellt wird und dann im quelltext des erzeugten events steht.

bei PPropInfo hatte ich auch nix gefunden, was auf eine Übergabe von Text schliessen lässt.

DeddyH 25. Jul 2016 20:19

AW: Sourcecode für zur Designtime erzeugten Methode per designer.createmethod
 
Oh, da habe ich Dich komplett missverstanden, sorry.

Keldorn 26. Jul 2016 19:42

AW: Sourcecode für zur Designtime erzeugten Methode per designer.createmethod
 
kein Problem.

habe nun eine andere Alternative gesucht und schreibe nun den gewünschten Code ganz normal nach showmethod in den Editor per
Delphi-Quellcode:
    procedure Proc_SetEditblock(const AText: string);
    var
      EditorServices: IOTAEditorServices;
      EditView: IOTAEditView;
    begin
      EditorServices := BorlandIDEServices as IOTAEditorServices;
      EditView := EditorServices.TopView;
      if Assigned(EditView) then
        begin
          EditView.Buffer.EditPosition.InsertText(aText);
          EditView.Paint;
        end;
    end;
macht erstmal das, was ich erreichen wollte.
Falls noch jemand eine andere Idee hat, gerne.


Alle Zeitangaben in WEZ +1. Es ist jetzt 22:52 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