Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 23.09.2011, 01:58   #11
designer999
Форумчанин
 
Регистрация: 16.02.2010
Сообщений: 187
По умолчанию

Цитата:
Сообщение от chertovich Посмотреть сообщение
Код:
  for I := 0 to Screen.FormCount - 1 do
  begin
    with Screen do
    begin
      if Forms[I].Name <> 'Form1' then Forms[I].Close;
    end;
  end;
это пробовал, не работает, для всех форм.....
designer999 вне форума Ответить с цитированием
Старый 23.09.2011, 02:02   #12
designer999
Форумчанин
 
Регистрация: 16.02.2010
Сообщений: 187
По умолчанию

Цитата:
Сообщение от Аватар Посмотреть сообщение
И почему Handle узнать нельзя?
ну а как узнать Handle если не знаеш что за диалоговое окно выскочит, вот например у меня есть webbrowser и там исполняются скрипты, и он выдал модальное сообщение как узнать Handle именно этого окна......?
designer999 вне форума Ответить с цитированием
Старый 23.09.2011, 17:53   #13
designer999
Форумчанин
 
Регистрация: 16.02.2010
Сообщений: 187
По умолчанию

delete....................

Последний раз редактировалось designer999; 24.09.2011 в 11:50.
designer999 вне форума Ответить с цитированием
Старый 23.09.2011, 19:43   #14
designer999
Форумчанин
 
Регистрация: 16.02.2010
Сообщений: 187
По умолчанию

решил использовать
Код:
postmessage(findwindow(nil,'Сообщение с веб-страницы'),WM_CLOSE,0,0);
но проблема в том что заголовок окна не всегда известен, нашол функцию по поиску дочерних окон EnumChildWindows

делал вот так:

Код:
function HandleEnumeration(Wnd: THandle; Param: integer):LONGBOOL;stdcall;
begin
 postmessage(Wnd,WM_CLOSE,0,0);
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
   EnumChildWindows(form1.Handle, @HandleEnumeration, 0)
end;
но вместо закрытия форм, пропадают все элементы на форме, в чём причина может быть?

Последний раз редактировалось designer999; 23.09.2011 в 19:49.
designer999 вне форума Ответить с цитированием
Старый 24.09.2011, 11:52   #15
designer999
Форумчанин
 
Регистрация: 16.02.2010
Сообщений: 187
По умолчанию

ну что некто не знает ?, а то полная тишина - реально очень нужно (((
designer999 вне форума Ответить с цитированием
Старый 24.09.2011, 18:49   #16
TwiX
Участник клуба
 
Аватар для TwiX
 
Регистрация: 28.07.2009
Сообщений: 1,510
По умолчанию

Дочерние окна у формы - это её элементы.

1. Это должно работать:
Код:
for I := 0 to Screen.FormCount - 1 do
  begin
    with Screen do
    begin
      if Forms[I].Name <> 'Form1' then SendMessage(Forms[I].handle, WM_CLOSE, 0, 0);
    end;
  end;
Эта штука может не закрывать все формы из-за принципа работы wm_close.
MSDN:
Цитата:
Remarks

An application can prompt the user for confirmation, prior to destroying a window, by processing the WM_CLOSE message and calling the DestroyWindow function only if the user confirms the choice.
2. Можно перебирать все окна в системе. По окну можно определить процесс (в гугле можно спросить как, сейчас не помню). И соответственно, если мы находим окно нашего процесса, мы сверяем его заголовок/класс с основной формой. Если не главная форма - закрываем.
TwiX вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Закрыть все программы Михаил Юрьевич Общие вопросы Delphi 2 28.05.2010 22:07
Как программно закрыть все открытые модальные формы перед сворачиванием главной формы в трей? SkAndrew Общие вопросы Delphi 8 27.01.2010 22:44
Как на WinApi получить все дочерние окна приложения? Wadimka Работа с сетью в Delphi 8 27.05.2009 14:25
закрыть все дочерни окна, кроме главного окна Worms Общие вопросы Delphi 2 03.12.2007 22:18
Как сделать чтобы дочерние окна в MDI-приложениях были вне главного окна??? dimonchuk Общие вопросы Delphi 1 11.08.2007 12:13