Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Hilfe zu den RecentItems der RibbonControls (https://www.delphipraxis.net/182946-hilfe-zu-den-recentitems-der-ribboncontrols.html)

madtom 28. Nov 2014 11:35


Hilfe zu den RecentItems der RibbonControls
 
Hallo,

Hat jemand Erfahrungen mit den RecentItems der TRibbonApplicationMenuBar?
Wie man Einträge hinzufügt, habe ich ja schon herausbekommen, z.B. mit

Delphi-Quellcode:
Ribbon1.AddRecentItem(FileName);


, nun möchte ich aber gerne die Liste bei Programmstart laden und bei Programmende speichern. Google war bis jetzt nicht hilfreich.

Danke im Voraus

Thomas

himitsu 28. Nov 2014 13:57

AW: Hilfe zu den RecentItems der RibbonControls
 
Delphi-Quellcode:
Ribbon1.RecentItems.Items[i]
und
Delphi-Quellcode:
Ribbon1.RecentItems.Count
?

Schon erstaunlich, was ein Strg+Linksklick alles hervorbringt. (notfalls geht auch ein Blick in Hilfe)

madtom 28. Nov 2014 21:19

AW: Hilfe zu den RecentItems der RibbonControls
 
Danke Dir. Bin inzwischen schon etwas weiter gekommen. Sobald ich mit der Lösung zufrieden bin, poste ich sie hier.

Gruß Thomas

Daniela.S 29. Nov 2014 09:16

AW: Hilfe zu den RecentItems der RibbonControls
 
Als RecentItem wird ein TOptionItem Objekt verwendet.
Du kannst als Caption entweder den Dateiname angeben bzw. einen alternativen Namen und den Dateinamen im Hint.


Laden zum Beispiel:
Delphi-Quellcode:
var
  i: Integer;
begin
  i := Ribbon.AddRecentItem( iFileName );
  if i >= 0 then with Ribbon.ApplicationMenu.Menu.RecentItems[i] do begin
    Hint := iFileName;
    // verwende ich gerne, weil dann der Dateiname angepasst dargestellt wird
    Caption := MinimizeName( iFileName, Self.Canvas, 250 ); // oder ExtractFileName(xxx)
    end;

Speichern über eine StringList:
Delphi-Quellcode:
   
var
  sl      : TStringList;
begin
  sl := TStringList.Create;
  try
    for i := 0 to Ribbon.ApplicationMenu.Menu.RecentItems.Count - 1 do
      sl.Add( Ribbon.ApplicationMenu.Menu.RecentItems.Items[i].Hint );
    sl.SaveTofile(...);
  finally
    sl.Free;
    end;

madtom 29. Nov 2014 10:09

AW: Hilfe zu den RecentItems der RibbonControls
 
Danke Daniela,
soweit war ich inzwischen schon :-D. Im Moment bin ich am knobeln, wie ich diesen dynamisch erzeugten Items das "OnRecentItemClick-Ereignis" verpasse :gruebel:.
Ist mein erstes Projekt mit den Ribbon-Controls, und als Hobby-Programmierer hat man's eh schwer :cry:.

Gruß Thomas

Daniela.S 29. Nov 2014 18:03

AW: Hilfe zu den RecentItems der RibbonControls
 
Über den Eventhändler der Ribbon Komponente sollte das eigentlich automatisch gehen...

Delphi-Quellcode:
Ribbon.AddRecentItem( FileName );
...
RibbonRecentItemClick(Sender: TObject; FileName: string; Index: Integer);

madtom 3. Dez 2014 16:23

AW: Hilfe zu den RecentItems der RibbonControls
 
So, ich bin jetzt mit meiner Lösung vorläufig zufrieden, aber vielleicht hagelt es ja Kritik oder Verbesserungsvorschläge :-D.
Vielen Dank für die Denkanstöße.

Delphi-Quellcode:
const
  MaxRecentItems = 5; // maximale Anzahl der Recent Items in der Liste

procedure TFrmMain.FormCreate(Sender: TObject);
var
  IniFile: TMemIniFile;
  StringList: TStringList;
  i: Integer;
begin
  ...
  IniFile := TMemIniFile.Create('.\Settings.ini');
  try
    ...
    // RecentItems
    StringList := TStringList.Create;
    try
      IniFile.ReadSectionValues('RecentItems', StringList);
      for i := 0 to StringList.Count - 1 do
        Ribbon1.AddRecentItem(IniFile.ReadString('RecentItems', IntToStr(i), ''))
    finally
      StringList.Free;
    end;
  finally
    IniFile.UpdateFile;
    IniFile.Free;
  end;
end;

procedure TFrmMain.FormClose(Sender: TObject; var Action: TCloseAction);
var
  IniFile: TMemIniFile;
  RecentItemsCount: Integer;
  i: Integer;
begin
  IniFile := TMemIniFile.Create('.\Settings.ini');
  try
    with IniFile do
    begin
      ...
      // RecentItems
      if RibbonApplicationMenuBar1.RecentItems.Count > MaxRecentItems then
        RecentItemsCount := MaxRecentItems
      else
        RecentItemsCount := RibbonApplicationMenuBar1.RecentItems.Count;
      IniFile.EraseSection('RecentItems');
      for i := 0 to RecentItemsCount - 1 do
        IniFile.WriteString('RecentItems', IntToStr(i),
          RibbonApplicationMenuBar1.RecentItems.Items[i].Caption);
    end;
  finally
    IniFile.UpdateFile;
    IniFile.Free;
  end;
end;


Alle Zeitangaben in WEZ +1. Es ist jetzt 22:29 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