Форум программистов, компьютерный форум, киберфорум
Delphi для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.80/15: Рейтинг темы: голосов - 15, средняя оценка - 4.80
4311 / 1422 / 463
Регистрация: 16.12.2010
Сообщений: 2,939
Записей в блоге: 3
1

Открытие файлов в MDI приложении

01.04.2011, 18:36. Показов 2835. Ответов 18
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Сделал многооконный текстовый редактор. Остался недоделанным пункт открытия текста в отдельном дочернем окне. Открываться они должны при нажатии на "открыть в новой форме".
Нашел на одном из форумов нужный код, но у меня он не заработал:
Delphi
1
2
3
4
5
6
7
8
9
10
procedure TForm1.Open1Click(Sender: TObject);
var 
 Child:TD8Child;
begin
 If not OD.Execute then exit;
 Child:=TD8Child.Create(Self);
 Child.Memo1.Lines.LoadFromFile(OD.FileName);
 Child.Caption:=ExtractFileName(OD.FileName);
 Child.Filename:=OD.FileName; // <-- выдает "Undeclared identifier"
end;
Получается, у Child нет такого свойства (при подстановке в мою программу), но в той, что нашел, все прекрасно работает. В чем проблема?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
01.04.2011, 18:36
Ответы с готовыми решениями:

