![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
требуется програмно закрыть окно, имя окна хранится в переменной [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.