Einzelnen Beitrag anzeigen

Blackheart

Registriert seit: 4. Mai 2005
846 Beiträge
 
Delphi 7 Enterprise
 
#6

Re: MainMenu - Doppelte Einträge verhindern

  Alt 5. Jan 2007, 13:37
Hallo Leute
Bin immer noch am werkeln.
Das mit der StringList klappt mittlerweile, nur mit den
Menu Einträgen krieg Ich nicht gebacken.
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.

Delphi-Quellcode:
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
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;
  SL:TStringList;
  Ini: TIniFile;
implementation

{$R *.dfm}

Procedure DoubleItems; //Doppelte Items aus SL entfernen
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);
        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),'')); //Gespeicherte Einträge laden
  Memo1.Text:=SL.Text; //Probe
  for j := 0 to SL.Count-1 do //Entsprechende MainMenu Einträge erzeugen
  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'); //Einträge speichern
  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 //Auf 10 Einträge begrenzen (3 Feste)
  begin
  SL.Text:=Trim(SL.Text); //leere Zeilen entfernen
  SL.Add(OpenDialog1.FileName); //Einträge hinzufügen
  DoubleItems; //Doppelte entfernen
  NewItem := TMenuItem.Create(Self);
  NewItem.Caption := Sl.Strings[SL.Count-1];
  Datei.Add(NewItem);
  NewItem.OnClick:=DynamikMenuItemClick;//Menueinträge erzeugen
  end
  else //Falls mehr als 10 Einträge
begin
  SL.Add(OpenDialog1.FileName);
  DoubleItems; //Doppelte entfernen
  NewItem := TMenuItem.Create(Self);
  NewItem.Caption := Sl.Strings[SL.Count-1];
  Datei.Add(NewItem);
  NewItem.OnClick:=DynamikMenuItemClick;
  Datei.Delete(4); //Ersten Eintrag im MainMenu löschen
  SL.Delete(0); //Ersten Eintrag im SL löschen
end;
  Memo1.Text:=SL.Text; //Probe
  Caption:=Inttostr(Datei.Count); //Probe
end;
end.
Angehängte Dateien
Dateityp: zip prog_536.zip (5,8 KB, 7x aufgerufen)
Blackheart
  Mit Zitat antworten Zitat