Форум программистов, компьютерный форум, киберфорум
Delphi
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.75/28: Рейтинг темы: голосов - 28, средняя оценка - 4.75
Техник
 Аватар для DenProx
318 / 176 / 27
Регистрация: 09.10.2009
Сообщений: 3,109

Кнопка "Свернуть"

05.10.2010, 09:38. Показов 5499. Ответов 13
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Доброго времени суток. У меня такой вопрос: возможно ли сделать кнопку на форме, так что бы она всегда была активна, т.е. даже если открываем дочернее окно в модальном режиме, то эта кнопка на главной форме ве равно будет активна...?

или как можно сделать, чтобы стандартная кнопка "Свернуть" сворачивала не окно, а всю программу?

интерфейс MDI использую...
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
05.10.2010, 09:38
Ответы с готовыми решениями:

ShowWindow(Wnd, SW_SHOW) и кнопка "свернуть"
Подскажите почему после SendMessage(Wnd, SW_SHOW) окно не реагирует на click по кнопке "свернуть". Wnd - указатель чужого окна,...

Свернуть все процедуры
Есть ли команда чтобы свернуть все процедуры, что бы они были по одной строке. Delphi 2007.

Как свернуть программу в систрэй?
Просмотрел все темы, но так и не нашел как свернуть прогу не в таскбар а в систрэй с текущим значком и как там же (в систрэе) определить...

13
 Аватар для Mawrat
13114 / 5895 / 1708
Регистрация: 19.09.2009
Сообщений: 8,809
05.10.2010, 11:12
Цитата Сообщение от DenProx Посмотреть сообщение
или как можно сделать, чтобы стандартная кнопка "Свернуть" сворачивала не окно, а всю программу?
Для этого в дочерней форме надо переопределить обработчик сообщения WM_SYSCOMMAND. - Добавить в него действия по сворачиванию главной формы.
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
unit Unit2;
 
interface
 
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs;
 
type
  TForm2 = class(TForm)
  private
    { Private declarations }
    procedure WMSysCommand(var Msg: TWMSysCommand); message WM_SYSCOMMAND;
  public
    { Public declarations }
  end;
 
var
  Form2: TForm2;
 
implementation
 
{$R *.dfm}
 
procedure TForm2.WMSysCommand(var Msg: TWMSysCommand);
begin
  if (Msg.CmdType and $FFF0) = SC_MINIMIZE then begin
    if Application.MainForm <> Self then
      Application.MainForm.WindowState := wsMinimized
    ;
  end;
  Inherited;
end;
 
end.
Здесь Form1 - главная форма, Form2 - дочерняя.
1
Техник
 Аватар для DenProx
318 / 176 / 27
Регистрация: 09.10.2009
Сообщений: 3,109
05.10.2010, 11:20  [ТС]
Mawrat, спасибо! но работает как то не коректно... при сворачивании, каждое окно сворачивается отдельно, и при разворачивании, восстанавливается только дочернее окно...
0
 Аватар для Mawrat
13114 / 5895 / 1708
Регистрация: 19.09.2009
Сообщений: 8,809
05.10.2010, 11:33
Я подправил немного код в своём предыдущем посте. По идее, при сворачивании должна сворачиваться дочерняя и главная формы. А при разворачивании главной - развернётся только она. Дочерняя форма останется свёрнутой. Если надо, чтобы дочерняя форма не сворачивалась при сворачивании главной - здесь надо поэксперементировать...
0
Техник
 Аватар для DenProx
318 / 176 / 27
Регистрация: 09.10.2009
Сообщений: 3,109
05.10.2010, 11:40  [ТС]
Mawrat, у меня опять сворачивает так же как и в прошлый раз... и еще такая особенность, когда сворачиваю, в левом нижнем углу, остаются миниатюрные заголовки этих окон...
Миниатюры
Кнопка "Свернуть"  
0
 Аватар для Mawrat
13114 / 5895 / 1708
Регистрация: 19.09.2009
Сообщений: 8,809
05.10.2010, 11:46
У меня сейчас вот в таком варианте хорошо отработало:
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
procedure TForm2.WMSysCommand(var Msg: TWMSysCommand);
var
  LastState : TWindowState;
begin
  if
    ((Msg.CmdType and $FFF0) = SC_MINIMIZE)
    and (Application.MainForm <> Self)
  then begin
    LastState := Self.WindowState;
    Application.MainForm.WindowState := wsMinimized;
    Inherited;
    Self.WindowState := LastState;
  end else begin
    Inherited;
  end;
end;
0
Техник
 Аватар для DenProx
318 / 176 / 27
Регистрация: 09.10.2009
Сообщений: 3,109
05.10.2010, 11:49  [ТС]
Mawrat, а у вас формы определены как MDI т.е. главная FormStyle = fsMDIForm а дочерняя FormStyle = fsMDIChild ?
0
 Аватар для Mawrat
13114 / 5895 / 1708
Регистрация: 19.09.2009
Сообщений: 8,809
05.10.2010, 11:55
Да - главная форма fsMDIForm, дочерняя - fsMDIChild. У меня обе формы сворачиваются и на панели задач только один значок - соответствующий приложению... WinXP SP3, Delphi7.
0
Техник
 Аватар для DenProx
318 / 176 / 27
Регистрация: 09.10.2009
Сообщений: 3,109
05.10.2010, 12:06  [ТС]
Mawrat, единственное что у меня не так, это SP2 XP ... но у сворачиваться не хочет, теперь главная форма сворачивается, а дочерняя сначала сворачивается и сразу же разворачивается.... щас попробую на пустом примере попробывать...

Добавлено через 5 минут
Mawrat, так и думал... это я опять затупил... здесь не MDI интерфейс, а обычный... просто раньше был MDI а то что переделал уже давно, забыл...
0
 Аватар для Mawrat
13114 / 5895 / 1708
Регистрация: 19.09.2009
Сообщений: 8,809
05.10.2010, 12:08
Прикладываю проект с этим кодом. Правда сворачивается несколько не так, как хотелось бы. При сворачивании главного окна - всё как обычно. А при сворачивании через дочернее окно - появляется дополнительный значёк внизу слева на рабочем столе.
Вложения
Тип файла: rar MDIMainMinimize.rar (159.7 Кб, 79 просмотров)
1
 Аватар для Mawrat
13114 / 5895 / 1708
Регистрация: 19.09.2009
Сообщений: 8,809
05.10.2010, 12:17
DenProx, а вот теперь всё как надо заработало.
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
procedure TForm2.WMSysCommand(var Msg: TWMSysCommand);
var
  LastState : TWindowState;
begin
  if
    ((Msg.CmdType and $FFF0) = SC_MINIMIZE)
    and (Application.MainForm <> Self)
  then begin
    SendMessage(Application.MainForm.Handle, WM_SYSCOMMAND, Msg.CmdType, 0);
  end else begin
    Inherited;
  end;
end;
Т. е., теперь, если пришло сообщение на минимизацию дочернего окна - переадресуем его главному окну.
1
Техник
 Аватар для DenProx
318 / 176 / 27
Регистрация: 09.10.2009
Сообщений: 3,109
05.10.2010, 13:03  [ТС]
Mawrat, Отлично!! Все работает))) Спасибо !!

Добавлено через 8 минут
Mawrat, а еще такой вопрос, как можно эту процедуру сделать, распространенной на все нужные формы, не копируя эту процедуру для каждой формы? Если это возможно)
0
 Аватар для Mawrat
13114 / 5895 / 1708
Регистрация: 19.09.2009
Сообщений: 8,809
05.10.2010, 13:28
Цитата Сообщение от DenProx Посмотреть сообщение
Mawrat, а еще такой вопрос, как можно эту процедуру сделать, распространенной на все нужные формы, не копируя эту процедуру для каждой формы? Если это возможно)
Это через наследование можно делать. Например, эту форму добавить в репозитарий: Project - Add to repository... И другие формы порождать уже от этой формы.
Либо подменять описания в уже созданных модулях. Т. е., например, если форма с переопределённым обработчиком имеет тип TFormNew (в нашем примере тип называется подругому - TForm2), тогда другие формы, которые должны унаследовать этот метод, должны порождаться от TFormNew. Например, пускай форма TFormNew определена в модуле UnitNew.pas. Если добавляем в проект новую форму (например Form5), то в связанном с ней модуле имеем:
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
unit Unit5;
 
interface
 
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs;
 
type
  TForm5 = class(TForm)
  private
    { Private declarations }
  public
    { Public declarations }
  end;
...
Затем, меняем так:
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
unit Unit2;
 
interface
 
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs,
 
  UnitNew;
 
type
  TForm5 = class(TFormNew)
  private
    { Private declarations }
  public
    { Public declarations }
  end;
...
Но удобнее всё же в репозитарий добавить.
1
Техник
 Аватар для DenProx
318 / 176 / 27
Регистрация: 09.10.2009
Сообщений: 3,109
05.10.2010, 13:33  [ТС]
Mawrat, спасибо! ))
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
05.10.2010, 13:33
Помогаю со студенческими работами здесь

Можно ли свернуть часть кода
Всем привет. Пишу под делфи 7(2002), но когда много кода то не удобно. Есть ли дополнение к редактору, что бы можно было свернуть часть...

Кнопки и окна: передвинуть, свернуть, развернуть, закрыть.
как передвинуть кнопки свернуть, развернуть, закрыть на несколько пикселов влево, и как в CAPTION расположить свой текст или рисунок с...

Как свернуть все окна кроме нашей формы?
Нашёл в интернете интересный код: Как свернуть все окна системы ? // Любимая наша процедура. {Для того чтобы использовать данный...

Подвисает при попытке свернуть свое окно программным нажатием мышью по значку свернуть
Windows.SetCursorPos(x,y); if mh.move=false then begin if mh.LBtn then begin if mh.down then begin...

На форме располагаются компоненты: редакторы Edit и Memo, Label, ListBox, кнопка "Да" и кнопка Close
На форме располагаются компоненты: редакторы Edit и Memo, Label, ListBox, кнопка &quot;Да&quot; и кнопка Close. При запуске программы курсор...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
14
Ответ Создать тему
Новые блоги и статьи
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip Сканируйте QR-код на мобильном и вы увидите, что появится джойстик для управления главным героем. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru