AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

MainMenu - Doppelte Einträge verhindern

Ein Thema von Blackheart · begonnen am 4. Jan 2007 · letzter Beitrag vom 5. Jan 2007
Antwort Antwort
Blackheart

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

MainMenu - Doppelte Einträge verhindern

  Alt 4. Jan 2007, 20:13
Hallo Leute
Ich erzeuge dynamisch MainMenu Einträge und würde gern
doppelte Einträge gern löschen.
Wie krieg ich nun raus ob ein bestimmter string schon vorhanden ist.
Hab schon im forum indexof gefunden aber irgendwie komm Ich damit nicht zurecht.

Delphi-Quellcode:
NewItem := TMenuItem.Create(Self);
  NewItem.Caption := OpenDialog1.FileName;
  Datei.Add(NewItem);
  NewItem.OnClick:=DynamikMenuItemClick;
  Caption:=Inttostr(datei.Count);
  for i:=0 to Datei.Count-1 do
  begin
   If {MainMenuString} = {String} then
     Datei.Delete(i);
 end;
Blackheart
  Mit Zitat antworten Zitat
Benutzerbild von TonyR
TonyR

Registriert seit: 17. Jun 2006
Ort: Bautzen
503 Beiträge
 
FreePascal / Lazarus
 
#2

Re: MainMenu - Doppelte Einträge verhindern

  Alt 4. Jan 2007, 20:21
Hast du die Frage niocht eigentlich schon gefunden bzw. selbst beantwortet???
Kapier ich jetz nicht...
Es ist unmöglich, witzig zu sein ohne ein bisschen Bosheit. Die Bosheit eines guten Witzes ist der Widerhaken, der ihn haften lässt. - Georg Christoph Lichtenberg
  Mit Zitat antworten Zitat
Benutzerbild von Matze
Matze
(Co-Admin)

Registriert seit: 7. Jul 2003
Ort: Schwabenländle
14.929 Beiträge
 
Turbo Delphi für Win32
 
#3

Re: MainMenu - Doppelte Einträge verhindern

  Alt 4. Jan 2007, 20:25
Nur als Anmerkung: An deiner Stelle würde ich erst gar nicht doppelte Einträge dem MainMenu hinzufügen, das ist sicher performanter als diese einzutragen und anschließend wieder herauszupicken. Die Dateinamen würde ich auch intern verwalten um nicht immer auf die Komponenten zugreifen zu müssen. Das geht beispielsweise mit einer TStringList. Da kannst du auch leicht und schneller die Einträge durchgehen und überprüfen.
  Mit Zitat antworten Zitat
Blackheart

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

Re: MainMenu - Doppelte Einträge verhindern

  Alt 4. Jan 2007, 20:37
Erstmal dank für die Antworten
Das mit der Stringlist wäre natürlich auch noch ne Lösung.
Und ist vieleicht einfacher zu handhaben, aber der Aufwand wird wohl der selbe sein Stringlist erzeugen - Doppelte Strings löschen - MainMenu Einträge erstellen.
Blackheart
  Mit Zitat antworten Zitat
Benutzerbild von TonyR
TonyR

Registriert seit: 17. Jun 2006
Ort: Bautzen
503 Beiträge
 
FreePascal / Lazarus
 
#5

Re: MainMenu - Doppelte Einträge verhindern

  Alt 4. Jan 2007, 20:51
Hat die TStringList nicht ein Property mit dem man keine doppelten Einträge zulässt?

Ahhh... gefunden:
duplicates => das kann man auf duperror setzen und schon gibt es bei .add einen Fehler wenn ein Eintrag schon vorhanden ist








Die Eigenschaft Duplicates legt fest, ob zu einer sortierten Liste String-Duplikate hinzugefügt werden können.

Delphi-Syntax:

property Duplicates: TDuplicates;

C++ Syntax:

__property TDuplicates Duplicates = {read=FDuplicates, write=FDuplicates, nodefault};

Beschreibung

Mit Duplicates können Sie festlegen, welche Aktion ausgeführt werden soll, wenn ein String mehrfach zu einer sortierten Liste hinzugefügt wird. Die Eigenschaft CaseSensitive steuert, ob zwei Strings, die sich nur hinsichtlich der Groß-/Kleinschreibung unterscheiden, als identisch angesehen werden.

Duplicates kann einen der folgenden Werte erhalten:

Wert Bedeutung

dupIgnore Das Einfügen von Duplikaten in die Liste wird ignoriert.
dupError Der Versuch, der sortierten Liste ein String-Duplikat hinzuzufügen, führt zu einer EStringListError-Exception.
dupAccept Duplikate sind in der sortierten Liste zulässig.

Setzen Sie Duplicates, bevor Sie der Liste Strings hinzufügen. Wenn Sie Duplicates auf dupIgnore oder dupError setzen, hat das keine Auswirkungen auf doppelte Strings, die bereits in der Liste enthalten sind.

Hinweis: Duplicates hat keinerlei Auswirkungen, wenn die Liste nicht sortiert ist.
Es ist unmöglich, witzig zu sein ohne ein bisschen Bosheit. Die Bosheit eines guten Witzes ist der Widerhaken, der ihn haften lässt. - Georg Christoph Lichtenberg
  Mit Zitat antworten Zitat
Blackheart

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

Re: MainMenu - Doppelte Einträge verhindern

  Alt 5. Jan 2007, 12: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
shmia

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

Re: MainMenu - Doppelte Einträge verhindern

  Alt 5. Jan 2007, 12:49
Wenn du alle dynamisch angelegte MenuItems parallel in einer TComponentList speicherst,
dann kannst du später alle löschen:
Delphi-Quellcode:
FDynMenuItems : TComponentList;
...

// Löschen
while FDynMenuItems.Count > 0 do
   FDynMenuItems.Items[0].Free;
Andreas
  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 05:25 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