Entwickler-Ecke

Grafische Benutzeroberflächen (VCL & FireMonkey) - Tmainmenu im Submenu alle Einträge löschen?


webmaker - Mi 04.09.02 16:13
Titel: Tmainmenu im Submenu alle Einträge löschen?
Hallo
ich füge jedesmal wenn ein Submenu aufgeht (zur Laufzeit) Items hinzu, die alten wollte ich eigentlich mit Clear ganz einfach löschen. Doch dann lassen sich keine neuen hinzufügen, warum??? Oder wie kann ich sonst einfach alle Items löschen ??


webmaker - Do 05.09.02 20:09

Weiß denn keiner weiß??? Habe ich mich vielleicht nicht verständlich genug ausgedrückt??


Tino - Do 05.09.02 21:27

Poste doch mal die Codeabschnitte welche die Items löschen und der Teil der die Items hinzufügt!

Gruß
TINO


Christian S. - Do 05.09.02 21:27

Hi!

Mit dieser Funktion fügst Du Items, deren Benennung du aus einer ListBox ausliest (ListBox1) in ein Untermenü (men1) ein. Vorher löschst Du die alten:


Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
procedure TForm1.Button1Click(Sender: TObject);
VAR i : INTEGER;
    eintrag : ARRAY OF TMenuItem;
begin
  SetLength(eintrag,ListBox1.Items.Count);
  for i:=0 to High(eintrag) do
  begin
    eintrag[i]:=TMenuItem.Create(MainMenu1);
    eintrag[i].Caption := ListBox1.Items[i];
  end;

  while Men1.Count>=1 do
  Men1.Remove(Men1.Items[0]);

  for i:=0 to high(eintrag) do
  men1.Add(eintrag[i]);
end;


Ich hoffe, es hilft Dir,
MfG,
Peter

P.S.: Gerade fällt mir auf, dass Du Dir das Array auch sparen kannst, wenn Du erst löschst und dann Create und Add in einer Schleife machst!


webmaker - Fr 06.09.02 19:54

Also hier mein Quelcode: ich lade aus einer Ini mehere Schlüsselnamen in eine TStringliste. Daraus erzeuge ich dann die MenüItems. Ich wollte eigentlich alle Items mit Clear löscehn nur, lässt sich dann kein Item mehr hinzufügen.


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:
26:
procedure TEditForm.eigeneBefehle2Click(Sender: TObject);
var
  Ini: TIniFile;
  NeuesMenuItem : TMenuItem;
  i, int : Integer;
begin
   stringliste2 := tStringList.Create;
  try
    Ini:=TIniFile.Create(ExtractFilePath(ParamSTr(0))+'daten/config/befehle.dat');
    Ini.ReadSection('befehle', stringliste2);

 //   eigeneBefehle2.Clear;

    for i:=0 to stringliste2.Count -1 do
     begin
     NeuesMenuItem := TMenuItem.Create(Self);
     NeuesMenuItem.Caption := stringliste2[i];
     NeuesMenuItem.Hint := stringliste2[i];
     NeuesMenuItem.OnClick := unsicht2Click;
    eigeneBefehle2.Add(NeuesMenuItem);
    end;
  finally
    Ini.Free;
  end;

end;


Den Quellcode von Peter Lustig versteh ich nicht ganz. Was soll men1 sein??
Also ich brauche nur eine Möglichkeit um alle Items zu löschen


Christian S. - Fr 06.09.02 20:57

webmaker hat folgendes geschrieben:
Was soll men1 sein??


Wie ich hier:
Peter Lustig hat folgendes geschrieben:
ein Untermenü (men1) ein.

geschrieben habe, ist men1 das Untermenü, welches die zu löschenden Items enthält.

Um diese Items zu löschen brauchst du diesen Quelltext:


Quelltext
1:
2:
while Men1.Count>=1 do 
  Men1.Remove(Men1.Items[0]);


MfG,
Peter


webmaker - So 08.09.02 12:59

mit diesem Code scheint er sie zwar zu löschen, aber er fügt keine neuen Items mehr hinzu. Wieso??


Christian S. - So 08.09.02 20:06

Hi!

Der Quelltext, den ich zuerst gepostet habe, funktioniert und auch mit der Ergänzung, die ich unten drunter geschrieben habe (inzwischen getestet). Hast Du mal versucht, die while-Schleife aus meinem letzten Posting an die Stelle Deines Clear-Befehls zu setzen?

MfG,
Peter


webmaker - Mo 09.09.02 20:17

jep,funzt dann immer noch nicht. Ich muss mich Morgen noch mal damit beschäftigen


Christian S. - Mo 09.09.02 21:28

Hi!

webmaker hat folgendes geschrieben:
Ini:=TIniFile.Create(ExtractFilePath(ParamSTr(0))+'daten/config/befehle.dat');


Sollten die "/" nicht eigentlich "\" sein? Vielleicht liegt es ja da dran, aber ich schätze mal, dann hättest Du ja eine Fehlermeldung bekommen. Andererseits ist es das einzige, was unsere beiden Quelltexte noch sonderlich unterscheidet.

MfG,
Peter


webmaker - Di 10.09.02 17:48

Ich habe das jetzt so gemacht:

Quelltext
1:
2:
3:
4:
while eigeneBefehle2.Count > 0 do 
   begin 
     eigeneBefehle2.Items[eigeneBefehle2.Count-1].Free; 
   end;


Christian S. - Di 10.09.02 18:54

Hi!

Gut, wenn es so funktioniert, trotzdem würde es mich interessieren, warum mein Quelltext bei mir funktionierte und bei Dir nicht. Die Welt ist groß und geheimnisvoll!!!:nixweiss:

MfG,
Peter