| Autor |
Beitrag |
Blackheart666
      
Beiträge: 2195
XP
D3Prof, D6Pers.
|
Verfasst: Fr 05.01.07 17:19
Hallo Leute
Ich erstelle Menu Einträge zur Laufzeit und möchte doppelte Löschen.
Mit der Stringlist klappt das ohne Probleme, aber leider nicht mit den Menu Einträgen.
Ich stell mal den Quelltext rein und packe das Prog als Anhang.
Vieleicht guckt sich's mal einer an, und könnte Mir vieleicht noch Tips geben wie man
das lösen kann oder eventuell auch anders angeht.
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: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46: 47: 48: 49: 50: 51: 52: 53: 54: 55: 56: 57: 58: 59: 60: 61: 62: 63: 64: 65: 66: 67: 68: 69: 70: 71: 72: 73: 74: 75: 76: 77: 78: 79: 80: 81: 82: 83: 84: 85: 86: 87: 88: 89: 90: 91: 92: 93: 94: 95: 96: 97: 98: 99:
| var Form1: TForm1; SL:TStringList; Ini: TIniFile; NewItem:TMenuItem; implementation
{$R *.dfm}
Procedure TForm1.DoubleItems; var i,j:Integer; begin i := 0; while i <= SL.Count-1 do begin for j := i+1 to SL.Count-1 do begin if SL.Strings[i] = SL.Strings[j] then begin dec(i); Label1.Caption:=IntToStr(j); SL.Delete(j); break; end; end; inc(i); end; end;
procedure TForm1.DynamikMenuItemClick(Sender: TObject); begin Caption:=TMenuItem(Sender).Caption; end;
procedure TForm1.FormCreate(Sender: TObject); var Ini: TIniFile; SC,i,j:Integer; NewItem : TMenuItem; begin Sl:=TstringList.Create; Ini := TIniFile.Create(ExtractFilePath(ParamStr(0)) + 'Einstellung.ini'); SC:=Ini.ReadInteger('Count','SC',0); for i:=0 to SC-1 do SL.Add(Ini.ReadString('MM','MainMenu'+IntToStr(i),'')); Memo1.Text:=SL.Text; for j := 0 to SL.Count-1 do begin NewItem := TMenuItem.Create(Self); NewItem.Caption := SL[j]; Datei.Add(NewItem); NewItem.OnClick:=DynamikMenuItemClick; end; end;
procedure TForm1.FormCloseQuery(Sender: TObject; var CanClose: Boolean); var i:Integer; begin Ini := TIniFile.Create(ExtractFilePath(ParamStr(0)) + 'Einstellung.ini'); for i:=0 to SL.Count-1 do begin Ini.WriteString('MM','MainMenu'+IntToStr(i),SL.Strings[i]); Ini.WriteInteger('Count','SC',SL.Count); end; Ini.Free; Sl.Free; end;
procedure TForm1.Button1Click(Sender: TObject); var NewItem: TMenuItem; begin if (OpenDialog1.Execute) and (Datei.Count <13) then begin SL.Text:=Trim(SL.Text); SL.Add(OpenDialog1.FileName); DoubleItems; NewItem := TMenuItem.Create(Self); NewItem.Caption := Sl.Strings[SL.Count-1]; Datei.Add(NewItem); NewItem.OnClick:=DynamikMenuItemClick; end else begin SL.Add(OpenDialog1.FileName); DoubleItems; NewItem := TMenuItem.Create(Self); NewItem.Caption := Sl.Strings[SL.Count-1]; Datei.Add(NewItem); NewItem.OnClick:=DynamikMenuItemClick; Datei.Delete(4); SL.Delete(0); end; Memo1.Text:=SL.Text; Caption:=Inttostr(Datei.Count); end; |
Zuletzt bearbeitet von Blackheart666 am Sa 06.01.07 18:03, insgesamt 1-mal bearbeitet
|
|
Regan
      
