Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 05.08.2009, 12:20
Darken Darken вне форума
Прохожий
 
Регистрация: 24.02.2009
Сообщения: 48
Репутация: 10
По умолчанию MDI интерфейс и с чем его едят?

Ребят, помогите разобраться. Необходимо написать программку работающую на основе MDI интерфейса, нашел статью, все делаю по инструкции, но дохожу до вот этого места

Код:
Создание и отображение 

Как упомянуто выше, настройка не позволяет автоматически создавать дочерние окна, поэтому нам необходимо добавить некоторый код, который будет производить создание объекта формы frChild. Следующую функцию CreateChildForm необходимо поместить внутри основной формы (MDI родитель) (наряду с заголовком в interface's private): 

uses uchild;
...
procedure TfrMain.CreateChildForm(const childName : string);
var
  Child: TfrChild;
begin
  Child := TfrChild.Create(Application);
  Child.Caption := childName;
end;

и постоянно выдает ошибку, просьба помочь разобраться или дать ссылку на подробное описание. Заранее благодарен.

Последний раз редактировалось Admin, 05.08.2009 в 12:23.
Ответить с цитированием
  #2  
Старый 05.08.2009, 13:08
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,051
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

Какую ошибку-то выдает??? Компилятор или во время выполнения?
Тут телепатов нету. Давай более подробную информацию.
Ответить с цитированием
  #3  
Старый 05.08.2009, 13:22
Darken Darken вне форума
Прохожий
 
Регистрация: 24.02.2009
Сообщения: 48
Репутация: 10
По умолчанию

вот код моих файлов:

uMain.pas
Цитата:
unit uMain;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, uchild;

type
TfrMain = class(TForm)
private
{ Private declarations }
procedure TfrMain.CreateChildForm(const childName : string);
var
Child: TfrChild;
begin
Child := TfrChild.Create(Application);
Child.Caption := childName;
end;

public
{ Public declarations }
end;

var
frMain: TfrMain;

implementation

{$R *.dfm}

end.


uchild.pas
Цитата:
unit uchild;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs;

type
TfrChild = class(TForm)
private
{ Private declarations }
public
{ Public declarations }
end;

var
frChild: TfrChild;

implementation

{$R *.dfm}

end.


ошибки
Цитата:
[Error] uMain.pas(13): Undeclared identifier: 'TfrMain'
[Error] uMain.pas(13): 'END' expected but 'CONST' found
[Error] uMain.pas(13): '=' expected but ')' found
[Error] uMain.pas(16): Statements not allowed in interface part
[Error] uMain.pas(20): Declaration expected but identifier 'public' found
[Error] uMain.pas(22): 'IMPLEMENTATION' expected but ';' found
[Error] uMain.pas(27): '.' expected but 'IMPLEMENTATION' found
[Hint] uMain.pas(13): Private symbol 'TfrMain' declared but never used
[Fatal Error] Project1.dpr(6): Could not compile used unit 'uMain.pas'

Ответить с цитированием
  #4  
Старый 05.08.2009, 13:35
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,051
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

О, Господи!!! Естественно, компилятор дает тебе ошибки. Кто же пишет реализацию метода в описании класса? Это тебе не С++ и inline-методами... Поменяй вот так:

Код:
unit uMain;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, uchild;

type
TfrMain = class(TForm)
private
{ Private declarations }
  procedure CreateChildForm(const childName : string);
public
{ Public declarations }
end;

var
frMain: TfrMain;

implementation

{$R *.dfm}

procedure TfrMain.CreateChildForm(const childName : string);
var
  Child: TfrChild;
begin
  Child := TfrChild.Create(Application);
  Child.Caption := childName;
end;

end.
Ответить с цитированием
  #5  
Старый 05.08.2009, 14:37
Darken Darken вне форума
Прохожий
 
Регистрация: 24.02.2009
Сообщения: 48
Репутация: 10
По умолчанию

спасибо огромное, пошел разбираться дальше
Ответить с цитированием
  #6  
Старый 07.08.2009, 16:38
Darken Darken вне форума
Прохожий
 
Регистрация: 24.02.2009
Сообщения: 48
Репутация: 10
По умолчанию

новые проблемы:

1. при отображении дочерней формы, не могу изменить ее размеры
2. в м атеринской форме присутствует меню, при разворачивании дочерней формы кнопки управления последней "прячутся" под меню, но работают
3. не могу добиться чтобы дочернее окно занимало всю свободную область материнского окна

Заранее спасибо за помощь

ЗЫ. дочерние формы отображаю так:

Цитата:
procedure TForm1.sButton1Click(Sender: TObject); //Кнопка - Редактор
begin
TForm4.Create(Application);
end;
Ответить с цитированием
  #7  
Старый 09.08.2009, 21:32
NT_AUTHORITY NT_AUTHORITY вне форума
Прохожий
 
Регистрация: 06.08.2009
Сообщения: 34
Репутация: 10
По умолчанию

1. Указатель на активную форму можно получить так: frmMain.ActiveMDIChild и дальше делать с ней что угодно.
2, 3. Не понял ))
Ответить с цитированием
  #8  
Старый 09.08.2009, 22:25
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,051
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

2. Это так делается на уровне Винды. Просто прими как данность. Особенности MDI-интерфейса.
3. Ну максимизируй ее. Если не ошибаюсь, достаточно установаит WindowState.
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 18:29.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter