AGB  ·  Datenschutz  ·  Impressum  







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

Zwei PopUp's zusammenführen?

Ein Thema von taaktaak · begonnen am 27. Feb 2008 · letzter Beitrag vom 28. Feb 2008
Antwort Antwort
taaktaak

Registriert seit: 25. Okt 2007
Ort: Radbruch
1.990 Beiträge
 
Delphi 7 Professional
 
#1

Zwei PopUp's zusammenführen?

  Alt 27. Feb 2008, 15:47
Moin, Moin.

In einer von TTreeView abgeleiteten Komponente möchte ich ein PopUpMenü bereitstellen, welches Standardoperationen (Layout, Sortierung) bereitstellt. Mit Einbindung der Komponente steht dieses dem Anwendungsprogramm dann automatisch zur Verfügung und kann dann um anwendungsbezogene Aufgaben ergänzt werden.

Meine Überlegung ist nun, das anwendungsbezogene Popup "ganz normal" und ohne Bezug auf das in der Komponente enthaltene Popup zu definieren und in einem zweiten Schritt das neu erstellte Popup mit dem bereits in der Komponente enthaltenen zu einem optisch einzigen Popup zu "verschmelzen".

Natürlich könnte man das in der Komponente enthaltene Popup erweitern, aber vielleicht gibt es ja auch eine Möglichkeit, das vorstehend beschriebene "Verschmelzen" zu realisieren?

Hat jemand eine Idee, oder ist mein Denkansatz grundsätzlich nicht umzusetzen?
Ralph
  Mit Zitat antworten Zitat
shmia

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

Re: Zwei PopUp's zusammenführen?

  Alt 27. Feb 2008, 18:16
Delphi-Quellcode:
procedure CloneMenuItem(source, dest : TMenuItem);
begin
   dest.Action := source.Action;
   dest.Caption := source.Caption;
   dest.ShortCut := source.ShortCut;
   dest.Checked := source.Checked;
   dest.Enabled := source.Enabled;
   dest.Visible := source.Visible;
   dest.OnClick := source.OnClick;

   dest.HelpContext := source.HelpContext;
   dest.Hint := source.Hint;
   dest.RadioItem := source.RadioItem;
end;

procedure CopyMenuItems(source, dest : TMenuItem);
var
   i : Integer;
   mi : TMenuItem;
begin
   Assert(Assigned(source), 'no source menu item');
   Assert(Assigned(dest), 'no destination menu item');
// dest.Clear; // auskommentiert, da MenuItems im Ziel erhalten bleiben sollen

   for i :=0 to source.Count-1 do
   begin
      mi := TMenuItem.Create(dest);
      CloneMenuItem(source.Items[i], mi);
      dest.Add(mi);
      if source.Items[i].Count > 0 then
         CopyMenuItems(source.Items[i], mi); // rekursiver Aufruf ;-)
   end;
end;
Der Aufruf wäre dann:
CopyMenuItems(Komponente.PopupMenue.Items, PopupMenue1); // oder anderstrum, je nachdem, was dann das aktive PU-Menue sein soll
Andreas
  Mit Zitat antworten Zitat
taaktaak

Registriert seit: 25. Okt 2007
Ort: Radbruch
1.990 Beiträge
 
Delphi 7 Professional
 
#3

Re: Zwei PopUp's zusammenführen?

  Alt 27. Feb 2008, 18:48
Ja, das schaut ja wirklich sehr gut aus; werde es mal in Ruhe ausprobieren. Hatte nicht mit einer betriebsfertigen Lösung gerechnet. Aber wenn ich mir den Code so anschaue, muss ich doch stark bezweifeln, ob ich das, selbst bei konkreten Hinweisen, hinbekommenn hätte.

Vielen, vielen Dank shmia
Ralph
  Mit Zitat antworten Zitat
taaktaak

Registriert seit: 25. Okt 2007
Ort: Radbruch
1.990 Beiträge
 
