![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
#1
|
|||
|
|||
|
Как выполнить следующее?
Команда Open открывает диалоговое окно открытия файла и, в случае выбора файла, добавляет его в подменю Reopen в качестве нулевого пункта и помечает этот пункт. При добавлении нового имени весь список имён смещается вниз. В обработчике события OnClick пункта меню Open должно быть реализовано следующее: Открывается диалоговое окно открытия файла. Если пользователь выбрал файл для открытия, то выполняется следующее: Для пункта Reopen (максимальный размер которого ограничен 4 пунктами) необходимо: - Установить доступность. - Выполнить смещение в имеющемся списке имен файлов на одну позицию вниз с сохранением свойства Visible от предыдущего элемента. При смещении списка изменяется нумерация в названии пунктов меню. Для изменения этой нумерации используйте процедуру Delete из модуля System. - В качестве нулевой строки вложенного меню установить подчеркнутую цифру 0, а за ней полное имя файла, полученное из диалогового окна. Свойство Visible этой строки установить равным True. - Убрать старую пометку в списке имен файлов и установить пометку в нулевой строке. Сделал вот так. Дальше не идёт... Код:
procedure TForm1.Open1Click(Sender: TObject); begin OpenDialog1.Execute; Save1.Enabled := True; SaveAs1.Enabled := True; Close1.Enabled := True; Reopen1.Enabled := True; Reopen1.Items[0].Visible:= True; Reopen1.Items[0].Caption:= OpenDialog1.FileName; Reopen1.Items[0].Checked:= True; end; |
|
#2
|
||||
|
||||
|
Вот примерно так, но код не проверял, писал на коленке:
Код:
procedure TForm1.Open1Click(Sender: TObject);
Var i: Integer;
begin
if not OpenDialog1.Execute then Exit;
Save1.Enabled := True;
SaveAs1.Enabled := True;
Close1.Enabled := True;
Reopen1.Enabled := True;
Reopen1.Items[0].Caption := '0:' + OpenDialog1.FileName;
for i := 3 downto 1
do begin
if Reopen1.Items[i-1].Caption = '' then Continue;
Reopen1.Items[i].Caption := Reopen1.Items[i-1].Caption;
Delete(Reopen1.Items[i].Caption,1,1);
Reopen1.Items[i].Caption := IntToStr(i) + Reopen1.Items[i].Caption;
end;
end; |
|
#3
|
||||
|
||||
|
Неплохой пример, однако!
А к чему пишешь? Видно, что пишешь оснавательно. Любопытно! |
|
#4
|
|||
|
|||
|
Изначально поля Reopen1.Items[i].Caption не пустые, а вида '&0 Name0', '&1 Name1', '&2 Name2', '&3 Name3
пытаюсь сделать так, не выходит Код:
procedure TForm1.Open1Click(Sender: TObject);
Var i: Integer;
s: String;
begin
if not OpenDialog1.Execute then Exit;
Save1.Enabled := True;
SaveAs1.Enabled := True;
Close1.Enabled := True;
Reopen1.Enabled := True;
for i := 3 downto 1
do begin
if not Reopen1.Items[i-1].Caption in ['&0 Name0', '&1 Name1', '&2 Name2', '&3 Name3']
then Continue;
Reopen1.Items[i].Caption := Reopen1.Items[i-1].Caption;
s := Reopen1.Items[i].Caption;
Delete(s,2,1);
Reopen1.Items[i].Caption := IntToStr(i) + s;
Reopen1.Items[i].Visible:= True;
end;
Reopen1.Items[0].Caption := '&0' + OpenDialog1.FileName;
Reopen1.Items[0].Visible:= True;
Reopen1.Items[0].Checked:= True;
if OpenDialog1.FileName<>'' then Self.Caption := 'Form1' + ' ' +
ExtractFileName(OpenDialog1.FileName)
else Self.Caption := 'Form1';
end;Цитата:
|
|
#5
|
||||
|
||||
|
Нельзя строки в множестве использовать
|
|
#6
|
|||
|
|||
|
А можно ещё как-то проверить?
|
|
#7
|
|||
|
|||
|
Цитата:
Можно хранить список где-то в памяти и из пунктов меню просто ссылаться на этот список (кстати. из пунктов списка так-же можно ссылаться на соотв. пункты меню). тогда тебе не надо будет мучаться с меню, а просто работать со списком строк. А все меню reopen можно просто пересоздавать полностью (некрасиво, но более надежно). |
|
#8
|
|||
|
|||
|
Не получается создать нормальную нумерацию в подменю.
Пока что удалил свойства Caption из Reopen1.Items[i].Caption Получилось вот что Код:
procedure TForm1.Open1Click(Sender: TObject);
Var i: Integer;
s: String;
begin
if not OpenDialog1.Execute then Exit;
Save1.Enabled := True;
SaveAs1.Enabled := True;
Close1.Enabled := True;
Reopen1.Enabled := True;
for i := 3 downto 1
do begin
if Reopen1.Items[i-1].Caption = '' then Continue;
Reopen1.Items[i].Caption := Reopen1.Items[i-1].Caption;
s := Reopen1.Items[i].Caption;
MessageDlg(IntToStr(i) + 's=' + s, mtInformation, [mbOK], 0);
Delete(s,1,1);
MessageDlg(IntToStr(i) + 's delete=' + s, mtInformation, [mbOK], 0);
Reopen1.Items[i].Caption := IntToStr(i) + s;
Reopen1.Items[i].Visible:= True;
end;
Reopen1.Items[0].Caption := '0 ' + OpenDialog1.FileName;
Reopen1.Items[0].Visible:= True;
Reopen1.Items[0].Checked:= True;
if OpenDialog1.FileName<>'' then Self.Caption := 'Form1' + ' ' +
ExtractFileName(OpenDialog1.FileName)
else Self.Caption := 'Form1';
end;Получается вот что: После открытия первого файла 1_1.png переменная s принимает значение 2_1.png "0 имя файла" ! Ноль подчеркнут после Код:
Delete(s,1,1); 3_1.png "0 имя файла" ! Ноль НЕ подчеркнут А в подменю записывается вот-так 4_1.png Как создать нормальную нумерацию: 0, 1, 2, 3? И что бы цифра была подчеркнута. |
|
#9
|
|||
|
|||
|
Код:
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;Как-то так. Возможно, придется при выборе пункта делать все перемещения руками, но это детали - надо проверить, хотя должно работать и так. Создание буферного списка опущено. |
|
#10
|
|||
|
|||
|
Цитата:
Цитата:
Код:
procedure TForm1.Open1Click(Sender: TObject);
Var i: Integer;
s: String;
begin
if not OpenDialog1.Execute then Exit;
Save1.Enabled := True;
SaveAs1.Enabled := True;
Close1.Enabled := True;
Reopen1.Enabled := True;
for i := 3 downto 1
do begin
if Reopen1.Items[i-1].Caption = '' then Continue;
Reopen1.Items[i].Caption := Reopen1.Items[i-1].Caption;
s := Reopen1.Items[i].Caption;
Delete(s,1,2);
Reopen1.Items[i].Caption := '&' + IntToStr(i) + s;
Reopen1.Items[i].Visible:= True;
end;
Reopen1.Items[0].Caption := '&0 ' + OpenDialog1.FileName;
Reopen1.Items[0].Visible:= True;
Reopen1.Items[0].Checked:= True;
if OpenDialog1.FileName<>'' then Self.Caption := 'Form1' + ' ' +
ExtractFileName(OpenDialog1.FileName)
else Self.Caption := 'Form1';
end;Error2.png Последний раз редактировалось Doctor_Che, 31.01.2011 в 09:05. |
|
#11
|
|||
|
|||
|
Вопрос решен тупым использованием кнопочки Alt.
|