AGB  ·  Datenschutz  ·  Impressum  







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

Property Editor für ActionList

Ein Thema von SvB · begonnen am 12. Mai 2007 · letzter Beitrag vom 23. Mai 2007
Antwort Antwort
SvB

Registriert seit: 21. Okt 2004
Ort: Eckenroth
426 Beiträge
 
Delphi 10.1 Berlin Enterprise
 
#1

Property Editor für ActionList

  Alt 12. Mai 2007, 15:04
Hallo,
ich schreiben gerade an einem Programm für eine Steuerung, d.h. der Benutzer soll sich selbst was zusammenklicken können. Dafür benötige ich eine Liste von Aktionen, die ausgeführt wird, wenn z.B. ein Taster gedruckt wird. Da habe ich mir gedacht, benutze doch eine ActionList.
Mein Problem dabei ist aber, dass der Benutzer zur Laufzeit den ActionList Property Editor aufrufen soll. Ich benutze den LMD Designer und da ist kein Property Editor für ActionLists dabei. Den Delphi eigenen finde ich im Quellcode nicht, so dass ich mir da was abschauen könnte und ich hab selbst keinen blassen schimmer, wie ich mir das selbst erstellen kann. Das Formular würde ich ja noch hinbekommen, aber der Rest hintendran, keine Ahnung.
Kann mir da jemand Helfen, wo ich eventuell Infos darüber finde.

Danke Sven
  Mit Zitat antworten Zitat
SvB

Registriert seit: 21. Okt 2004
Ort: Eckenroth
426 Beiträge
 
Delphi 10.1 Berlin Enterprise
 
#2

Re: Property Editor für ActionList

  Alt 16. Mai 2007, 18:04
Niemand eine Idee?
Gibt es den Delphieigenen ActionList Property Editor irgendwo im Quelltext, damit ich mir da Infos rausziehen kann?
Bin für jede Hilfe dankbar.

Grüße Sven
  Mit Zitat antworten Zitat
shmia

Registriert seit: 2. Mär 2004
5.508 Beiträge
 
Delphi 5 Professional
 
#3

Re: Property Editor für ActionList

  Alt 16. Mai 2007, 18:52
Ich glaube nicht, dass du mit einem TActionList Editor ans Ziel kommst.
Zunächst muss dein Programm in einer ActionList alle erlaubten Aktionen anbieten.
Der Benutzer könnte die Aktionen einzeln ausführen, wenn je ein Button mit einer Aktion verknüpft wäre.
Angenommen der Benutzer möchte folgende Aktionen automatisch ausführen:
ActClear, Action1, Action2, Action3, Action1, ActSave
Man sieht, dass Action1 zweimal vorkommt und das wäre innerhalb einer TActionList nicht erlaubt.
(TActionList verhindert, dass die gleiche TAction mehrfach eingefügt werden kann)

Die Lösung sieht ungefähr so aus:
die Namen aller Actions in einer ActionList werden auf eine ListBox kopiert.
Damit wird dem Benutzer der Vorrat an möglichen Aktionen angezeigt.
Der Benutzer kann per Drag & Drop die Einträge in eine zweite Listbox ziehen. (das Item aus der QuellListbox bleibt bestehen)
Es gibt Buttons zum auf- und abwärtsschieben der Items. Zusätzlich kann man einzelne Items löschen (DeleteButton)
Am Schluss hat man eine StringListe mit den Namen der Actions. Über FindComponent kann man die dazu passende Action finden und über die Methode .Execute ausführen.
Andreas
  Mit Zitat antworten Zitat
SvB

Registriert seit: 21. Okt 2004
Ort: Eckenroth
426 Beiträge
 
Delphi 10.1 Berlin Enterprise
 
#4

Re: Property Editor für ActionList

  Alt 16. Mai 2007, 20:13
Danke shmia,
dass eine Action nicht mehrfach vorkommen darf, dürfte das Problem nicht sein.
Mein Problem ist, dass ich in meinem LMDDesigner analog wie in Delphi mein Formular "designen" kann. Ich habe es jedenfalls so aufgebaut. Ich habe jedenfalls in meiner fertigen Applikation einen Objektinspektor, ein Formular, auf dem ich meine Komponenten drauf legen kann und habe meine Toolpalette und das Problem ist, dass wenn ich eine Actionlist auf mein Formular ziehe, dass mir von LMD keinen Property-Editor zur Verfügung gestellt wird, mit dem ich meine ActionList mit Actions füllen kann. Den Delphi eigenen kann man ja aus lizenzrechtlichen Gründen nicht benutzen.
Meine Idee war jetzt, dass ich mir selbst einen Property Editor für diese ActionList schreibe, denn ich kann für den LMDDesigner auch Editoren registrieren um diese dann mit den LMD Objektinspektor zu benutzen. Allerdings weiss ich nicht wie ich das alles anstellen soll und suche demnach nach irgendwelchen Infos. Am einfachsten wäre wohl der Quellcode des Delphi ActionList Editors, aber der scheint nicht bei den Sourcen dabei zu sein, jedenfalls nicht bei meinem D2006 oder ich bin einfach nur zu doof um den zu finden. Falls der vielleicht bei einer früheren Version dabei ist, die könnte ich mir zur not noch mal installieren um nach zu schauen, aber ich habe jetzt erst mal keine Lust alle vorherigen Versionen zu installieren um zu suchen, nimmt ja ne Menge Zeit in Anspruch. Vielleicht weiss ja jemand was darüber.
Ich habe mal ein Bild meiner Applikation angefügt, dass man sich mal ein Bild davon machen kann, was ich meine.

