![]() |
Events weiterreichen
Liste der Anhänge anzeigen (Anzahl: 1)
Moin,
ich bastel grade an meinem MenuEditor code sagt mehr als 1000 Worte :)
Delphi-Quellcode:
TMenuEditor hat TMenuEntries für jedes Element...TMenuEntry kapselt ein Element (Menüeintrag),
TChangeEvent = procedure (Sender: TObject;Index:Integer) of object;
TMenuEntry=class(TComponent) private ... FMenu:TMenuEditor; .... published property SubMenu:TMenuEditor read FSubMenu write FSubMenu; property Menu:TMenuEditor read FMenu; end; TMenuEditor=class(TListbox) private .... FOnAdd,FOnDelete,FOnChange:TChangeEvent; protected procedure SetAddEvent(e:TChangeEvent); ... public property Entries[index:integer]:TMenuEntry read GetEntry; published property OnAdd:TChangeEvent read FOnAdd write SetAddEvent; ... end; Das Menü ist kaskadierbar, d.h. jeder dieser Einträge kann einen weiteren editor beinhalten. nun will ich, dass beim setzen der events des obersten TMenuEditor die events weiter unten auch gesetzt werden. dazu hab ich für die Events folgende Setter-Methode (bei den beiden anderen Events genauso nur halt mit FOnChange/FOnDelete):
Delphi-Quellcode:
leider bekomme ich beim beenden meiner Test-Applikation eine "ungültige Zeigeroperation".
procedure TMenuEditor.SetAddEvent(e:TChangeEvent);
var i:integer; begin FOnAdd:=e; for i:=0 to items.count-1 do begin if assigned(Entries[i].Submenu) then Entries[i].Submenu.OnAdd:=e; end; end; ich habe die Test-anwendung mal angehängt (vererbung momentan auskommentiert). Hoffe, jemand hat eine Idee, wie man das gewünschte (evtl. auch anders) realisieren kann. //Edit: habe auch schon versucht folgendes am ende der Procedure LoadMenuFromTreeview einzubauen mit gleichem ergebnis:
Delphi-Quellcode:
Gruß Frank
Editor.OnAdd:=form1.MenuAdd;
Editor.OnDelete:=form1.MenuDelete; Editor.OnChange:=form1.MenuChange; |
Re: Events weiterreichen
niemand eine idee? *push*
|
Re: Events weiterreichen
Hatten wir doch neulich erst...
![]() Okay... das is Blödsinn... aber vor dem beenden könntest du die Events auf nil setzen... |
Re: Events weiterreichen
Moin,
das ist keine Frage á la "Wie definiere ich ein event" oder "wie weise ich eine methode einem Event zu". es geht um einen speziellen Fall, die rekursive zuweisung. Ich weis schon wie man die Suche benutzt, jedoch hab ich nichts gefunden, was mir weitergeholfen hat. Wenn du einen bestimmten Beitrag gefunden hast, dann verlinke bitte den. Wie geht das mit dem durchstreichen?? => der zitat-button ist praktisch :) sicher, aber das ist in meinen Augen eher eine "Pfusch-Lösung" ;) Gruß Frank |
Re: Events weiterreichen
Tja, dann entschuldige, dass ich es evtl. für Hilfreich hielt und deshalb nur durchgestrichen hab. Ich bekomme übrigens bei jedem Eintrag in den Popupmenüs ungültige Typumwandlungen. Weiterreichen von Events ist Pfusch? Ausser dass du es Rekursiv machst und da evtl. was schief geht ist das Beispiel nicht gross anders.
|
Re: Events weiterreichen
Sorry,
war keine Kritik an deiner Hilfsbereitschaft, nur dürfte es nicht im Sinne der OOP sein, dass man vor dem freigeben die events deaktiviert, oder seh ich das falsch? sowas sollte ja eigentlich die klasse selber machen, wenns denn unbedingt notwendig ist, vielleicht gibt es ja auch eine elegantere Variante, auf das hinzufügen/löschen in diversen ebenen zureagieren, ohne für jede das event neu zu setzen (was ja auch zu dem mysteriösen Fehler führt). Wo bekommst du da ungültige Typumwandlungen? sowas hatte ich bei meinen bisherigen Tests noch nicht... Gruß Frank |
Re: Events weiterreichen
Neuer Eintrag/Neues SubMenu
hast du mal haltepunkte gesetzt? Ich bin im Moment zu Müde, aber evtl. schiesst auch was zw. Menuentry und Menueditor quer... Den fehler beim Beenden hatte ich übrigens nicht. |
Re: Events weiterreichen
Liste der Anhänge anzeigen (Anzahl: 1)
also einen Fehler (ungültige Typumwandlung) beim Erstellen eines eintrags/untermenüs hab ich nicht (unter d3 und d7 getestet). nur, wenn ich versucht habe, bei einem bereits vorhandenen Untermenü es nochmal zu erstellen (AV, hab ich bei mir schon gefixt).
wegen dem ursprünglichen Fehler: hast du die o.g. auskommentierten sections wieder aktiviert? der fehler tritt bei mir auch unter d3 und d7 auf... hab das mal versucht mit dem nil zu realisieren, scheint soweit zu funktionieren:
Delphi-Quellcode:
das ganze Project mit aktuellen Stand hab ich angehängt (wegen dem invalid Typecast).
destructor TMenuEntry.Destroy;
begin FProperties.Free; if assigned(fSubmenu) then begin if FMenu.FMenuVisible=FSubMenu then FMenu.FMenuVisible:=nil; FSubMenu.OnDelete:=nil; FSubMenu.OnAdd:=nil; FSubMenu.OnChange:=nil; FSubMenu.Free; end; inherited; end; Gruß Frank |
Re: Events weiterreichen
ich muss gestehn, ich hab mir nur fix die Sourcen angesehn und die Exe gestartet... werds mal richtig laden
edit: keine ungültige Zeigeroperation, und solang ich auf einem Menü bleib, funzt das Popup-menu zum steuern auch Fehlerfrei... ich bin mir nicht sicher, aber ich würd den Fehler im Treeview suchen... Die ganzen Typecasts zu untersuchen ist mir offen gesagt ein wenig aufwändig ;) |
Re: Events weiterreichen
die "ungültige Zeigeroperation" kommt auch nach der nil-Modifikation nicht mehr ;)
jedoch kommt bei mir auch kein von dir angesprochener "ungültige Typumwandlung"-Fehler. was meinste du mit "solang ich auf einem Menü bleib, funzt das Popup-menu zum steuern auch Fehlerfrei"? wann funktioniert es nicht? konnte bei mir auch in dem vordefinierten Untermenü Einträge und weitere Untermenüs fehlerfrei erstellen. Gruß Frank |
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:15 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz