AGB  ·  Datenschutz  ·  Impressum  







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

Problem mit dynamischem PopUp Menu

Ein Thema von Grolle · begonnen am 10. Okt 2006 · letzter Beitrag vom 12. Okt 2006
Antwort Antwort
Grolle

Registriert seit: 5. Nov 2004
Ort: Coesfeld
1.268 Beiträge
 
Delphi 2010 Professional
 
#1

Problem mit dynamischem PopUp Menu

  Alt 10. Okt 2006, 16:45
Hallo,
ich erstelle aus einem Treeview ein PopUpMenÜ:
Delphi-Quellcode:
  if not Assigned(Node) then
    begin
      Temp := AdvTreeComboBox1.Treeview.Items[0];
      while Assigned(Temp) do
        begin
          Item := TMenuItem.Create(Self);
          Item.Caption := Temp.Text;
          Item.OnClick := MenuItemClick;
          PopupMenu1.Items.Add(Item);
          if Temp.Count > 0 then AddMenu(Temp, Item);
          Temp := Temp.GetNextSibling;
        end;
    end
  else
    begin
      Temp := Node.GetFirstChild;
      while Assigned(Temp) do
        begin
          Item := TMenuItem.Create(Self);
          Item.Caption := Temp.Text;
          Item.OnClick := MenuItemClick;
          Menu.Add(Item);
          if Temp.Count > 0 then AddMenu(Temp, Item);
          Temp := Temp.GetNextSibling;
        end;
    end;

und:

procedure TForm1.MenuItemClick(sender : TObject);
var
s : string;
begin
  with Sender as TMenuItem do
    begin
      s := caption;
    end;
    ShowMessage(s);
end;
Leider klappt das OnClick-Ereignis im Menü nicht so wie es soll. Schon im der oberen Ebene
wird die Mesage beim MouseOver angezeigt?!?
Viele Grüße...

  Mit Zitat antworten Zitat
Grolle

Registriert seit: 5. Nov 2004
Ort: Coesfeld
1.268 Beiträge
 
Delphi 2010 Professional
 
#2

Re: Problem mit dynamischem PopUp Menu

  Alt 12. Okt 2006, 11:39
Niemand eine Ahnung?

  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#3

Re: Problem mit dynamischem PopUp Menu

  Alt 12. Okt 2006, 17:02
Hallo Stefan,

du solltest den menu items, welche als Untermenü fungieren, nicht den gleichen OnClick() event handler zuordnen, wie den items auf der untersten Ebene. Zumindest solltest du im event handler unterscheiden:

Delphi-Quellcode:
procedure TForm1.MenuItemClick(Sender: TObject);
var
  s: String;
begin
  with Sender as TMenuItem do
    if Count = 0 then
      ShowMessage(Caption);
end;
Hintergrund ist, dass deine submenu items beim Überfahren mit der Maus automatisch das event OnClick() auslösen.

Grüße vom marabu
  Mit Zitat antworten Zitat
Grolle

Registriert seit: 5. Nov 2004
Ort: Coesfeld
1.268 Beiträge
 
Delphi 2010 Professional
 
#4

Re: Problem mit dynamischem PopUp Menu

  Alt 12. Okt 2006, 19:01
Hallo,
danke für deine Antwort. Leider komme ich jetzt nicht an die Caption von der obersten Ebene.
Gibt es da eine bessere Lösung?
Viele Grüße...

  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#5

Re: Problem mit dynamischem PopUp Menu

  Alt 12. Okt 2006, 19:11
Du kannst die Items in einem Menü durchaus auch als Baum begreifen. Insofern gibt es routing items (inner nodes) und action items (leaf nodes). Wenn du ein action item anklickst, hast du über die Parent-Eigenschaft die Möglichkeit alle übergeordneten Captions zu ermitteln. Ist das nicht wunderbar? Wenn dich das nicht glücklich macht, dann beschreibe mal, wann du wozu den top level node benötigst.

Grüße
  Mit Zitat antworten Zitat
Grolle

Registriert seit: 5. Nov 2004
Ort: Coesfeld
1.268 Beiträge
 
Delphi 2010 Professional
 
#6

Re: Problem mit dynamischem PopUp Menu

  Alt 12. Okt 2006, 19:27
Hi,
ich möchte mit den Einträgen meine Datenbank filtern.
Der Treeview ist:
Firma A - Abteilung A
- Abteilung B
- Abteilung C
Firma B - Abteilung A
- Abteilung B
- Abteilung C
.....
Ich brauch also z. B.: |Firma A| oder |Firma A - Abteilung B|.
Durch den String filtere ich die Datenbank. In der alten Programmversion hatte ich
nur eine ebene, was natürlich einfacher war
Viele Grüße...

  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#7

Re: Problem mit dynamischem PopUp Menu

  Alt 12. Okt 2006, 19:47
Für deinen Anwendungsfall könnte ich mir einen zusätzlichen Total-Selektor vorstellen:

Code:
A-Firma >> [b]Alle[/b]
[color=#cccccc]B-Firma[/color]   -----------
[color=#cccccc]C-Firma[/color]   A-Abteilung
           B-Abteilung
Wenn dein Datenmodell stimmig ist, dann harmoniert dieser Ansatz ausgezeichnet mit diesem.

Gute Nacht
  Mit Zitat antworten Zitat
Grolle

Registriert seit: 5. Nov 2004
Ort: Coesfeld
1.268 Beiträge
 
Delphi 2010 Professional
 
#8

Re: Problem mit dynamischem PopUp Menu

  Alt 12. Okt 2006, 19:54
Ich kann dir nicht ganz folgen...

  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#9

Re: Problem mit dynamischem PopUp Menu

  Alt 12. Okt 2006, 20:05
Hallo Stefan,

nochmal mit anderen Worten: wenn deine Daten vollständig normalisiert sind, dann hast du sowieso nur Referenzen auf die Abteilung und in einer gesonderten Tabelle ORGEINHEITEN (bei rekursivem Ansatz, ansonsten zwei Tabellen FIRMEN und ABTEILUNGEN) die Beziehung von Abteilung zu Firma. Damit alle Befehle nur auf der Blatt-Ebene des Menübaums ausgeführt werden, nimmst du zusätzlich zu den Abteilungen einer Firma einfach noch das Item "Alle" mit auf und selektierst entsprechend.

Besser so?
  Mit Zitat antworten Zitat
Grolle

Registriert seit: 5. Nov 2004
Ort: Coesfeld
1.268 Beiträge
 
Delphi 2010 Professional
 
#10

Re: Problem mit dynamischem PopUp Menu

  Alt 12. Okt 2006, 20:14
Jetzt hats geklingelt .

  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 14:19 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