Delphi-PRAXiS

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/)
-   -   Eigenes Mainmenu: Verschachtelung ? (https://www.delphipraxis.net/88941-eigenes-mainmenu-verschachtelung.html)

mimi 23. Mär 2007 11:56


Eigenes Mainmenu: Verschachtelung ?
 
Hallo,
ich möchte mir gerne mit Canvas mein eigenes MainMenu erstellen. Soweit auch kein Problem.

Ich habe eine einfache Listbox geschrieben, wo ich die anordnung der einzelnen Einträge verändern kann.

Ich möchte gerne das jeder Eintrag unter Einträge hat... ich weiß nur nicht wie ich das am besten machen kann.
Ich habe einfach gesagt das jeder Eintrag eine Listbox hat....
aber irgenwie habe ich Probleme das Anklickte Menu ausfindig zu machen.

ich habe die frage schon hier gestellt:
http://www.lazarusforum.de/viewtopic.php?p=6139#6139

dort habe ich auch meinen Quellcode gepostet. Ich hoffe das nimmt mir jetzt hier keine übel das ich denn Qullecode nicht noch einmal hier poste... ich finde es so Übersichtlicher oder was meint ihr ?

Vielen Dank schonmal im voraus !

DP-Maintenance 23. Mär 2007 13:06

DP-Maintenance
 
Dieses Thema wurde von "SirThornberry" von "Programmieren allgemein" nach "VCL / WinForms / Controls" verschoben.

SirThornberry 23. Mär 2007 13:09

Re: Eigenes Mainmenu: Verschachtelung ?
 
hallo, willst du ein komplettes Menü aus Listboxen erstellen mit "Baumstruktur"? Oder hab ich das falsch verstanden?
willst du das es wie Listboxen aussieht?
[Edit]
trotz deine Beschreibung von
Zitat:

Item1 Item2 Item3 Item4
Sub 1 -> u1
Sub 2 u2
Sub 3
Sub 4
ist es anhand der Struktur nicht eindeutig welches Subitem zu welchem Oberitem gehört.
Das TreeView speichert zum Beispiel die Struktur so:
Code:
Item1
  Item1_1
  Item1_2
    Item1_2_1
    Item1_2_2
    Item1_2_3
    Item1_2_4
    Item1_2_5
  Item1_3
Item2
Item3
durch die Einrückung ist eindeutig welches Item zu welchem oberitem gehört.
Bei deiner Struktur müsste man schon textanalyse betreiben. Zudem könntest du dann kein Item haben welches "Sub 2 u2" heißt weil dann das u2 wohl irgendwie interpretiert wird.

mimi 23. Mär 2007 13:17

Re: Eigenes Mainmenu: Verschachtelung ?
 
du hast mich richtig verstanden: mein Mainmenu soll komplet aus meiner eigenen Listbox bestehen also:
der Header soll eine Listbox sein wo nur die anordnung anders ist. und jedes Item soll als unter Menu ein Listbox haben und dieses auch und so weiter....

mimi 23. Mär 2007 13:34

Re: Eigenes Mainmenu: Verschachtelung ?
 
naja ich wollte nicht nach dem Caption suchen. sondern dem Item allgemein.
Jeder Unter Menu ist ja eine klasse für sich.

Evlt. wenn es nötig ist speichere ich eine art ID mit ab, für jedes menu und jedes Eintrags.

kennst du Mozilla Firefox ? und dort das Lesezeichen Menu ?
Dort kannst du Ordner hinzufügen und so weiter. Im Prinzip möchte ich das gleiche nicht gerade für Lesezeichen.

Mir geht es hauptsälich um die Frage(n)
a: wie erstelle ich so eine Strucktur ?
b: wie greife ich drauf zu.

Edit:
ist es anhand der Struktur nicht eindeutig
das war nur ein Beispiel wie es später Grafisch aussehen soll(te).

edit2:
du meinst ich sollte das intern so regeln wie eine TreeView ?
so in der art. und es halt nur anders da stellen. Keine schlechte Idee. danke für den neuen ansatzt.

edit3:
ach ja, ich möchte gerne ausehr dem Text noch andere Daten mit abspeichern z.b. wude es angeklickt ?
welche Farbe(Hintergrund und Vordergrund) und sowas halt. Im Prinzip könnte ich also eine TStringlist nehmen. Es dort die Daten als Objekte mit abspeichern, Problem ist nur dort kannst du keine Einträge löschen bzw.die Objekte können nicht wieder gelöscht werden, und soviel ich weiß auch nicht auf nil gesetzt werden.

mimi 23. Mär 2007 13:46

Re: Eigenes Mainmenu: Verschachtelung ?
 
ich habe mir noch eine andere strucktur überlegt:
Zitat:

Item0|Informationen zum aussehen
item0\test1|Informationen zum aussehen
item0\test2|Informationen zum aussehen
item0\test3|Informationen zum aussehen

item1|Informationen zum aussehen
item1\test1|Informationen zum aussehen
item1\test2|Informationen zum aussehen
item1\test3|Informationen zum aussehen

item0\item2\Text1|Informationen zum aussehen
item0\item2\Text2|Informationen zum aussehen
item0\item2\Text3|Informationen zum aussehen

was haltet ihr davon ?
währe das denn auch OOP ? ich glaube nicht oder ?
ich würde das schon irgendwie, nach dem OOP Prinzip machen wollen. Und genau da ist das Problem :cry: :cry:

Edit: aber die haupt Fragen bleiben bestehen: wie könnte ich jetzt auf ein Item zu greifen ? bzw. auf ein Menu

SirThornberry 23. Mär 2007 13:50

Re: Eigenes Mainmenu: Verschachtelung ?
 
willst du per Textdatei bzw. Text die Struktur erstellen lassen oder zur Laufzeit die Menüeinträge einzeln erzeugen lassen?
die Objectstruktur wäre die gleiche wie bei einem Treeview. Ein Item kann mehrere Subitems haben wovon wieder jedes mehrere Subitems haben kann wovon wieder jedes mehrere Subitems haben kann etc.

Deine Hauptfrage hängt davon ab wie du das ganze realisierst.

Könntest du bitte zukünftig die Edit-Funktion nutzen?! :)

