![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | 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? И что бы цифра была подчеркнута. |