Announcement

Collapse
No announcement yet.

PopUp-menü ==> Knoten in TreeView

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • PopUp-menü ==> Knoten in TreeView

    Hallo<BR>

    Ich habe schon alles versucht, aber ich löse das Problem nicht.<BR>

    Ich will über ein PopUp_Menü in einem TreeView einen Knoten auslösen. Wie im Windows-Explorer.<BR>

    Ich habe schon versucht, wie im Forum vorgeschlagen: Im OnPopUp-Ereignis<BR>

    TreeView.Selected:=Treeview.Selected oder
    GetNodeAt(x,y). Hier weiss ich nicht, wo ich die X und Y-Werte herkriegen soll.<BR>
    Aber nichts reagiert.<BR>

    Hoffe auf eine Idee mit etwas Code.<BR>

    Gruss Rudolf

  • #2
    Hallo Rudolf,

    der folgende Code fügt bei einem Click auf den Menueintrag einen Knoten als Kind des aktuell selektierten Knotens ein.

    <pre>
    procedure TForm1.Add1Click(Sender: TObject);
    var
    Node: TTreeNode;
    begin
    Node := TreeView1.Selected;
    TreeView1.items.AddChild(Node, 'test1');
    end;
    </pre>

    Gruß

    Torste

    Comment


    • #3
      Hallo Torsten<BR>

      das Problem ist, dass ich die Position
      des Knotens aus dem TreeNode über den Namen aus dem Popupmenü haben muss.<BR>
      Wie kann ich den auslesen?<BR>

      Wenn ich die Knoten-Position z.B. mit setCursorPos(p) manuell ermittele, erhalte ich z.B x=8, y=120<BR>
      Wenn ich dann im PopupMenü auslöse
      TreeView.selected:=TreeView.GetNodeAt(8,120); wird das Bild hinter dem 1. Knoten gewechselt.<BR>

      Bei mir wie im Explorer geschlossener Ordner ==> offenen Ordner. <BR>
      Aber ich will ja den Baum am Knoten öffnen.<BR>

      Gruss Rudol

      Comment


      • #4
        Hallo Rudolf,

        ich habe wahrscheinlich noch nicht so richtig verstanden was Du willst.

        Bspl.: auf den Explorer bezogen:

        Im Menu sollen alle Laufwerke angezeigt werden. Wenn Du jetzt auf einen Menupunkt klickst sollen alle untergeordneten Verzeichnisse eingeblendet werden?

        Sollen die Menueinträge an die jeweils aktuelle (selektierter Knoten) KnotenEbene angepaßt werden?

        Gruß

        Torste

        Comment


        • #5
          Hallo Torsten<BR>

          habe mich wohl mal wieder missverständlich ausgedrückt.<BR>

          Ich habe in der Anwendung ein PopupMenü mit 5 Items. Beim Click auf eines der Items soll in einem TreeView, in dem wieder diese 5 Items als Ordner vorhanden sind, der entsprechende Ordner geöffnet werden und die Unterverzeichnisse sollen angezeigt werden.<BR>

          Ich muss die Werte für die Positionen der Knoten aus dem treeView oder treeNode auslesen, um dann gezielt diese Position zu aktivieren, dass der Baum aufgeklappt wird.<BR>

          Gruss Rudol

          Comment


          • #6
            Hallo Rudolf,

            soll beim Click auf ein MenuItem immer der selbe Knoten(Ordner) geöffnet werden oder gibt es die 5 Ordner in jeder Ebene der Baumstruktur (sozusagen rekursiv)?

            Gruß

            Torste

            Comment


            • #7
              Hallo Torsten<BR>

              Es soll immer der selbe Knoten geöffnet werden.<BR>

              Ich habe mir erstmal so geholfen<BR>

              for i:=0 to pm.Items.Count-1 do<BR>
              if sender = pm.Items[i] then z:=i; //Item-Pos im PopUp feststellen<BR>
              begin<BR>
              for j:=0 to tv.Items.Count-1 do<BR>
              if tv.Items[j].text=pm.Items[z].Caption then //Item Pos im TreeView fststellen<BR>
              tv.Selected:=tv.Items.Item[j+1]; //nächste Pos im TreeView<BR>
              end;<BR>

              Ich stelle fest, welches Item ich im PopUp-Menü gewählt habe<BR>
              Dann suche ich im TreeView die Item-Position über den Namen und
              wähle dann die nächste Item-Position.<BR>
              Dann wird der Ordner geöffnet.<BR>
              geht sicherlich eleganter.<BR>

              Gruss Rudol

              Comment


              • #8
                Hallo Rudolf,

                ich würde das so realisieren:

                Jedem MenuItem wird gleich der passende Knoten zugeordnet.

                Beim laden/erstellen der Knoten ordnest Du die "Hauptknoten" dem jeweiligen MenuItem zu.

                MenuItem1.Tag := integer(Node);

                <pre>
                procedure TForm1.Button1Click(Sender: TObject);
                begin
                if Sender is TMenuItem then
                begin
                if TObject(TMenuItem(sender).tag) is TTreeNode then
                TTreeNode(Sender.Tag).Expand(false);
                end;
                end;
                </pre>

                Gruß

                Torste

                Comment


                • #9
                  Hallo Torsten<BR>

                  vielen Dank für deine Hilfe<BR>

                  Deine Lösung ist natürlich professioneller<BR>

                  Gruss Rudol

                  Comment

                  Working...
                  X