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

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

требуется програмно закрыть окно, имя окна хранится в переменной [D6, 2000]


Officeman ©   (2006-10-02 09:07:00) 

//требуется програмно закрыть окно,
//имя окна хранится в переменной p:='Form2';


Officeman   (2006-10-02 12:29:00) [1]

так вернее.

for i:= Screen.FormCount-2 downto 0 do
Screen.Forms[i].Close;


спасибо . тема закрыта


Officeman   (2006-10-02 12:24:00) [2]

2Сергей М.
надо только дочерние окна.


Игорь Шевченко   (2006-10-02 12:19:00) [3]

Officeman   (02.10.06 11:52) [10]

Читать надо не что-нибудь, а книгу, источник знаний.


Сергей М.   (2006-10-02 12:17:00) [4]


> Officeman   (02.10.06 11:55) [11]


Если форма 'Form1' есть основная форма приложения, то достаточно будет:
for i:= Screen.FormCount-1 downto 1do
Screen.Forms[i].Close


Сергей М.   (2006-10-02 12:09:00) [5]


> может есть другой способ


for i:= Screen.FormCount-1 downto0 do..


Officeman   (2006-10-02 11:55:00) [6]

т.е. получается что при  закрытии формы. она автоматом убирается из  FormCount. и далее в последовательности не участвует. поэтому идёт смещение.
подскажите. может есть другой способ.


Officeman   (2006-10-02 11:52:00) [7]

2Плохиш, не надо умничать)
попробуйте сами.

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

на примере: 4 формы.  Form1 основная и три дочерних (Form2,Form3,Form4)

при
for i:=0 to Screen.FormCount-1 do begin
 if Screen.Forms[i].Name<>'Form1' then begin
    memo1.Lines.Add(Screen.Forms[i].Name);    
    //Screen.Forms[i].Close;
 end;
end;


// выводится верно, но в обратной последовательности  form4,form3,form2.

//а при

при
for i:=0 to Screen.FormCount-1 do begin
 if Screen.Forms[i].Name<>'Form1' then begin
    memo1.Lines.Add(Screen.Forms[i].Name);    
Screen.Forms[i].Close; 
 end;
end;


// выводится уже подругому:  Form4, Form4, Form2
//и формы form1, form3 остаются на экране

господа! подскажите где собака зарыта.


Плохиш   (2006-10-02 11:10:00) [8]


> Officeman   (02.10.06 09:39) [2]
> Screen.Forms. ???   не понял :(
> что с ним делать?

Ну для начала надо всё-таки что-нибудь почитать.


MacroDenS   (2006-10-02 10:56:00) [9]

to Officeman   (02.10.06 10:24) [6]

не сразу разобрался в вопросе.

Напиши код как ты создаешь доч. форму.


ЮЮ   (2006-10-02 10:31:00) [10]

хочется написать одну процедурку которая и будет следить за

Первым параметром сделай (AForm: TForm;
 а не строку содержащую 'Form2', не имеющую никакого отношения к дочерним формам приложения.


Officeman   (2006-10-02 10:24:00) [11]

2MacroDenS
данная вами обработка не работает.
просто пропускается код.


MacroDenS   (2006-10-02 10:06:00) [12]

или отправить сообщение:


var
  H:HWND;
begin
  h:=FindWindow(nil, PChar(<переменная>);
  If h<>0 then
     SendMessage(handle, wm_Close,0, 0);
end;


Officeman   (2006-10-02 10:04:00) [13]

2ЮЮ ;)
пишу прогу в которой формы будут дочерними.
хочется написать одну процедурку которая и будет следить за
дочер.формами программы. показать, скрыть, свернуть, закрыть
расположить и пр..  таким образом будет некий порядок в программе, а так же    
удобная  модернизация и отладка в будущем.

Дочерние формы заведомо существуют в прогамме. Создавать их не  
требуется.
Нужно циклом перебирать все кроме Form1 и выполнять код обработки.

для работы с компонентами я использовал  FindComponent, а тут Формы. ;(


ЮЮ   (2006-10-02 09:46:00) [14]


> Screen.Forms. ???   не понял :(
> что с ним делать?


В цикле пробежать, сравнивая 'Form2' со свойствами Forms[i]
Кстакти, какое отношенеие имеет глобальная переменная, указывающая на объект с самим этим объектом? Вопрос риторический :) Никакого !!!
Тогда уж храни имя класса  'TForm2'.
 Откуда вообще взялось это 'Form2'? Как оно взялось в переменной p? Почему вместо этой p не использовать просто Form2?


Officeman   (2006-10-02 09:39:00) [15]

нужно програмно закрыть форму.
имя формы хранится в (переменной) :string

Screen.Forms. ???   не понял :(
что с ним делать?

p.s.
мм. раньше и незадумывался. для меня окно и форма это одно и тоже)


Zeqfreed   (2006-10-02 09:18:00) [16]

Закрыть таки форму или окно? Если окно, то что такое имя окна? Если форму, то см. Screen.Forms.


Наверх

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