Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.08.08;
Скачать: CL | DM;

Вниз

Управление окнами в MDI-приложении   Найти похожие ветки 

 
Магнит   (2004-07-20 22:30) [0]

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

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

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


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

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


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

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


 
Gero ©   (2004-07-20 23:41) [3]


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

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

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


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

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


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


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


TMyMDIChild
Тип описал?
:))


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

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

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


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

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

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


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

Form1.Enabled := True;


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

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


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

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


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

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


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


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

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


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

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


 
Gero ©   (2004-07-21 01:22) [14]


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

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


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

unit Unit2;

.....

uses Form1;

.....

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


 
Gero ©   (2004-07-21 12:06) [16]


> uses Form1;

> Form1.Enabled:=True;

?


 
Bacuc ©   (2004-07-21 12:14) [17]

Как я понял, проблема состоит в том, что обращаться к дочерней форме? Если да, то я обошел это так:
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";


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

Да нет же!

допустим, в проекте 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

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


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


> Zlod3y   (22.07.04 13:50) [18]

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


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

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



Страницы: 1 вся ветка

Текущий архив: 2004.08.08;
Скачать: CL | DM;

Наверх




Память: 0.51 MB
Время: 0.024 c
3-1089962522
denis24
2004-07-16 11:22
2004.08.08
Редактирование в гриде


1-1090907569
prorok2
2004-07-27 09:52
2004.08.08
Смещение компонент при разворачивание формы на полный экран


3-1089708236
a123
2004-07-13 12:43
2004.08.08
поиск двойников


4-1088443568
Vasya.ru
2004-06-28 21:26
2004.08.08
Как программно перезагрузить Windows?


8-1085402573
Anna
2004-05-24 16:42
2004.08.08
msacm, reclinit *pas