Показать сообщение отдельно
  #9  
Старый 28.01.2011, 03:49
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,096
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

Код:
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;

Как-то так. Возможно, придется при выборе пункта делать все перемещения руками, но это детали - надо проверить, хотя должно работать и так.
Создание буферного списка опущено.
Ответить с цитированием