Autor Beitrag
Bronstein
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 578
Erhaltene Danke: 1

WIN XP
Delphi 6 / Delphi 2006 / Delphi XE
BeitragVerfasst: Fr 09.03.07 19:05 
Wie würdet ihr so ein Menü aufbauen, damit man alles in einer ini-Datei einstellen kann:

Link1
Link1.1
Link1.1.1
Link1.1.2
Link1.2
Link1.2.1
Link1.2.2
Link1.2.3
Link2
...


Weiß einfach niccht wie ich das lösen könnte.
Wie man Labels zu Laufzeit erstellt weiß ich ja.

_________________
Es gibt keine dummen Fragen nur dumme Antworten!!!
jakobwenzel
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 1889
Erhaltene Danke: 1

XP home, ubuntu
BDS 2006 Prof
BeitragVerfasst: Fr 09.03.07 19:07 
Ich würd jeden Eintrag mit ner eindeutigen Nummer versehen und immer noch die Nummer des übergeordneten Eintrags (oder eben für Top-Level-Einträge eine in jedem Fall ungültige Nummer) speichern. :wink:

_________________
I thought what I'd do was, I'd pretend I was one of those deaf-mutes.
Christian S.
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 20451
Erhaltene Danke: 2264

Win 10
C# (VS 2019)
BeitragVerfasst: Fr 09.03.07 19:18 
Ich verstehe die Frage nicht ganz. Willst Du ein Menü dynamisch erzeugen? Das geht so:

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
var
  aItem, subItem, subSubItem : TMenuItem;
begin
  aItem := TMenuItem.Create(self);
  aItem.Caption := 'Eintrag 1';
  MainMenu1.Items.Add(aItem);

  subItem := TMenuItem.Create(self);
  subItem.Caption := 'Eintrag 1.1';
  aItem.Add(subItem);

  subSubItem := TMenuItem.Create(self);
  subSubItem.Caption := 'Eintrag 1.1.1';
  subItem.Add(subSubItem);

  subItem := TMenuItem.Create(self);
  subItem.Caption := 'Eintrag 1.2';
  aItem.Add(subItem);

  subItem := TMenuItem.Create(self);
  subItem.Caption := 'Eintrag 1.3';
  aItem.Add(subItem);

_________________
Zwei Worte werden Dir im Leben viele Türen öffnen - "ziehen" und "drücken".
jakobwenzel
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 1889
Erhaltene Danke: 1

XP home, ubuntu
BDS 2006 Prof
BeitragVerfasst: Fr 09.03.07 19:21 
Ich hab das jetz so verstanden, dass er eine Liste mit beliebig tief verschachtelten Unterpunkten hat und diese jetzt in eine INI-Datei abspeichern will.
Dafür eignet sich dann meine Lösung weiter oben. :wink:

_________________
I thought what I'd do was, I'd pretend I was one of those deaf-mutes.
Bronstein Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 578
Erhaltene Danke: 1

WIN XP
Delphi 6 / Delphi 2006 / Delphi XE
BeitragVerfasst: Fr 09.03.07 19:21 
Ich möchte einfach ein flexibles menü erstellen mit einer unbestimmten anzahl an Untermenüs.

Das Menü möchte ich komplett in einer INI-Datei konfigurieren.

Später sollen dann zum entsprechenden Menüeintrag Bilder angezeigt werden

_________________
Es gibt keine dummen Fragen nur dumme Antworten!!!
Bronstein Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 578
Erhaltene Danke: 1

WIN XP
Delphi 6 / Delphi 2006 / Delphi XE
BeitragVerfasst: Fr 09.03.07 19:47 
Ich meine das so wie jakobwenzel geschrieben hat.

Ich dachte mir die INI-Datei könnte so aussehen:

[Link]
Anzahl=2

[Link1]
Name=Menü1
[Link1.1]
Name=Beschriftung1.1
Bild=bild1_1.jpg

Link[1.2]
Name=Beschriftung1.2
Bild=bild1_2.jpg



[Link2]
Name=Menü2
[Link2.1]
Name=Beschriftung2.1
Bild=bild2_1.jpg

Link[2.2]
Name=Beschriftung2.2
Bild=bild2_2.jpg

Link[3.2]
Name=Beschriftung3.2
Bild=bild3_2.jpg



Wie ich das jetzt aber programmtechnisch umsetzen kann weiß ich nicht so recht

_________________
Es gibt keine dummen Fragen nur dumme Antworten!!!
Billi Berserker
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 44



BeitragVerfasst: Fr 09.03.07 19:50 
Ich würde das ganze über XML gestalten und das laden dann mit ensprechenden rekusiven funktionsaufrufen implementieren.

in xml würde das so aussehen:
ausblenden XML-Daten
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
<menu>
  <item>
    <caption>123</caption>
    <icon>c:\1.bmp</icon>
  </item>
  <item>
    <caption>Eintrag mit Untermenü</caption>
    <icon>c:\2.bmp</icon>
    <items>
      <item>
         <caption>123</caption>
         <icon>c:\4.bmp</icon>
      </item>
      <item>
        <caption>123</caption>
        <icon>c:\5.bmp</icon>
      </item>
    </items>
  </item>
  <item>
    <caption>ghj</caption>
    <icon>c:\3.bmp</icon>
  </item>
</menu>
Lannes
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2352
Erhaltene Danke: 4

