AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Delphi Dynamisches Erstellen eines Menü im Delphi
Thema durchsuchen
Ansicht
Themen-Optionen

Dynamisches Erstellen eines Menü im Delphi

Ein Thema von Atlas-25 · begonnen am 15. Feb 2008 · letzter Beitrag vom 21. Feb 2008
Antwort Antwort
Atlas-25

Registriert seit: 15. Feb 2008
6 Beiträge
 
#1

Dynamisches Erstellen eines Menü im Delphi

  Alt 15. Feb 2008, 15:46
Hallo zusammen, ich bin neu hier und habe folgendes Problem und hoffe, daß mir jemand helfen kann.
ich möchte ein Menü dynamich erstellen und zwar so:
Mein Menü enthält folgende Einträge:

Datei----Inhalte----Hilfe
unter: Inhalte soll stehen z.B.
|--->A1--->B1--->C1 1.Zeile
| |--->B2--->C1 2.Zeile
| |--->C2 3.Zeile
|--->A2--->B3 4.Zeile

usw.

Die Einträge hole ich mir aus einer Liste L1 vom Typ: TStringList
Der Inhalt Liste L1 ist variabel, diese wird jedesmal in einem Schleife mit der Daten gefüllt und sieht so aus:
1.Zeile: L1=(A1,B1,C1)
2.Zeile: L1=(A1,B2,C1)
3.Zeile: L1=(A1,B2,C2)
4.Zeile: L1=(A2,B3)

Wer kann mir da helfen un ein Stück Quellcode schicken.
Ich wäre Dir/Euch sehr denkbar.
  Mit Zitat antworten Zitat
Benutzerbild von Xong
Xong

Registriert seit: 9. Jan 2008
186 Beiträge
 
Delphi 2006 Professional
 
#2

Re: Dynamisches Erstellen eines Menü im Delphi

  Alt 15. Feb 2008, 15:56
(Fertigen) Code bekommst du von mir nicht, aber Tipps:
Entweder du parst den Inhalt der Stringliste neu oder du baust das Menü während der Belegung der Stringlist gleich mit auf.

Wie auch immer, hier ein wenig Pseudocode:
Delphi-Quellcode:
for i:=0 to Zeilenanzahl-1 do begin
  WähleWurzelknotenAus; // In diesem Fall ist das der Menüpunkt "Inhalte"
  for k:=0 to ItemAnzahl do begin // ItemAnzahl ist die Anzahl aller A1 bis Zx
    if Vorhanden(Item[0]) then
      GeheZu(Item[0])
    else
      LegeAn(Item[0]);
  end;
end;
War doch gar nicht so schwer.

LG;
Xong

PS: Willkommen bei DP!
  Mit Zitat antworten Zitat
Atlas-25

Registriert seit: 15. Feb 2008
6 Beiträge
 
#3

Re: Dynamisches Erstellen eines Menü im Delphi

  Alt 15. Feb 2008, 16:18
Vielen dank Xong,
ich habe folgende Code, aber irgendwie haut das nicht hin.
ich bin ja kein Profi.
Delphi-Quellcode:
procedure test1;
var MeinText: String;
      i: integer;
      NewItem: TMenuItem;
begin
  MenuItem1 := MenuHaupt.Items.Find('Inhalte');
  MeinText := 'A1|B1|C1' ;
  L1 := StrSplit(MeinText, ['|']);
  for i:=0 to L1.Count-1 do begin
        NewItem := TMenuItem.Create(Self);
        NewItem.Caption := L1[i];
        MenuItem1.Add(NewItem);
  end;

end;
ich bekomme als Ergebnis:
Inhalte
|--->A1
|--->B1
|--->C1
statt
|--->A1--->B1--->C1

[edit=Christian Seehase]Delphi-Tags korrigiert (Anwendung: [delphi*]code[/delphi*] jeweils ohne *, oder markieren, und dann den Delphi-Code-Button drücken. Mfg, Christian Seehase[/edit]
  Mit Zitat antworten Zitat
shmia

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

Re: Dynamisches Erstellen eines Menü im Delphi

  Alt 15. Feb 2008, 16:55
Delphi-Quellcode:
procedure TForm1.test1;
  var MeinText: String;
  i: integer;
  NewItem, parent: TMenuItem;
begin
  parent := MenuHaupt.Items.Find('Inhalte');
  MeinText := 'A1|B1|C1' ;
  L1 := StrSplit(MeinText, ['|']);
  for i:=0 to L1.Count-1 do
  begin
    NewItem := TMenuItem.Create(Self);
    NewItem.Caption := L1[i];
    parent.Add(NewItem);
    parent := NewItem; // das neue Item wird nun zum aktuelle Eltern-Item
  end;
end;
Andreas
  Mit Zitat antworten Zitat
Benutzerbild von sirius
sirius

Registriert seit: 3. Jan 2007
Ort: Dresden
3.443 Beiträge
 
Delphi 7 Enterprise
 
#5

Re: Dynamisches Erstellen eines Menü im Delphi

  Alt 15. Feb 2008, 17:04
Du musst allerdings noch vor dem Create überprüfen, ob das Item schon existiert.
Zitat:
1.Zeile: L1=(A1,B1,C1)
2.Zeile: L1=(A1,B2,C1)
Dieser Beitrag ist für Jugendliche unter 18 Jahren nicht geeignet.
  Mit Zitat antworten Zitat
Atlas-25

Registriert seit: 15. Feb 2008
6 Beiträge
 
#6

Re: Dynamisches Erstellen eines Menü im Delphi

  Alt 15. Feb 2008, 17:09
Vielen Vielen Dank shmia,

es hat super funktioniert
  Mit Zitat antworten Zitat
Atlas-25

Registriert seit: 15. Feb 2008
6 Beiträge
 
#7

Re: Dynamisches Erstellen eines Menü im Delphi

  Alt 21. Feb 2008, 16:25
Hallo
ich brauche Hilfe wieder,
ich habe folgendes Problem: in einem Hauptformular wird eine Procedure aus einem anderen Unit (Unit_A) aufgerufen.
Diese Procedure sorgt dafür, dass das Menü zur Laufzeit aufgebaut wird.
es funktioniert alless wunderbar. Mein Problem ist, wie kann ich MenüItem ein OnClick Erreignis zuweisen.
Mein Versuch unten scheitert an unten gennanten Fehlermeldungen.

Wer kann mir helfen?
Formatierter Delphi-Quellcode:
Delphi-Quellcode:
Hauptformular:
unit HauptFormular;
interface
uses Unit_A, .....;
....

procedure TfrmMain.FormCreate(Sender: TObject);
begin
   //hier wird die Prcedure MenuAufbau() aufgerufen
   //diese Prcedure ist im Unit A im gleichen Project implementiert
end;

//Unit_A
Unit_A

prcedure MenuAufbau();
begin
  //hier wir das Menü dynamisch aufgebaut
  // ich möchte hier jedem Menüeintrag ein Ereignis zuweisen
  
  MeinItem.Onclick := MeineProcedure;
end;

procedure MeineProcedure(Sender: TObject);
begin
    showmessage( TMenuItem(Sender).Name);
end;
[Fehler] Unit_A.pas(218): Inkompatible Typen: 'Methodenzeiger und reguläre Prozedur'
[Fehler] Unit_A.pas(224): Bei der vorherigen Deklaration von test wurde die Direktive 'overload' nicht angegeben
[Fehler] Unit_A.pas(61): Ungenügende Forward- oder External-Deklaration: 'MeineProcedure'
[Fataler Fehler] Hauptformular.pas(14): Verwendete Unit 'Unit_A.pas' kann nicht compiliert werden
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.625 Beiträge
 
Delphi 12 Athens
 
#8

Re: Dynamisches Erstellen eines Menü im Delphi

  Alt 21. Feb 2008, 16:32
Delphi-Quellcode:
type
  THauptformular = class(TForm)
  ...
  procedure MeineProcedure(Sender: TObject);
  ...
end;

...

implementation

...

procedure THauptformular.MeineProcedure(Sender: TObject);
begin
  //Code
end;
Du brauchst eine Methode, eine einfache Funktion reicht nicht.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Atlas-25

Registriert seit: 15. Feb 2008
6 Beiträge
 
#9

Re: Dynamisches Erstellen eines Menü im Delphi

  Alt 21. Feb 2008, 17:17
Hallo DeddyH, Vielen Dank für die schnelle Antwort,
ich hebe trotzdem heute ein Brett vom Kopf
kannst du mir bitte korrigieren

im Hauptformular habe ich folgendes stehen:
Formatierter Delphi-Quellcode:
Delphi-Quellcode:
unit HauptFormular;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, ComCtrls, ExtCtrls, Menus, Printers, JvExExtCtrls, JvExtComponent,
  JvPanel, StdCtrls, Buttons,
  Unit_A; //mein Unit

type
   TfrmMain = class(TForm)
    ....
  private
    
  end;

var
  frmMain: TfrmMain;
  MenuItem1: TMenuItem;
......

implementation

uses
...
procedure TfrmMain.FormCreate(Sender: TObject);
begin
   //hier wird die Prcedure MenuAufbau() aufgerufen
   //diese Prcedure ist im Unit A im gleichen Project implementiert
end;
end.
im Unit_A steht folgendes:
Formatierter Delphi-Quellcode:
Delphi-Quellcode:
prcedure MenuAufbau();
begin
  //hier wir das Menü dynamisch aufgebaut
  // ich möchte hier jedem Menüeintrag ein Ereignis zuweisen
  
  MeinItem.Onclick := MeineProcedure;
end;

procedure MeineProcedure(Sender: TObject);
begin
    showmessage( TMenuItem(Sender).Name);
end;
Zitat:
Formatierter Delphi-Quellcode:
Delphi-Quellcode:
type
  THauptformular = class(TForm)
  ...
  procedure MeineProcedure(Sender: TObject);
  ...
end;

...

implementation

...

procedure THauptformular.MeineProcedure(Sender: TObject);
begin
  //Code
end;

[quote="DeddyH"]
Delphi-Quellcode:
type
  THauptformular = class(TForm)
  ...
  procedure MeineProcedure(Sender: TObject);
  ...
end;

...

implementation

...

procedure THauptformular.MeineProcedure(Sender: TObject);
begin
  //Code
end;
soll das im Unit_A? oder wohin

Danke
  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 22:57 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