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

Вниз

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

 
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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.48 MB
Время: 0.043 c
3-1156426216
Сергей А.
2006-08-24 17:30
2006.10.22
Длина поля в таблице MySQL


15-1159362327
Konstantin555
2006-09-27 17:05
2006.10.22
Проблема с записью 2-х сторонних DVD-дисков


2-1159824730
ABS
2006-10-03 01:32
2006.10.22
EAccessViolation


1-1158224202
_Mouse_
2006-09-14 12:56
2006.10.22
Проблемка с указателями


2-1159702149
Фиббоначи
2006-10-01 15:29
2006.10.22
Последовательность Фиббоначи





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский