Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi Events weiterreichen (https://www.delphipraxis.net/93489-events-weiterreichen.html)

_frank_ 6. Jun 2007 19:54


Events weiterreichen
 
Liste der Anhänge anzeigen (Anzahl: 1)
Moin,
ich bastel grade an meinem MenuEditor
code sagt mehr als 1000 Worte :)

Delphi-Quellcode:
  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;
TMenuEditor hat TMenuEntries für jedes Element...TMenuEntry kapselt ein Element (Menüeintrag),
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:
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;
leider bekomme ich beim beenden meiner Test-Applikation eine "ungültige Zeigeroperation".
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:
  Editor.OnAdd:=form1.MenuAdd;
  Editor.OnDelete:=form1.MenuDelete;
  Editor.OnChange:=form1.MenuChange;
Gruß Frank

_frank_ 8. Jun 2007 23:07

Re: Events weiterreichen
 
niemand eine idee? *push*

cruiser 8. Jun 2007 23:08

Re: Events weiterreichen
 
Hatten wir doch neulich erst... hier

Okay... das is Blödsinn... aber vor dem beenden könntest du die Events auf nil setzen...

_frank_ 8. Jun 2007 23:18

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

cruiser 8. Jun 2007 23:50

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.

_frank_ 9. Jun 2007 00:02

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

cruiser 9. Jun 2007 00:11

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.

_frank_ 9. Jun 2007 14:43

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:
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;
das ganze Project mit aktuellen Stand hab ich angehängt (wegen dem invalid Typecast).

Gruß Frank

cruiser 9. Jun 2007 15:29

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 ;)

_frank_ 9. Jun 2007 16:50

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.
Seite 1 von 2  1 2      

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