mimi 23. Mär 2007 13:57

Re: Eigenes Mainmenu: Verschachtelung ?
 
Die Frage habe ich mir auch gerade eben gestellt.
Ich denke die müssen nicht im OI anklickbar sein. Es reicht vollkommen wenn ich mir mein eigenen Editor dafür schreibe. Wobei währe es aufwendig, wenn jedes item jetzt doch im oi anklickbar sein sollte ?

ein anders Problem ist ja noch: jedes Item muss angeklickbar sein.
angenommen ich nehme eine TStringlist und speichere alles als text ab.

Dann kann ich ja schlecht beim jeden klicken oder bei jeder Maus Bewegung in diese Tstringlist schauen welches Rect die Items haben.

Ich habe mir überlegt dafür eine extra liste zu nehmen, währe das praktisch oder gibt es noch bessere Möglichkeiten ?

mimi 23. Mär 2007 14:50

Re: Eigenes Mainmenu: Verschachtelung ?
 
ich habe mir überlegt, ich nehme diese Strucktur:
Zitat:

Item0|Informationen zum aussehen
item0\test1|Informationen zum aussehen
item0\test2|Informationen zum aussehen
item0\test3|Informationen zum aussehen

item1|Informationen zum aussehen
item1\test1|Informationen zum aussehen
item1\test2|Informationen zum aussehen
item1\test3|Informationen zum aussehen

item0\item2\Text1|Informationen zum aussehen
item0\item2\Text2|Informationen zum aussehen
item0\item2\Text3|Informationen zum aussehen
jetzt erstelle ich eine Klasse TmyMainMenu, die hat eine Procedure LoadRootItems ein Root item ist eine Zeile wo kein \ vorkommt.
Bein laden wird ein Array gefüllt, und zwar mit jedem einzelnen Item der gezeichnet wird. am Anfang sind das 2(im beispiel Script).

Jetzt klicke ich auf Item0, dann wird eine Procedure mit z.b. dem Namen LoadSubItems auf gerufen. Als Parameter erwartet sie einen Caption (Später eine ID). Es gibt in der Klasse selber eine Gobale Variable Level das ist der aktuelle TokenIndex. der wird um eins erhöht, wenn auf ein Item geklickt wird.

Jetzt habe ich das angeklickte Item und den Aktuellen TokenIndex(Level).
die procedure LoadSubItems ermittelt nun welche unter items zu item0 gehöhren.

In der Liste(array) wird auch die Zeilen Nummer zu den Untermenus gespeichert.
dann muss nicht mehr gesucht werden sondern nur vergliechen:
ist ParentCaption immer noch gleich Zeile als sprich gleich Item0 wenn ja füge es der Liste hinzu.
Wenn nicht breche das hinzufügen ab.

Ich hoffe ihr könnt mir noch folgen.

Dank dieser Liste habe ich die Möglichkeit festzustellen, welches Item angeklickt wurden ist und kann somit sein
unter Menu ermitteln(das hoffe ich auf jedenfall).
beim zeichnen wird jetzt auch nur diese Liste durch gegangen und bei jeder Mausbewegung bzw. beim jeden Klicken mit der Maus ebenfalls.

was meint ihr dazu ?

mimi 25. Mär 2007 17:48

Re: Eigenes Mainmenu: Verschachtelung ?
 
so bin weiter gekommen heute.
hier habe ich meine Lösung gepostet:
http://www.lazarusforum.de/viewtopic.php?p=6218#6218
ist zwar kein richtige OOP hat, aber wie ich finde auch seine vorteile.
(der Letzte Beitrag von Pluto um 18:46) was meint ihr ?

edit1:
ps: nicht von den anderen antworten abschrecken lassen, der ton dort ist normal und ich habe mich auch dran gewöhnt wie ihr an meiner Antwort evlt. merken werdet :evil:
im Grunde sie sie dort auch nett nur nicht bei jeder Frage....


Alle Zeitangaben in WEZ +1. Es ist jetzt 05:21 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