Открытие нескольких файлов в одном приложении
Добрый день! Задача: приложение работает одновременно с несколькими проектами (одно общее окно,...

DBLookupComboBox в MDI приложении
Здравствуйте! Создаю простую базу данных в виде MDI приложении. Есть дочернее окно с таблице в...

MainMenu в MDI-приложении
В новом проекте, создаю 3 формы. Затем на каждую из них кидаю компонент MainMenu.После задаю в...

Подключение savedialog в MDI приложении
Я создаю MDI приложение и мне нужно, чтобы кнопки save и save as сохранили активную MDIChild. Как...

18
324 / 316 / 84
Регистрация: 03.03.2010
Сообщений: 1,364
01.04.2011, 18:38 2
BumerangSP, Child это имя формы

Добавлено через 23 секунды
какого свойства нет
0
4311 / 1422 / 463
Регистрация: 16.12.2010
Сообщений: 2,939
Записей в блоге: 3
01.04.2011, 18:38  [ТС] 3
Romantik_FM, а у формы разве есть свойство Filename?
0
324 / 316 / 84
Регистрация: 03.03.2010
Сообщений: 1,364
01.04.2011, 18:38 4
Цитата Сообщение от BumerangSP Посмотреть сообщение
Child.Filename:=OD.FileName; // <-- выдает "Undeclared identifier"
Delphi
1
OpenDialog.FileName
0
4311 / 1422 / 463
Регистрация: 16.12.2010
Сообщений: 2,939
Записей в блоге: 3
01.04.2011, 18:40  [ТС] 5
Romantik_FM, ну, это понятно, с Child вот не очень.
Delphi
1
Child.Filename
0
324 / 316 / 84
Регистрация: 03.03.2010
Сообщений: 1,364
01.04.2011, 18:41 6
BumerangSP, не пойму что именно здесь хотел автор
Попробуй без неё. Всё будет ОК
0
4311 / 1422 / 463
Регистрация: 16.12.2010
Сообщений: 2,939
Записей в блоге: 3
01.04.2011, 19:01  [ТС] 7
Romantik_FM, без нее выдает ошибку (не компилятор, при пользовании)
Или может есть другой метод? Мне главное, чтобы каждый файл в новой окне открывался.

Добавлено через 15 минут
Ну, или вот еще один код с другой программы:
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
procedure TForm1.Open1Click(Sender: TObject);
begin
     if OpenDialog1.Execute then
     begin
          with TfrmEditForm.Create(Self) do
          begin
               ParentForm:=self;
               FileName:=OpenDialog1.FileName;
               LoadFile;
               
          end;
     end;
end;
Во-первых, ругается на
Delphi
1
ParentForm:=self;
Во-вторых, на FileName и LoadFile (undeclared identifier);
В той программе тоже все хорошо работает.
Никаких переменных в var там нет.
0
324 / 316 / 84
Регистрация: 03.03.2010
Сообщений: 1,364
01.04.2011, 19:06 8
Delphi
1
2
3
4
5
6
7
8
9
10
procedure TMainForm.FileNew1Execute(Sender: TObject);
begin
  CreateMDIChild('NONAME' + IntToStr(MDIChildCount + 1));
end;
 
procedure TMainForm.FileOpen1Execute(Sender: TObject);
begin
  if OpenDialog.Execute then
    CreateMDIChild(OpenDialog.FileName);
end;
Добавлено через 3 минуты
Можно создать приложение MDI сразу как тебе нужно.
Файл->Новый->Другое->MDI Project
1
4311 / 1422 / 463
Регистрация: 16.12.2010
Сообщений: 2,939
Записей в блоге: 3
01.04.2011, 19:09  [ТС] 9
Romantik_FM, извиняюсь за глупые вопросы, но куда вставлять эти строчки?
И на CreateMDIChild компилятор тоже реагирует.
0
324 / 316 / 84
Регистрация: 03.03.2010
Сообщений: 1,364
01.04.2011, 19:17 10
BumerangSP, форма MDI должна иметь свойства
Delphi
1
FormStyle:=fsMDIChild;
Потом project-options-Вкаладка Forms и переместить нужно форму в правую сторону
0
4311 / 1422 / 463
Регистрация: 16.12.2010
Сообщений: 2,939
Записей в блоге: 3
01.04.2011, 19:20  [ТС] 11
Romantik_FM, это все готово, а строки-то куда писать?
0
324 / 316 / 84
Регистрация: 03.03.2010
Сообщений: 1,364
01.04.2011, 19:33 12
на кнопку открыть
0
4311 / 1422 / 463
Регистрация: 16.12.2010
Сообщений: 2,939
Записей в блоге: 3
01.04.2011, 19:36  [ТС] 13
2 процедуры на одну кнопку?
Он на "CreateMDIChild" пишет Undeclared identifier.
0
324 / 316 / 84
Регистрация: 03.03.2010
Сообщений: 1,364
01.04.2011, 19:40 14
Delphi
1
2
3
4
5
6
7
8
procedure TForm1.Open1Click(Sender: TObject);
begin
 If not OD.Execute then exit;
 Child:=TD8Child.Create(Sender);
 Child.Memo1.Lines.LoadFromFile(OD.FileName);
 Child.Caption:=ExtractFileName(OD.FileName);
 Child.BringToFront;
end;
Должно так работать
0
4311 / 1422 / 463
Регистрация: 16.12.2010
Сообщений: 2,939
Записей в блоге: 3
01.04.2011, 19:46  [ТС] 15
Теперь здесь ошибка:
Delphi
1
Child:=TD8Child.Create(Sender);
А если вместо sender прописать self, то ошибка выходит уже после компиляции.
0
324 / 316 / 84
Регистрация: 03.03.2010
Сообщений: 1,364
01.04.2011, 20:04 16
Delphi
1
Child:=TChild.Create(Self);
0
4311 / 1422 / 463
Регистрация: 16.12.2010
Сообщений: 2,939
Записей в блоге: 3
01.04.2011, 22:42  [ТС] 17
Цитата Сообщение от Romantik_FM Посмотреть сообщение
Delphi
1
Child:=TChild.Create(Self);
Project ***.exe raised exception class EstackOverflow with message 'Stack Overflow'. Process stoped. Use Step or Run to continue.
0
324 / 316 / 84
Регистрация: 03.03.2010
Сообщений: 1,364
01.04.2011, 23:06 18
Delphi
1
2
3
4
5
6
7
8
procedure TviborForm.sBitBtn1Click(Sender: TObject);
begin
if mainsravnenform = nil then
 begin
  mainsravnenform := Tmainsravnenform.Create(Application);
 end else mainsravnenform.BringToFront;
 Close;
end;
вот ещё код такой нашёл
1
4311 / 1422 / 463
Регистрация: 16.12.2010
Сообщений: 2,939
Записей в блоге: 3
01.04.2011, 23:52  [ТС] 19
Спасибо за помощь, уже разобрался
В этом коде:

Delphi
1
2
3
4
5
6
7
8
9
10
procedure TForm1.Open1Click(Sender: TObject);
var 
 Child:TD8Child;
begin
 If not OD.Execute then exit;
 Child:=TD8Child.Create(Self);
 Child.Memo1.Lines.LoadFromFile(OD.FileName);
 Child.Caption:=ExtractFileName(OD.FileName);
 Child.Filename:=OD.FileName;
end;
Filename нужно было в Public прописать и присвоить тип string.
0
01.04.2011, 23:52
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
01.04.2011, 23:52
Помогаю со студенческими работами здесь

Два MDI в одном приложении
Прошу помощи у продвинутых. У меня есть рабочая прога с MDI окнами. Все работает нормально....

Как дочернему окну в MDI приложении узнать свой Handle?
Здравствуйте. В MDI приложении есть 2 формы: Form1 - fsMDIForm Form2 - fsMDIChild ...

Нужна панелька для окон в MDI приложении
Привет всем! В общем есть приложение MDI со множеством дочерних форм. Мне необходимо счтобы в...

Создание компилятор exe файлов в готов приложении
Доброй ночи форумчане сидя теперь пришла такая бредовая идея можно ли в готовой скопилированной...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
19
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru