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

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

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

Восстановить пароль
Повторная активизация e-mail

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

Ответ
 
Опции темы Поиск в этой теме
Старый 16.07.2009, 03:38   #1
Altera
Старожил
 
Аватар для Altera
 
Регистрация: 29.01.2008
Сообщений: 2,406
По умолчанию Проблемы со сворачиванием форм

Привет всем!
В общем проблема заключается в том, что когда я сворачиваю главное окно, то сворачиваются и все остальные окна моего приложения. Пробовал решить эту задачу дав каждому окну свою кнопку на панели задач. ( http://narod.yandex.ru/cgi-bin/yandm...0=636959456&p= ) но всёравно при сворачивании одного окна сворачиваются все окна приложения
Altera вне форума Ответить с цитированием
Старый 16.07.2009, 05:51   #2
BaronTreep
Форумчанин
 
Регистрация: 29.05.2009
Сообщений: 320
По умолчанию

В главном проекте:

Код:
program Project1;

uses
  Forms, Windows,
  ...

{$R *.RES}

begin
  ...
  Application.Initialize;
  SetWindowLong(Application.Handle, GWL_EXSTYLE, GetWindowLong(Application.Handle, GWL_EXSTYLE) or WS_EX_TOOLWINDOW);
  ...
end.
А в модуле главной формы так:

Код:
type
  TMForm = class(TForm)
  ...
  private
    ...
  public
    ...
  protected
  procedure CreateParams(var p: TCreateParams); override;
  procedure WMSysCommand(var m: TMessage); message WM_SYSCOMMAND;
  end;

...


procedure TMForm.CreateParams(var p: TCreateParams);
begin
  inherited;
  p.WndParent := 0;
end;

procedure TMForm.WMSysCommand(var m: TMessage);
begin
   m.Result := DefWindowProc(Handle, m.Msg, m.wParam, m.lParam);
end;
Добавлю что сие означает - в Дельфи главным является форма TAplication, она имеет нулевой размер и сней асоциирована кнопка на панели задач. При вызове метода сворачивания у главного окна отправляется сообщение TAplication, и он помимо сворачивания главного окна посылает hide дочерним SDI окнам. Те либо падают в левый нижний угол, либо в панель задач (как вы сделали). Нужно переопределить свойство TAplication и переписать обработчики главной формы, чтобы hide не посылалось дочерним.

Последний раз редактировалось BaronTreep; 16.07.2009 в 05:57.
BaronTreep вне форума Ответить с цитированием
Старый 16.07.2009, 07:56   #3
Altera
Старожил
 
Аватар для Altera
 
Регистрация: 29.01.2008
Сообщений: 2,406
По умолчанию

Работает, но как-то криво.
Я сделал только

Код:
procedure Tmain_form.WMSysCommand(var m: TMessage);
begin
   if not m.WParam = SC_MINIMIZE then
      m.Result := DefWindowProc(Handle, m.Msg, m.wParam, m.lParam);
end;
и ещё showWindow(application.handle, SW_HIDE) добавил. Работает.
Altera вне форума Ответить с цитированием
Старый 16.07.2009, 08:10   #4
BaronTreep
Форумчанин
 
Регистрация: 29.05.2009
Сообщений: 320
По умолчанию

Отлично. Работает кстати и с разворачиванием/максимизацией - в смысле отдельно обрабатывается.
BaronTreep вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Шаблоны форм Lemo Общие вопросы Delphi 16 09.02.2009 18:49
Смена форм... AndrYxo Общие вопросы Delphi 6 12.10.2008 17:01
Обработка форм igoist Помощь студентам 2 21.03.2008 22:23
Несколько форм. Sargon Помощь студентам 23 15.09.2007 23:52