AGB  ·  Datenschutz  ·  Impressum  







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

TComponentEditor für eigene Actionlist

Ein Thema von Union · begonnen am 23. Jun 2006 · letzter Beitrag vom 22. Dez 2006
Antwort Antwort
Benutzerbild von Union
Union

Registriert seit: 18. Mär 2004
Ort: Luxembourg
3.492 Beiträge
 
Delphi 7 Enterprise
 
#1

TComponentEditor für eigene Actionlist

  Alt 23. Jun 2006, 10:12
Hallo,

ich habe eine eigene Actionlist-Komponente entwickelt. Jetzt muss ich dafür noch einen Komponenten-Editor bereitstellen. Gibt es eine Möglichkeit, den Delphi-Internen Actionlist-Editor aufzurufen und diesem mitzuteilen, dass er doch jetzt z.B. die Klasse TMyAction für die Actions verwenden soll anstelle von TAction?

Oder muss ich die komplette Funktionalität des Komponenteneditors neu programmieren?
Ibi fas ubi proxima merces
sudo /Developer/Library/uninstall-devtools --mode=all
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#2

Re: TComponentEditor für eigene Actionlist

  Alt 23. Jun 2006, 11:21
Wenn du von der normalen Actionlist abgeleitet hast sollte automatisch der Componenteditor der normalen Actionlist auf deine abgeleitete Version angewendet werden.
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
Benutzerbild von Union
Union

Registriert seit: 18. Mär 2004
Ort: Luxembourg
3.492 Beiträge
 
Delphi 7 Enterprise
 
#3

Re: TComponentEditor für eigene Actionlist

  Alt 23. Jun 2006, 11:35
Nein, das geht nicht. Ich erhalte beim Anclicken (Aufruf des Editors in der IDE) dann "Invalid Typecast".
[edit]Fehler, Fehler, Emanuela!!! Ich Trottel hatte von TCustomActionlist abgeleitet. Danke für's Augenöffnen. Naja, jetzt hatte ich den Editor schon fertig.[/edit]
Ibi fas ubi proxima merces
sudo /Developer/Library/uninstall-devtools --mode=all
  Mit Zitat antworten Zitat
Benutzerbild von Union
Union

Registriert seit: 18. Mär 2004
Ort: Luxembourg
3.492 Beiträge
 
Delphi 7 Enterprise
 
#4

Re: TComponentEditor für eigene Actionlist

  Alt 23. Jun 2006, 12:09
Nein, es geht doch nicht. Der Actionlist-Editor wird zwar aufgerufen und ich kann die bestehenden Actions bearbeiten, aber bei der Neuanlage werden wieder normale TAction-Objekte erzeugt.
Ibi fas ubi proxima merces
sudo /Developer/Library/uninstall-devtools --mode=all
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#5

Re: TComponentEditor für eigene Actionlist

  Alt 23. Jun 2006, 13:06
das ist klar. denn der normale Actionlisteditor kennt deinen neuen Typ ja nicht und weiß auch nicht was er da zusätzlich machen muss. In dem Fall kommst du dann wohl nicht drum herum dir deinen eigenen Editor zu schreiben.
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
Benutzerbild von Union
Union

Registriert seit: 18. Mär 2004
Ort: Luxembourg
3.492 Beiträge
 
Delphi 7 Enterprise
 
#6

Re: TComponentEditor für eigene Actionlist

  Alt 23. Jun 2006, 13:09
Eben darum gings. Den Editor habe ich auch schon fertig, es fehlen nur noch die Optionen:
  • Standardaktion hinzufügen - wo bekomme ich die her?
  • Multiselect von Actions - wie sag ichs dem Objektinspektor...
Ibi fas ubi proxima merces
sudo /Developer/Library/uninstall-devtools --mode=all
  Mit Zitat antworten Zitat
Benutzerbild von Union
Union

Registriert seit: 18. Mär 2004
Ort: Luxembourg
3.492 Beiträge
 
Delphi 7 Enterprise
 
#7

Re: TComponentEditor für eigene Actionlist

  Alt 25. Jun 2006, 20:01
Hallo,

ich hab es jetzt selber herausgefunden. Für alle Interessierten hier die Lösungen:

Standardactions
In Delphi sind die Standardactions als eigene Klassen implementiert. Eine Liste aller definierten Standardactions kann man über ActnRes.TStandardActions.ActionsList1 erhalten.

Da ich in dem speziellen Fall erweiterte Actions verwende, benutze ich die Standardactions nicht, denn sonst müsste ich nur dafür jede einzelne Standardactions-Klasse erneut ableiten. Das ist mir aber zu viel Aufwand; es handelt sich um 50 Klassen.

Hier trotzdem mal die Vorgehensweise (Habe mir aber nicht die Mühe eines Treeview gemacht):
Delphi-Quellcode:
procedure TSecActionsEditor.SelectStdAction;
var
   Frm : TForm;
   dmSa : TStandardActions;
   LbSa : TListBox;
   i : integer;
   ASecAction : TSecAction;