Delphi 7 Professional
 
#4

Re: Zwei PopUp's zusammenführen?

  Alt 27. Feb 2008, 21:09
So, habe es jetzt mit Erfolg getestet!
Es funktioniert!
Im Aufrufbeispiel hat sich ein Flüchtigkeitsfehler eingeschlichen; es muss natürlich auch der zweite Parameter als Items übergeben werden:
Delphi-Quellcode:
CopyMenuItems(Komponente.PopupMenue.Items, PopupMenue1.Items);
 // oder andersrum, je nachdem, was dann das aktive PU-Menue sein soll
Thanks a lot
Ralph
  Mit Zitat antworten Zitat
taaktaak

Registriert seit: 25. Okt 2007
Ort: Radbruch
1.990 Beiträge
 
Delphi 7 Professional
 
#5

Re: Zwei PopUp's zusammenführen?

  Alt 27. Feb 2008, 22:25
Leider, leider befällt mich nun eine gewisse Ernüchterung

Da das ganze ja letztlich ein KOPIEREN des einen in das andere PopUp darstellt, verliert das Programm den Zugriff auf Eigenschaften des kopierten PopUps. Ein deaktivieren/aktivieren eines Eintrags des "kopierten PopUps" ist nicht mehr möglich, da diese Operationen ja an das Original gesendet werden und nicht an die Kopie. Damit wäre mein Ansinnen dann doch uninteressant - oder bin ich schon wieder zu blöd eine Lösung zu finden?????
Ralph
  Mit Zitat antworten Zitat
Benutzerbild von ULIK
ULIK

Registriert seit: 25. Sep 2006
Ort: Regensburg
427 Beiträge
 
Delphi 11 Alexandria
 
#6

Re: Zwei PopUp's zusammenführen?

  Alt 28. Feb 2008, 06:00
Den Code der beim Anwählen eines Menüpunkts ausgeführt wird nicht in den OnClick Handler des Menüitems legen sondern immer mit Actions arbeiten. Dann kannst Du eine Action beliebig vielen Items zuweisen und wenn Du sie deaktivieren willst: Action deaktivieren und schon sind alle zugehörigen Menüpunkte auch deaktiviert!
Und dann klappt auch der obige Codemit dem Duplizieren des Popups

Grüße,
Uli
  Mit Zitat antworten Zitat
taaktaak

Registriert seit: 25. Okt 2007
Ort: Radbruch
1.990 Beiträge
 
Delphi 7 Professional
 
#7

Re: Zwei PopUp's zusammenführen?

  Alt 28. Feb 2008, 08:43
Guten Morgen Uli,
vielen Dank für den Hinweis!

Hatte letzte Nacht noch weiter gegrübelt. Problem war, dass im OnClick des Source-PopUps einige Tests und Einstellungen von Untermenüs vorgenommen wurden. Das Source-PopUp-OnClick steht nach dem kopieren der Items in das Destination-Popup aber nicht mehr zur Verfügung.

Die Lösung in meinem konkreten Fall, liegt letztlich auf der Hand: Die Tests und Einstellungen mussten einfach nur in die OnClick-Events der Source-Items aufgenommen werden, die die jeweiligen Untermenüs aufrufen. Die OnClick-Events der einzelnen Items werden ja kopiert und stehen im Destination-Popup zur Verfügung - mein Ziel ist also erreicht!

Muss zu meiner Schade gestehen, dass ich noch nie (?! ) mit Actionlists gearbeitet habe, werde mir das einmal näher anschauen.
Ralph
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

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

Re: Zwei PopUp's zusammenführen?

  Alt 28. Feb 2008, 09:54
Ich würde am kopieren festhalten. Um Änderungen am Nutzermenü jedoch mit zu bekommen würde ich vor jedem anzeigen das Menü erneut kopieren (natürlich vorher die alten Einträge raus schmeißen).
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  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 05:28 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