Win XP, 95, 3.11, IE6
D3 Prof, D4 Standard, D2005 PE, TurboDelphi, Lazarus, D2010
BeitragVerfasst: Fr 09.03.07 19:53 
Hallo,

bau Dir doch die ini so auf:
ausblenden Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
[RootItems]
RootItemsCount = 2
Item1 = Link1
Item2 = Link2

[Link1]
ItemsCount = 2
Item1 = Link1.1
Item2 = Link1.2 

[Link1.1]
ItemsCount = 2
Item1 = Link1.1.1
Item2 = Link1.1.2 
Item1Pfad = d:\hjashk.jpg
Item2Pfad = d:\kpk45.jpg
 
[Link1.2]
ItemsCount = 3
Item1 = Link1.2.1
Item2 = Link1.2.2 
Item3 = Link1.2.3 
Item1Pfad = d:\aaa.jpg
Item2Pfad = d:\xxxx.jpg 
Item3Pfad = d:\yyyy.jpg

Dann kannst Du die ini auslesen und das Menü erzeugen, eventuell auch rekursiv.
Die Section [RootItems] liefert Dir die Bezeichnung der Untermenü-Sectionen.
Also 'Item1 = Link1' = Section [Link1] usw. ...

_________________
MfG Lannes
(Nichts ist nicht Nichts) and ('' <> nil ) and (Pointer('') = nil ) and (@('') <> nil )
Bronstein Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 578
Erhaltene Danke: 1

WIN XP
Delphi 6 / Delphi 2006 / Delphi XE
BeitragVerfasst: Fr 09.03.07 19:58 
@Billi Berserker

Kann ich so eine XML-Datei in mein Delphi-Projekt einbinden, wie funktioniert so was. Habe ich noch nie gehört. Vielleiht kennst du ja ein Tutorial

_________________
Es gibt keine dummen Fragen nur dumme Antworten!!!
Marco D.
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 2750

Windows Vista
Delphi 7, Delphi 2005 PE, PHP 4 + 5 (Notepad++), Java (Eclipse), XML, XML Schema, ABAP, ABAP OO
BeitragVerfasst: Fr 09.03.07 20:00 
user profile iconBronstein hat folgendes geschrieben:
@Billi Berserker

Kann ich so eine XML-Datei in mein Delphi-Projekt einbinden, wie funktioniert so was. Habe ich noch nie gehört. Vielleiht kennst du ja ein Tutorial

Würde dir lieber zu der Ini-Datei raten. ;) Das ist imho einfacher zu implementieren.

_________________
Pascal keeps your hand tied. C gives you enough rope to hang yourself. C++ gives you enough rope to shoot yourself in the foot
Billi Berserker
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 44



BeitragVerfasst: Fr 09.03.07 20:09 
Das ganze über ne .ini Datei zu machen halte ich für selbstmord :)
Einfach nur unübersichtlich und bäää ;)


Für XML gibts es ne menge Komponenten um die Dateien zu laden und zu benutzen.
Ich benutze TJvSimpleXML welche bei JVCL dabei ist.
Keine Ahnung obs dazu tutorials gibt, aber die benutzung is eigentlich recht einfach - wenn man ein wenig damit rum gespielt hat dann gehts irgendwann ;)

Beispiel (ungetestet):
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
var
  XML : TJvSimpleXML;
  n : integer;
  name : String;
  icon : String;
begin
  XML := TJvSimpleXML.Create(nil);
  try
    XML.LoadFromFile('C:\MyMenu.xml');
    for n := 0 to XML.Root.Items.Count - 1 do
        with XML.Root.Items.Item[n].Items do
        begin
          // Die daten für jedes menü item im Hauptmenü
          name := Value('Name');
          icon := Value('Icon');
          if ItemNamed['items'] <> nil then
             with ItemNamed['items'].Items do
             begin
               // es gibt unterpunkte, mach irgendwas damit
             end;         
        end;
  finally
    XML.Free;
  end;
end;

für das laden von den unterpunkten müßte man eine rekursive funktion schreiben welche das Ziel Menü und den übergeordneten Knoten als parameter nimmt...
Bronstein Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 578
Erhaltene Danke: 1

WIN XP
Delphi 6 / Delphi 2006 / Delphi XE
BeitragVerfasst: Fr 09.03.07 22:36 
Habe das jetzt mit einer INI-Datei von Lannes umgesetzt.

Jetzt habe ich aber ein Problem. Wenn ich auf ein Label klicke möchte ich den Namen des Labels bekommen. Leider ist die Msg aber leer.

Habe mal das komplette Projekt im Anhang. Keine Ahnung warumm das nicht geht.
Einloggen, um Attachments anzusehen!
_________________
Es gibt keine dummen Fragen nur dumme Antworten!!!
Christian S.
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 20451
Erhaltene Danke: 2264

Win 10
C# (VS 2019)
BeitragVerfasst: Fr 09.03.07 22:43 
Das ist ein neues, anderes Problem. Bitte erstelle dafür einen neuen Thread.

Sollten noch Nachfragen zu diesem Problem auftauchen, melde den Thread ans Team und wir öffnen ihn wieder.

//edit: Hier geht es weiter

_________________
Zwei Worte werden Dir im Leben viele Türen öffnen - "ziehen" und "drücken".
Dieses Thema ist gesperrt, Du kannst keine Beiträge editieren oder beantworten.

Das Thema wurde von einem Team-Mitglied geschlossen. Wenn du mit der Schließung des Themas nicht einverstanden bist, kontaktiere bitte das Team.