Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Управление окнами в MDI-приложении [D6, D7, Win2k, WinXP]


Магнит ©   (2004-07-20 22:30:00) 

Раньше я как-то над этим не задумывался, а теперь ломаю голову....как?

Если, допустим, в MDI-приложении, из главной формы, открыть две дочернии, то как из одной дочерней формы управлять другой?

Могу только обращаться к переменным, а к свойствам объектов не могу :-(


Zlod3y   (2004-07-22 14:18:00) [1]

Плохиш - братан :о) с меня пЫво


Плохиш   (2004-07-22 14:09:00) [2]


> Zlod3y   (22.07.04 13:50) [18]

Если ты действительно в TForm2 пишешь TForm3.Create( self), то при закрытии TForm3 пиши TForm2(owner).Enable := true.


Zlod3y   (2004-07-22 13:50:00) [3]

Да нет же!

допустим, в проекте 3 формы: Form1, Form2 и Form3
From1 - MDIForm
From2 и Form3 - MDIChild

на From1 есть меню, по выбору какого-то пункта открывается From2 (TForm2.Create(self)), на From2 есть кнопка, по нажатию на которую From2 делается Form2.Enabled:=False и открывается Form3 (TForm3.Create(self))...при закрытии Form3 нужно чтобы происходила такая вещь -> Form2.Enabled:=True

Как это реализовать я не пойму... :-(


Bacuc   (2004-07-21 12:14:00) [4]

Как я понял, проблема состоит в том, что обращаться к дочерней форме? Если да, то я обошел это так:
1. Описываю функцию поиска дочернего окна по его заголовку:
function TForm1.SearchForm(TextCaption: string): integer;
var i,k: integer;
begin
   k:=-1;
   for i:=MDIChildCount-1 downto 0 do
       if MDIChildren[i].Caption=TextCaption then k:=i;
   Result:=k;
end;


2. А затем обращаюсь к окну:
   
if SearchForm('Form1')<>-1 then
MDIChildren[SearchForm('Form1')].Enabled:=True;
Show;


3. Можно обращаться к объектам формы Form1, например к Edit1:

if SearchForm('Form1')<>-1 then
(MDIChildren[SearchForm('Form1')] as Form1).Edit1.Text='EditText';


Gero   (2004-07-21 12:06:00) [5]


> uses Form1;

> Form1.Enabled:=True;

?


Магнит   (2004-07-21 07:48:00) [6]

unit Unit2;

.....

uses Form1;

.....

procedure TForm2.Close(Sender: TObject);
begin
 Form1.Enabled:=True;
end;


Gero   (2004-07-21 01:22:00) [7]


> Магнит   (21.07.04 00:59)

Скорее всего проблема не из-за Enabled.
Приведи весь код OnClose.


Магнит   (2004-07-21 00:59:00) [8]

ну обычное дело "Access violation" и т. д.....


Gero   (2004-07-21 00:39:00) [9]


> Но ругается на Form1.Enabled:=True там

Русским матом ругается или может какие-то сообщения выдает?


Магнит   (2004-07-21 00:36:00) [10]

да знаю я! Но ругается на Form1.Enabled:=True там


Gero   (2004-07-21 00:32:00) [11]

Тогда придется написать его в обработчике OnClose формы Form2.


Магнит   (2004-07-21 00:28:00) [12]

хыы...понятное дело, но надо что-бы это Form1.Enabled:=True было написано в обработчике OnClose формы Form2


Gero   (2004-07-21 00:15:00) [13]

Form1.Enabled := True;


Магнит   (2004-07-21 00:04:00) [14]

Опишу проблему подробнее:

из дочерней(Form1) формы запускается ещё одна дочерняя(Form2), надо что-бы дочерняя(Form1) была Form1.Enabled:=True;


Магнит   (2004-07-20 23:59:00) [15]

в локальной процедуре всё нормально, не ругается, а вот когда глобально его описываю, то ругается.....где тогда этот тип опысывать? и как?

Заранее благодарю.


Алхимик   (2004-07-20 23:54:00) [16]


> ругается на "Form: TMyMDIChild;"


T MyMDIChild
Тип описал?
:))


Магнит   (2004-07-20 23:52:00) [17]

ругается на "Form: TMyMDIChild;"


Gero   (2004-07-20 23:41:00) [18]


> если наверняка можно обращаться по имени формы

Можно, но по указателю на нее обращаться будет проще.

var
 Form: TMyMDIChild;
begin
 Form := TMyMDIChild.Create;
 Form.Caption := 'Hello';
end;


Магнит   (2004-07-20 23:05:00) [19]

да я смотрел уж давно, но не врубаюсь... нафига обращаться к окну по какому-то одному компьютеру известному номеру, если наверняка можно обращаться по имени формы


AlexG   (2004-07-20 22:56:00) [20]

Используй ActiveMDIChild, MDIChildCount и MDIChildren. Подробней смотри в помощи.


Наверх

Титульная страница Поиск, карта сайта Написать письмо