Код:
type
TForm1=class(TForm)
private
FReopen : TStringList;
end;
procedure TForm1.ReopenItemClick(Sender : TObject);
var
AIdx : Integer;
AFileName : String;
begin
AIdx := (Sender As TMenuItem).Tag;
AFileName := = FReopen[AIdx];
OpenFile(AFileName);
end;
procedure TForm1.OpenFile(AFileName : String);
var
I : Integer;
mi : TMenuItem;
begin
// Open document here
...
// Now update menus
If FReopen.IndexOf(AFileName) > 0 Then
FReopen.Delete(FReopen.IndexOf(AFileName));
If FReopen.Count = 0
Then FReopen.Add(AFileName)
Else FReopen.Insert(0,AFileName);
While FReopen.Count > 4 Do FReopen.Delete(FReopen.Count-1);
miReopen.Items.Clear;
For I := 0 To FReopen.Count-1 Do
Begin
mi := TMenuItem.Create(Self);
mi.
mi.Caption := '&' + IntToStr(I) + ' ' + FReopen[i];
mi.Tag := I;
mi.OnClick := ReopenItemClick;
mi.Checked := (I = 0);
miReopen.Add(mi);
End;
end;
Как-то так. Возможно, придется при выборе пункта делать все перемещения руками, но это детали - надо проверить, хотя должно работать и так.
Создание буферного списка опущено.