Beiträge: 2157
Erhaltene Danke: 72
Java (Eclipse), Python (Sublimetext 3)
|
Verfasst: Fr 05.01.07 18:36
Also ich habe es so gelöst:
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: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46: 47: 48: 49: 50: 51: 52: 53: 54: 55: 56: 57: 58: 59: 60: 61: 62: 63: 64: 65: 66: 67: 68: 69: 70: 71: 72: 73: 74: 75: 76: 77: 78: 79: 80: 81: 82: 83: 84: 85: 86: 87: 88: 89: 90: 91: 92: 93: 94: 95: 96: 97: 98: 99: 100: 101: 102: 103: 104: 105: 106: 107: 108: 109: 110: 111: 112: 113: 114: 115: 116: 117: 118: 119: 120: 121: 122: 123: 124: 125: 126: 127: 128: 129: 130: 131: 132: 133: 134: 135: 136: 137: 138: 139: 140: 141: 142:
| unit Unit1;
interface
uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, Menus, Inifiles;
type TForm1 = class(TForm) MainMenu1: TMainMenu; Datei: TMenuItem; Hallo: TMenuItem; Ballo: TMenuItem; Button1: TButton; Label1: TLabel; N1: TMenuItem; OpenDialog1: TOpenDialog; Memo1: TMemo; procedure Button1Click(Sender: TObject); procedure DynamikMenuItemClick(Sender: TObject); procedure FormCreate(Sender: TObject); procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean);
private
public end;
var Form1: TForm1; SL:TStringList; Ini: TIniFile;
implementation
{$R *.dfm}
function Doppelt(var SL:TStringList;FileName:String):Boolean; var i:Integer; a:String; begin result:=false; For i:=0 to SL.Count-1 do begin if SL.Strings[i]=FileName then begin result:=true; exit; end; end; end;
procedure TForm1.DynamikMenuItemClick(Sender: TObject); begin Caption:=TMenuItem(Sender).Caption; end;
procedure TForm1.FormCreate(Sender: TObject); var Ini: TIniFile; SC,i,j:Integer; NewItem : TMenuItem; begin Sl:=TstringList.Create; Ini := TIniFile.Create(ExtractFilePath(ParamStr(0)) + 'Einstellung.ini'); SC:=Ini.ReadInteger('Count','SC',0); for i:=0 to SC-1 do SL.Add(Ini.ReadString('MM','MainMenu'+IntToStr(i),'')); Memo1.Text:=SL.Text; for j := 0 to SL.Count-1 do begin NewItem := TMenuItem.Create(Self); NewItem.Caption := SL[j]; Datei.Add(NewItem); NewItem.OnClick:=DynamikMenuItemClick; end; end;
procedure TForm1.FormCloseQuery(Sender: TObject; var CanClose: Boolean); var i:Integer; begin Ini := TIniFile.Create(ExtractFilePath(ParamStr(0)) + 'Einstellung.ini'); for i:=0 to SL.Count-1 do begin Ini.WriteString('MM','MainMenu'+IntToStr(i),SL.Strings[i]); Ini.WriteInteger('Count','SC',SL.Count); end; Ini.Free; Sl.Free; end;
procedure TForm1.Button1Click(Sender: TObject); var NewItem: TMenuItem; begin if (OpenDialog1.Execute) and (Datei.Count <13) then begin if Doppelt(SL,OpenDialog1.FileName)=false then begin SL.Text:=Trim(SL.Text); SL.Add(OpenDialog1.FileName); NewItem := TMenuItem.Create(Self); NewItem.Caption := Sl.Strings[SL.Count-1]; Datei.Add(NewItem); NewItem.OnClick:=DynamikMenuItemClick; end else begin sleep(1); end; end else begin if Doppelt(SL,OpenDialog1.FileName)=false then begin SL.Text:=Trim(SL.Text); SL.Add(OpenDialog1.FileName); NewItem := TMenuItem.Create(Self); NewItem.Caption := Sl.Strings[SL.Count-1]; Datei.Add(NewItem); NewItem.OnClick:=DynamikMenuItemClick; Datei.Delete(4); SL.Delete(0); end else begin sleep(1); end; end; Memo1.Text:=SL.Text; Caption:=Inttostr(Datei.Count); end;
end. |
Ich hoffe das ist das, was du wolltest. Ich würde den OpenDialog übrigens noch so kofigurieren, dass die Datei auch existieren muss.
|
|
Blackheart666 
      
Beiträge: 2195
XP
D3Prof, D6Pers.
|
Verfasst: Fr 05.01.07 19:10
Danke Regan das klappt Super, Ich hab da schon drei Tage dran rumgewerkelt.
So ist das als ewiger Hobbyprogrammierer.
Vielen Dank für die Mühe, hier wird man geholfen.
Blackheart666
|
|
Andidreas
      
Beiträge: 114
Windows XP Pro
BDS 2006
|
Verfasst: Fr 05.01.07 19:11
Warum erst eintragen?
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: 26: 27: 28: 29:
| procedure TForm1.Button1Click(Sender: TObject); var NewItem: TMenuItem; begin if (OpenDialog1.Execute) and (Datei.Count <13) then begin SL.Text:=Trim(SL.Text); if SL.IndexOf(OpenDialog1.FileName) = -1 then SL.Add(OpenDialog1.FileName); NewItem := TMenuItem.Create(Self); NewItem.Caption := Sl.Strings[SL.Count-1]; Datei.Add(NewItem); NewItem.OnClick:=DynamikMenuItemClick; end else begin SL.Add(OpenDialog1.FileName); NewItem := TMenuItem.Create(Self); NewItem.Caption := Sl.Strings[SL.Count-1]; Datei.Add(NewItem); NewItem.OnClick:=DynamikMenuItemClick; Datei.Delete(4); SL.Delete(0); end; Memo1.Text:=SL.Text; Caption:=Inttostr(Datei.Count); end; |
|
|
Blackheart666 
      
Beiträge: 2195
XP
D3Prof, D6Pers.
|
Verfasst: Fr 05.01.07 19:34
Andidreas hat folgendes geschrieben: | Warum erst eintragen?
|
Wie meinst Du das jetzt.
Edit: Sorry hatte nicht gleich drauf geachtet, habs mal ausprobiert wenn beim laden schon dateien im Menu sind schreibt er sie auch doppelt.
Aber trotzdem dank für deine Mühe.
Blackheart666
Zuletzt bearbeitet von Blackheart666 am Fr 05.01.07 19:59, insgesamt 1-mal bearbeitet
|
|
Andidreas
      
Beiträge: 114
Windows XP Pro
BDS 2006
|
Verfasst: Fr 05.01.07 19:42
Ich hoffe Du hast Dir das Stück Code angesehen. Der ausgewählte Eintrag, wird so nur dann übernommen, wenn er noch nicht vorhanden ist. Siehe Zeile 8. Spart etliche Zeilen Code.
|
|
|