Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2004.08.08;
Скачать: [xml.tar.bz2];

Вниз

Управление окнами в 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;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.48 MB
Время: 0.043 c
3-1089810976
RavenD
2004-07-14 17:16
2004.08.08
CASE для FireBird?


1-1090997977
RagE
2004-07-28 10:59
2004.08.08
TCanvas.TextOut


14-1089994075
RA
2004-07-16 20:07
2004.08.08
dvclcal


1-1090482565
Виталя
2004-07-22 11:49
2004.08.08
Как сделать Hint для StringGrid многострочным ?


1-1090499384
segor
2004-07-22 16:29
2004.08.08
как создать форму если ее класс известен только в рантайм?





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский