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