Avatar billede stone Forsker
26. november 1999 - 23:14 Der er 9 kommentarer og
1 løsning

recent open file

hvordan laver man en "Recent Open File" i Mainmenu.?
der behøver ikke at være mere en 5, der er nummereret 1-5.

jeg har delphi 5.0 standard.

Avatar billede snorga Nybegynder
27. november 1999 - 02:33 #1
Du skal selv lave en intern liste som du kan gemme i f.eks en .ini fil.

I menuen laver du 5 menupunkter. Kald dem (deres navn ikke caption) Recent1 recent2 .. recent5

Når programmet starter op skal det læse .ini filen op. Sætte recent1-5's caption ELLER sætte deres visible=false hvis der ikke er nogle recent files eller hvis der kun er f.eks 3.

Når man så lukker en fil i programmet skal den fil ligges øverst i den interne liste. (som selvfølge skal gemmes) Menu punkterne skal også opdates.

Det skulle være teorien bag det.
Avatar billede lrj Nybegynder
27. november 1999 - 19:38 #2
snorga> Well put :)
Avatar billede snorga Nybegynder
27. november 1999 - 22:23 #3
lrj> Tak
Avatar billede delphi Nybegynder
29. november 1999 - 08:11 #4
Stort set den måde jeg ville gøre det på, men jeg ville dog nok anbefale at man bruger registrerings databasen til at gemme fil navnene i.  Evt. kan man vælge at læse/skrive i den liste, som Windows og/eller office programmerne benytter.

NiP/Delphi
Avatar billede stone Forsker
29. november 1999 - 11:43 #5
hvad med et eksempel?
Avatar billede delphi Nybegynder
29. november 1999 - 11:45 #6
På hvad?
Registrerings database access eller på hele dynen?
Til 15 point?

NiP
Avatar billede stone Forsker
29. november 1999 - 13:17 #7
delphi!!

det er ikke for at være nærig
men jeg har kun få point for øjeblikket.
hvad mener du med "læse/skrive i den liste osv." hvad for en liste?
Avatar billede delphi Nybegynder
29. november 1999 - 13:31 #8
Jeg mener det sted i registrerings databasen hvor fx. WordPad gemmer info om de sidst benyttede filer.  Wordpad gør det på:
\HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Applets\WordPad\Recent File List.

At brugde denne position giver selvsagt kun mening, hvis det er de pågældende filer du skal ha' fat i, fx. hvis du er ved at lave en text editor.

Hvis det er dine 'egne' filer du skal bruge, så laver du bare din egen registry key.  Jeg banker lige et hurtigt eksempel sammen - to sek.

NiP/Delphi
Avatar billede delphi Nybegynder
29. november 1999 - 13:50 #9
Ok her følge lige koden til et lille test program:

Kode til Unit1.Pas:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  Menus, StdCtrls;

type
  TForm1 = class(TForm)
    MainMenu1: TMainMenu;
    File1: TMenuItem;
    n1: TMenuItem;
    miRecent1: TMenuItem;
    miRecent2: TMenuItem;
    miRecent3: TMenuItem;
    miRecent4: TMenuItem;
    miRecent5: TMenuItem;
    buClear: TButton;
    buLoad: TButton;
    buDefault: TButton;
    buSave: TButton;
    buQuit: TButton;
    procedure buClearClick(Sender: TObject);
    procedure buLoadClick(Sender: TObject);
    procedure buDefaultClick(Sender: TObject);
    procedure buSaveClick(Sender: TObject);
    procedure buQuitClick(Sender: TObject);
  private
    { Private declarations }
    fRecent : Array[1..5] Of String;
    Procedure LoadRecentFiles;
    Procedure SaveRecentFiles;
    Procedure UpdateRecentMenuItems;
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.DFM}
{ TForm1 }

Uses
  Registry;

Const
  RootKey    = HKey_CURRENT_USER;
  RegistryKey = '\Software\FirmaNavn\SoftwareNavn\';

Procedure TForm1.LoadRecentFiles;
Var
  Reg  : TRegIniFile;
  Index : Integer;
Begin
  Reg:=TRegIniFile.Create;
  Try
    Reg.RootKey := RootKey;
    If Reg.OpenKey(RegistryKey, False) Then
      For Index := 1 to 5 Do
        fRecent[Index] :=
          Reg.ReadString('RecentFiles', 'Recent'+IntToStr(Index), '');
  Finally
    Reg.Free;
  End;
end;

procedure TForm1.SaveRecentFiles;
var
  Reg  : TRegIniFile;
  Index : Integer;
begin
  Reg:=TRegIniFile.Create;
  Try
    Reg.RootKey := RootKey;
    If Reg.OpenKey(RegistryKey, True) Then
      For Index := 1 to 5 Do
        Reg.WriteString('RecentFiles', 'Recent'+IntToStr(Index), fRecent[Index]);
  Finally
    Reg.Free;
  End;
end;

procedure TForm1.UpdateRecentMenuItems;
Var
  Index        : Integer;
  TempMenuItem : TMenuItem;
begin
  For Index := 1 to 5 Do
    Begin
      Case Index Of
        1 : TempMenuItem := miRecent1;
        2 : TempMenuItem := miRecent2;
        3 : TempMenuItem := miRecent3;
        4 : TempMenuItem := miRecent4;
        5 : TempMenuItem := miRecent5;
      End;

      If fRecent[Index]<>'' Then
        Begin
          TempMenuItem.Caption := '&'+IntToStr(Index)+' '+fRecent[Index];
          TempMenuItem.Visible := True;
        End
      Else
        TempMenuItem.Visible := False;
    End;
end;

procedure TForm1.buClearClick(Sender: TObject);
begin
  fRecent[1] := '';
  fRecent[2] := '';
  fRecent[3] := '';
  fRecent[4] := '';
  fRecent[5] := '';
  UpdateRecentMenuItems;
end;

procedure TForm1.buLoadClick(Sender: TObject);
begin
  LoadRecentFiles;
  UpdateRecentMenuItems;
end;

procedure TForm1.buDefaultClick(Sender: TObject);
begin
  fRecent[1] := 'File no 1';
  fRecent[2] := 'File no 2';
  fRecent[3] := 'File no 3';
  fRecent[4] := 'File no 4';
  fRecent[5] := 'File no 5';
  UpdateRecentMenuItems;
end;

procedure TForm1.buSaveClick(Sender: TObject);
begin
  SaveRecentFiles;
end;

procedure TForm1.buQuitClick(Sender: TObject);
begin
  Close;
end;

end.


Kode til Unit1.dfm:
object Form1: TForm1
  Left = 283
  Top = 107
  Width = 130
  Height = 271
  Caption = 'Form1'
  Color = clBtnFace
  Font.Charset = DEFAULT_CHARSET
  Font.Color = clWindowText
  Font.Height = -11
  Font.Name = 'MS Sans Serif'
  Font.Style = []
  Menu = MainMenu1
  OldCreateOrder = False
  PixelsPerInch = 96
  TextHeight = 13
  object buClear: TButton
    Left = 24
    Top = 16
    Width = 75
    Height = 25
    Caption = 'Clear Menu'
    TabOrder = 0
    OnClick = buClearClick
  end
  object buLoad: TButton
    Left = 24
    Top = 56
    Width = 75
    Height = 25
    Caption = 'Load'
    TabOrder = 1
    OnClick = buLoadClick
  end
  object buDefault: TButton
    Left = 24
    Top = 96
    Width = 75
    Height = 25
    Caption = 'Defaults'
    TabOrder = 2
    OnClick = buDefaultClick
  end
  object buSave: TButton
    Left = 24
    Top = 136
    Width = 75
    Height = 25
    Caption = 'Save'
    TabOrder = 3
    OnClick = buSaveClick
  end
  object buQuit: TButton
    Left = 24
    Top = 176
    Width = 75
    Height = 25
    Caption = 'Quit'
    TabOrder = 4
    OnClick = buQuitClick
  end
  object MainMenu1: TMainMenu
    object File1: TMenuItem
      Caption = '&File'
      object n1: TMenuItem
        Caption = '-'
      end
      object miRecent1: TMenuItem
        Caption = '&1 Recent One'
        Visible = False
      end
      object miRecent2: TMenuItem
        Caption = '&2 Recent Two'
      end
      object miRecent3: TMenuItem
        Caption = '&3 Recent Three'
        Visible = False
      end
      object miRecent4: TMenuItem
        Caption = '&4 Recent Four'
        Visible = False
      end
      object miRecent5: TMenuItem
        Caption = '&5 Recent Five'
        Visible = False
      end
    end
  end
end

Det er det rene klyt kode - men værsgo'

NiP/Delphi
Avatar billede delphi Nybegynder
29. november 1999 - 13:52 #10
Jeg bemærker lige det sædvanlige problem:  Hvis man et eller andet sted skriver 2 stk. '-chars, så viser stedet her kun et enkelt.

NiP
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester