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

Вниз

требуется програмно закрыть окно, имя окна хранится в переменной   Найти похожие ветки 

 
Officeman   (2006-10-02 09:07) [0]

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


 
Zeqfreed ©   (2006-10-02 09:18) [1]

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


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

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

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

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


 
ЮЮ ©   (2006-10-02 09:46) [3]


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


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


 
Officeman   (2006-10-02 10:04) [4]

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

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

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


 
MacroDenS ©   (2006-10-02 10:06) [5]

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


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


 
Officeman   (2006-10-02 10:24) [6]

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


 
ЮЮ ©   (2006-10-02 10:31) [7]

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

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


 
MacroDenS ©   (2006-10-02 10:56) [8]

to Officeman   (02.10.06 10:24) [6]

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

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


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


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

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


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

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 остаются на экране

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


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

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


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


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


for i:= Screen.FormCount-1 downto 0 do..


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


> Officeman   (02.10.06 11:55) [11]


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


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

Officeman   (02.10.06 11:52) [10]

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


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

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


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

так вернее.

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


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



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

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

Наверх




Память: 0.5 MB
Время: 0.031 c
2-1159783235
aht
2006-10-02 14:00
2006.10.22
Последний день месяца


15-1159726751
HITMAN
2006-10-01 22:19
2006.10.22
Один файл!!!


15-1159783478
Slider007
2006-10-02 14:04
2006.10.22
С днем рождения ! 1 октября


1-1157859656
Avgust
2006-09-10 07:40
2006.10.22
Delphi и word


6-1148771339
Ezorcist
2006-05-28 03:08
2006.10.22
По написанию нового компонета от TServerSocket и TClientSocket.