begin

   Frm := TForm.Create(Self);
   with Frm do begin
      Caption := 'Standard Actions';

      LbSa := TListBox.Create(frm);
      with LbSa do
      begin
         Parent := Frm;
         Top := 4;
         Left := 4;
         Width := frm.ClientWidth-8;
         Height := frm.Clientheight-24-8;
         Anchors := [aktop, akleft, akright, akbottom];
      end;

      with TButton.Create(frm) do
      begin
         Parent := frm;
         Top := frm.ClientHeight-28;
         Left := 4;
         Anchors := [akLeft, akBottom];
         Caption := '&Ok';
         ModalResult := mrOk;
      end;

      with TButton.Create(frm) do
      begin
         Parent := frm;
         Top := frm.ClientHeight-28;
         Left := 80;
         Anchors := [akLeft, akBottom];
         Caption := '&Cancel';
         ModalResult := mrCancel;
      end;

      dmSa := TStandardActions.Create(frm);
      for i := 0 to dmSa.ActionList1.ActionCount-1 do
      begin
         LbSa.Items.AddObject(TAction(dmSa.ActionList1.Actions[i]).Caption, dmSa.ActionList1.Actions[i]);
      end;

      ShowModal;
      if modalresult = mrOk then
      begin
         ASecAction := TSecAction(TheDesigner.CreateComponent(TSecAction,nil,0,0,0,0));
         ASecAction.ActionList := FSecActionList;
         ASecAction.Category := SNoCategory;
         ASecAction.Assign(TBasicAction(LbSa.Items.Objects[LbSa.ItemIndex]));

         lbActions.Items.Add(ASecAction.Caption);
         lbActions.ItemIndex := FSecActionList.ActionCount-1;
         RefreshActionsList;
         TheDesigner.SelectComponent(ASecAction);
         TheDesigner.Modified;
      end;
      Free;
   end;
end;
Multiselect von Actions im OI
Das Funktioniert über die Designer-Methode SetSelections - man braucht dafür eine SelectionListe. Bei Multiselect erscheint dann im OI die Anzahl der ausgewählten Elemente, die änderbaren Properties "schrumpfen".
Delphi-Quellcode:
type
   TSelectionList = IDesignerSelections;
...
procedure TSecActionsEditor.lbActionsClick(Sender: TObject);
var
   ASelectionList : TSelectionList;
   i :integer;
begin
   if lbActions.SelCount = 1 then
   begin
      // Ein Elemet gewählt
      if lbActions.ItemIndex >=0 then
         TheDesigner.SelectComponent(FSecActionList.Actions[lbActions.ItemIndex]);
   end
   else
   begin
      // Mehrere Elemente gewählt
      ASelectionList := CreateSelectionList;
      for i := 0 to lbActions.SelCount-1 do
      begin
         ASelectionList.Add(FSecActionList.Actions[i]);
      end;
      TheDesigner.SetSelections(ASelectionList);
   end;
   UpdateSpeedBar;
end;
Vielleicht helfen diese Infos ja dem einen oder anderen, der Komponenten entwickelt.
Ibi fas ubi proxima merces
sudo /Developer/Library/uninstall-devtools --mode=all
  Mit Zitat antworten Zitat
Alter Mann

Registriert seit: 15. Nov 2003
Ort: Berlin
948 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#8

Re: TComponentEditor für eigene Actionlist

  Alt 22. Dez 2006, 14:22
Hallo Union,

habe den Beitrag mit Intresse gelesen. Eine Frage nur: Wie spreche ich den OI an,
um die Properties der eignen Actions zu bearbeiten? Genauer intressiert mich dieser Part:
Delphi-Quellcode:
type
   TSelectionList = IDesignerSelections;
Also, wie sage ich es dem OI, das er die eigenen Action anzeigen soll?

Vielen Dank für Tipps und Hilfe,
sowie ein frohes Fest.

Alter Mann
  Mit Zitat antworten Zitat
Robert Marquardt
(Gast)

n/a Beiträge
 
#9

Re: TComponentEditor für eigene Actionlist

  Alt 22. Dez 2006, 14:44
Schau dich mal in der JVCL um. Ich glaube ich habe da was dazu gesehen.
  Mit Zitat antworten Zitat
Benutzerbild von Union
Union

Registriert seit: 18. Mär 2004
Ort: Luxembourg
3.492 Beiträge
 
Delphi 7 Enterprise
 
#10

Re: TComponentEditor für eigene Actionlist

  Alt 22. Dez 2006, 15:12
Zitat von Alter Mann:
Delphi-Quellcode:
type
   TSelectionList = IDesignerSelections;
Also, wie sage ich es dem OI, das er die eigenen Action anzeigen soll?
Wenn ich Dich richtig verstehe, willst Du wissen, woher der OI mitbekommt, dass er für die Editierung nicht den Standard-Actionlisteditor sondern den selbst erstellten verwenden soll. Das teilt man mit der Callback ExecuteVerb mit (Die gültigen "Verbs" definiert man über GetVerb und deren Anzahl mit GetVerbCount):
Delphi-Quellcode:
function TSecActionListEditor.GetVerbCount : integer;
begin
   // Wieviele Menüeinträge dürfen es denn sein im Kontextmenü der Komponente
   result := 1;
end;

function TSecActionListEditor.GetVerb(Index : integer): string;
begin
   case Index of
      // Rückgabe Menüeintrag
      0 : result := 'Software Union Security Editor';
   end;
end;

procedure TSecActionListEditor.ExecuteVerb(Index : integer);
begin
   case Index of
      // Menüauswahl auswerten
      0 : ShowSecActionListEditor(Designer, TSecActionList(Component));
   end;
end;
Dazu gibt es auch ein Beispiel in Delphi-Referenz durchsuchenExecuteVerb
Ibi fas ubi proxima merces
sudo /Developer/Library/uninstall-devtools --mode=all
  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 21:09 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