Ich habe mir im Moment mit einer Collection geholfen, da gibt es einen Property Editor, an dem ich schon etwas rumgebastelt habe, allerdings werden mir da beim Speichern des Formulars in einen Stream und dann in eine Datenbank nicht die Klassen mitgespeichert und beim laden habe ich dann das Problem, dass er dann die Basisklasse benutzen will, die aber nicht die Properties meiner geerbeten Klassen kennt, denn ich haben da mehrere und möchte halt nicht alle verschiedenen Variationen in die Basis-Klasse direkt mit einbauen.
Bei der ActionList habe ich ja die Möglichkeit Standard-Actions (TAction) einzufügen oder halt auch erweiterte z.B. für Datenbanken usw. und das ist genau das, was ich brauche, denn das wird dann auch so gespeichert, dass ich es später wieder korrekt laden kann, jedenfalls ist es in Delphi so und ich denke, dass es bei LMD dann auch so sein wird.

Ist vielleicht alles etwas komploziert, aber vielleicht kann mir doch jemand helfen und hat eine Idee, wo ich eine Info herbekommen. Ich möchte hier keinen fertigen Code oder sonst was.

Danke Sven
Miniaturansicht angehängter Grafiken
screenshot_207.jpg  
  Mit Zitat antworten Zitat
shmia

Registriert seit: 2. Mär 2004
5.508 Beiträge
 
Delphi 5 Professional
 
#5

Re: Property Editor für ActionList

  Alt 21. Mai 2007, 08:58
Zitat von SvB:
Ich habe mir im Moment mit einer Collection geholfen, da gibt es einen Property Editor, an dem ich schon etwas rumgebastelt habe, allerdings werden mir da beim Speichern des Formulars in einen Stream und dann in eine Datenbank nicht die Klassen mitgespeichert und beim laden habe ich dann das Problem, dass er dann die Basisklasse benutzen will, die aber nicht die Properties meiner geerbeten Klassen kennt, denn ich haben da mehrere und möchte halt nicht alle verschiedenen Variationen in die Basis-Klasse direkt mit einbauen.
Deine Klassen müssen mit RegisterClass oder RegisterClasses im Initialization-Abschnitt registriert werden, damit sie vom Streaming-System von Delphi benützt werden können.
Andreas
  Mit Zitat antworten Zitat
SvB

Registriert seit: 21. Okt 2004
Ort: Eckenroth
426 Beiträge
 
Delphi 10.1 Berlin Enterprise
 
#6

Re: Property Editor für ActionList

  Alt 23. Mai 2007, 22:26
Hallo, es funktioniert jetzt alles.
Ich habe mir einen eigenen ActionList Componenten-Editor geschrieben unter der Zuhilfenahme des Collection-Editors von LMD und den ActionList-Editor aus dem Lazarus-Projekt. Der Editor funktioniert jetzt gut und ich kann alles das damit machen, was ich mit dem Delphieigenen auch tun kann. Dann hatt ich noch das Problem, dass ich keinen Doppelklick auf die Komponente im LMD Designer machen konnte, da dies nicht unterstützt wird. Mittlerweile habe ich aber auch hier eine Lösung durch den Support und nutze LMDDesigner.OnDblClick und finde da heraus, auf welche ActionList ich geklickt habe und rufe dann von Hand den ActionList-Editor auf.

@shima: Ja, das ein oder andere musste ich auch mit RegisterClass registrieren, damit es gespeichert werden kann. Im Moment bin ich erst man zufrieden und glücklich, die ganze Sache hat mich volle vier Tage gekostet.

Noch eine frage nebenbei:
Ich habe mit eine Klasse von TActionList abgeleitet, die ungefähr so aussieht:
Delphi-Quellcode:
TMyActionList = class(TCustomActionList)
privat
  FActionList = TCustomActionList;
  function GetActionList: TCustomActionList;
public
  constructor Create(AOwner: TComponent); override;
  destructor Destroy; override;
published
  property Actions: TCustomActionList read GetActionList;
end;

constructor TMyActionList.Create(AOwner: TComponent);
begin
  inherited Create(AOwner);
  FActionList := self;
end;

destructor TMyActionList.Destroy;
begin
  FActionList := nil;
  inherited Destroy;
end;

function TMyActionList.GetActionList: TCustonActionList
begin
  Result := FActionList;
end;
Damit wollte ich eigentlich erreichen, dass ich ein sichtbares Property im Objektinspektor habe auf sich selbst um damit dann auch den Property-Editor aufrufen zu können. Das funktioniert auch soweit, zumindest unter LMD. Wie es direkt in Delphi aussieht kann ich nicht sagen.
Das Problem ist aber, wenn die Komponente zerstört wird, z.B. das Programm wird geschlossen oder ich schließe den Designer, dann wird unendlich oft auf GetActionList zugegriffen und irgendwann kommt es zum Stacküberlauf. Ich habe bis jetzt noch keine Möglichkeit gefunden zu prüfen, ob die Komponente zerstört wird und gebe in diesem Fall nil zurück, dann funktioniert es nämlich, habs getestet. Ich habe schon mit Notification usw. getestet, aber bevor es da rein springt, springt er erst in GetActionList und da kommt er dann "nicht mehr raus". Falls jemand eine Idee hat, ob man das überhaupt irgendwie machen kann, nur her damit, ansonsten kann ich auch mit dem Doppelklick leben.

Grüße Sven
  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 12: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