Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Как заставить форму не сворачиваться в окно? 
:(
    Опции темы
petlyura
Дата 20.3.2009, 12:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 162
Регистрация: 30.1.2008
Где: Харьков

Репутация: 2
Всего: 2



Здравствуйте, товарищи!
Подскажите. Есть форма программы. В правом верхнем углу 3 кнопки: свернуть, свернуть в окно, закрыть. При запуске программы окно разворачивается во весь экран, и его нельзя двигать мышью. Только, когда мы свернем его в окно.
Задача Надо убрать первые 2 кнопки. И чтобы двигать мышью его нельзя было (удерживая за заголовок).

Как делал: установил false для biMinimize, miMaximize в BorderIcons формы. Осталась одна кнопка - крестик (закрыть). Так вот теперь программу можно двигать мышью и при двойном клике на заголовке она сворачивается в окно. Эти 2 возможности мне не нужны. Как быть, что делать? 
Благодарю.
PM MAIL   Вверх
Dmi3ev
Дата 20.3.2009, 13:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1698
Регистрация: 28.11.2007

Репутация: 16
Всего: 41



Цитата

Как делал: установил false для biMinimize, miMaximize в BorderIcons формы.

а надо только:
BorderStyle поставить bsToolWindow...


--------------------

PM MAIL   Вверх
Anikmar
Дата 20.3.2009, 14:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2513
Регистрация: 26.11.2006
Где: Санкт-Петербург

Репутация: 34
Всего: 59



С размерами то все просто. А вот чтобы двигать нельзя было - похоже тут только перехватчики событий писать и вручную а место возвращать.
PM MAIL ICQ   Вверх
mrbrooks
Дата 20.3.2009, 14:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


трололомен
****


Профиль
Группа: Завсегдатай
Сообщений: 4259
Регистрация: 4.10.2006
Где: Дол Гулдур

Репутация: 167
Всего: 306



Цитата(Dmi3ev @  20.3.2009,  13:46 Найти цитируемый пост)
BorderStyle поставить bsToolWindow... 

двигаться то будет все равно, захватив курсором Border.

Добавлено через 1 минуту и 46 секунд
Тем паче можно и BorderStyle = bsDialog
PM MAIL   Вверх
Dmi3ev
Дата 20.3.2009, 14:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1698
Регистрация: 28.11.2007

Репутация: 16
Всего: 41



Цитата

двигаться то будет все равно, захватив курсором Border.

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


--------------------

PM MAIL   Вверх
mrbrooks
Дата 20.3.2009, 15:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


трололомен
****


Профиль
Группа: Завсегдатай
Сообщений: 4259
Регистрация: 4.10.2006
Где: Дол Гулдур

Репутация: 167
Всего: 306



Что бы не перемещалась за заголовок.
Код

unit1.h
......
private:
.....
void __fastcall FormFuckMove(TWMWindowPosChanging &msg);
BEGIN_MESSAGE_MAP
      MESSAGE_HANDLER(WM_WINDOWPOSCHANGING, TWMWindowPosChanging, FormFuckMove)
END_MESSAGE_MAP(TForm)
.....


Код

unit1.cpp
....
void __fastcall TForm1::FormFuckMove(TWMWindowPosChanging &msg);
{
msg.WindowPos->flags |= SWP_NOMOVE;
}


И никуда она родная не денется с подводной лодки.
PM MAIL   Вверх
petlyura
Дата 20.3.2009, 15:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 162
Регистрация: 30.1.2008
Где: Харьков

Репутация: 2
Всего: 2



Да, с BorderStyle = bsDialog окно стало как вкопанное, ни двойной клик не работает, и захватить за границу не получается, но куда-то исчезло меню. с bsToolWindow панель инструментов плохо отображается. 

Как отловить двойной клик по заголовку? Ф-цию или обработчик можно. 

PM MAIL   Вверх
mrbrooks
Дата 20.3.2009, 15:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


трололомен
****


Профиль
Группа: Завсегдатай
Сообщений: 4259
Регистрация: 4.10.2006
Где: Дол Гулдур

Репутация: 167
Всего: 306



Цитата(petlyura @  20.3.2009,  15:29 Найти цитируемый пост)
Как отловить двойной клик по заголовку? Ф-цию или обработчик можно. 

Кидай на форму ApplicationEvent. В обработчике OnMessage

Код

 if (Msg.message == WM_NCLBUTTONDBLCLK)
  {
   int result = SendMessage(Msg.hwnd, WM_NCHITTEST, 0, Msg.LParam);
   if (result == HTCAPTION)
    {
            ShowMessage("Ура!");
    }
  }

PM MAIL   Вверх
Anikmar
Дата 20.3.2009, 15:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2513
Регистрация: 26.11.2006
Где: Санкт-Петербург

Репутация: 34
Всего: 59



Да ненадо ничего - поставьте ограничения размеров и не будут размеры меняться.

А от перетаскивания только мтеод перехвата работать будет походу...
PM MAIL ICQ   Вверх
Klin
Дата 21.3.2009, 01:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1938
Регистрация: 7.10.2002
Где: Краснодар

Репутация: 20
Всего: 25



bsToolWindow?
Что-то вы мудрите, ребята... я бы просто bsNone поставил, но раз уж такая пьянка...

Итак, ставим:

BorderIcons

biMinimize = false
biMaximize = false

BorderStyle = bsSingle

При этом пропадут злощастные кнопки, да и размер будет фиксирован.
Насчет событий на перемещение, думаю все вполне законно.

ps. имхо просто нужно убрал заголовок.


--------------------
Я человек - попробуйте обвинить меня за это.
PM MAIL   Вверх
mrbrooks
Дата 23.3.2009, 08:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


трололомен
****


Профиль
Группа: Завсегдатай
Сообщений: 4259
Регистрация: 4.10.2006
Где: Дол Гулдур

Репутация: 167
Всего: 306



Цитата(Klin @  21.3.2009,  01:19 Найти цитируемый пост)
ps. имхо просто нужно убрал заголовок. 

Автор об этом ничего не сказал - следовательно заголовок нужен.


Цитата(Klin @  21.3.2009,  01:19 Найти цитируемый пост)
bsToolWindow?
Что-то вы мудрите, ребята... я бы просто bsNone поставил, но раз уж такая пьянка...

Итак, ставим:

BorderIcons

biMinimize = false
biMaximize = false

BorderStyle = bsSingle

При этом пропадут злощастные кнопки, да и размер будет фиксирован.

Чем не устраивает сразу BorderStyle = bsDialog ?
PM MAIL   Вверх
petlyura
Дата 23.3.2009, 10:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 162
Регистрация: 30.1.2008
Где: Харьков

Репутация: 2
Всего: 2



Цитата(mrbrooks @ 20.3.2009,  15:45)

Кидай на форму ApplicationEvent. В обработчике OnMessage

Код

 if (Msg.message == WM_NCLBUTTONDBLCLK)
  {
   int result = SendMessage(Msg.hwnd, WM_NCHITTEST, 0, Msg.LParam);
   if (result == HTCAPTION)
    {
            ShowMessage("Ура!");
    }
  }

Да, похоже. Только я вот не знаю, как остановить действие двойного клика по заголовку. Что надо поставить вместо ShowMessage ("Ура!"); ?
PM MAIL   Вверх
mrbrooks
Дата 23.3.2009, 10:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


трололомен
****


Профиль
Группа: Завсегдатай
Сообщений: 4259
Регистрация: 4.10.2006
Где: Дол Гулдур

Репутация: 167
Всего: 306



Цитата(petlyura @  23.3.2009,  10:25 Найти цитируемый пост)
Что надо поставить вместо ShowMessage ("Ура!");

То, что ты хочешь сделать при двойном клике на заголовке smile 
PM MAIL   Вверх
petlyura
Дата 23.3.2009, 11:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 162
Регистрация: 30.1.2008
Где: Харьков

Репутация: 2
Всего: 2



Цитата(mrbrooks @  23.3.2009,  10:37 Найти цитируемый пост)
То, что ты хочешь сделать при двойном клике на заголовке


Цитата(petlyura @  23.3.2009,  10:25 Найти цитируемый пост)
Только я вот не знаю, как остановить действие двойного клика по заголовку

Вроде бы хочу сделать так, чтобы по двойному клику форма не сворачивалась в окно. Т.е. первоначально она развернута во весь экран, а двойной клик по заголовку сворачивает ее. Причем уже после обработки ApplicationEvent1Message. Думаю, может, вместо "Ура!" можно написать что-то, что остановит сворачивание...  smile 

PM MAIL   Вверх
mrbrooks
Дата 23.3.2009, 11:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


трололомен
****


Профиль
Группа: Завсегдатай
Сообщений: 4259
Регистрация: 4.10.2006
Где: Дол Гулдур

Репутация: 167
Всего: 306



petlyura, попробуй написать вместо ShowMessage ("Ура!"); 

Код

WindowsState = wsMaximized;

PM MAIL   Вверх
petlyura
Дата 23.3.2009, 12:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 162
Регистрация: 30.1.2008
Где: Харьков

Репутация: 2
Всего: 2



Цитата(mrbrooks @  23.3.2009,  11:39 Найти цитируемый пост)
petlyura, попробуй написать вместо ShowMessage ("Ура!"); 
WindowsState = wsMaximized;

Тут схема такова:
Код

void __fastcall TFClient::ApplicationEvents1Message(tagMSG &Msg,
      bool &Handled)
{
 if (Msg.message == WM_NCLBUTTONDBLCLK)
  {
   int result = SendMessage(Msg.hwnd, WM_NCHITTEST, 0, Msg.lParam);
   if (result == HTCAPTION)
    {
            WindowState = wsMaximized;
    }
  }        
}

Сначала, выполняется WindowState = wsMaximized, после чего выходим из обработчика, и только потом срабатывает сворачивание в окно. Как-то надо по-другому отлавливать.
PM MAIL   Вверх
mrbrooks
Дата 23.3.2009, 13:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


трололомен
****


Профиль
Группа: Завсегдатай
Сообщений: 4259
Регистрация: 4.10.2006
Где: Дол Гулдур

Репутация: 167
Всего: 306



petlyura, попробуй WindowState = wsMaximized в OnResize формы
PM MAIL   Вверх
petlyura
Дата 23.3.2009, 15:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 162
Регистрация: 30.1.2008
Где: Харьков

Репутация: 2
Всего: 2



Цитата(mrbrooks @  23.3.2009,  13:40 Найти цитируемый пост)
petlyura, попробуй WindowState = wsMaximized в OnResize формы

Так, решил все-таки. ApplicationEvent выкинул за ненадобностью. А в OnResize засунул 
Код

this->Height  = Screen->Height;
this->Width = Screen->Width;

на wsMaximized прога не срабатывала как нужно.
Из наблюдений. Первый двойной клик на заголовке после запуска программы приводит к мерцанию окна (окно быстро сворачивается в окно меньшего размера и разворачивается обратно). В дальнейшем никакие клики ни к чему не приводят. Сделал вывод, что двойной клик на заголовке реализовывает функцию "сворачивания в окно", но не обратную ф-цию. Потому после первого двойного клика, форма как бы находится в режиме "свернута в окно", а потому не может быть свернута еще раз. 
Конечно, коряво, но меня вполне устраивает.
mrBooks, Вам еще +1. К сожалению, только на словах. Система не дает возможности два раза в день плюсы ставить, хотя заслужили. По сути, решили 2 задачи.

Это сообщение отредактировал(а) petlyura - 23.3.2009, 15:28
PM MAIL   Вверх
Anikmar
Дата 23.3.2009, 15:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2513
Регистрация: 26.11.2006
Где: Санкт-Петербург

Репутация: 34
Всего: 59



Цитата

petlyura
mrBooks, Вам еще +1. К сожалению, только на словах. Система не дает возможности два раза в день плюсы ставить, хотя заслужили. По сути, решили 2 задачи.


Поможем, что делать  smile 

PM MAIL ICQ   Вверх
petlyura
Дата 23.3.2009, 15:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 162
Регистрация: 30.1.2008
Где: Харьков

Репутация: 2
Всего: 2



smile Спасибо, Аникмар!

На всякий случай, оставляю вопрос открытым, вдруг кто-то что-нибудь мудрое подскажет.
PM MAIL   Вверх
Klin
Дата 24.3.2009, 02:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1938
Регистрация: 7.10.2002
Где: Краснодар

Репутация: 20
Всего: 25



Цитата(mrbrooks @  23.3.2009,  09:52 Найти цитируемый пост)
Чем не устраивает сразу BorderStyle = bsDialog ?

Хм... про диалог не увидел. В принципе визуально тот же эффект, насчет программной стороны не знаю. А bsToolWindow - не имеет смысла.

Насчет по умнее не знаю, но что-то мне подсказывает, что не обязательно использовать стандартный заголовок - уж как-то много "страховок" используется. Имхо намного "приятней" будет использовать свой, при этом на OnMouseDown заголовка поставить:

Код

  if(Button == mbLeft)
  {
    long SC_DRAGMOVE = 0xF012;
    ReleaseCapture();
    SendMessage(Handle, WM_SYSCOMMAND, SC_DRAGMOVE, 0);
  }


Впрочем, решать вам, а это как альтернатива.


--------------------
Я человек - попробуйте обвинить меня за это.
PM MAIL   Вверх
petlyura
Дата 24.3.2009, 11:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 162
Регистрация: 30.1.2008
Где: Харьков

Репутация: 2
Всего: 2



Цитата(Klin @  24.3.2009,  02:23 Найти цитируемый пост)
Насчет по умнее не знаю, но что-то мне подсказывает, что не обязательно использовать стандартный заголовок - уж как-то много "страховок" используется. Имхо намного "приятней" будет использовать свой, при этом на OnMouseDown заголовка поставить

Честно, я не знаю, как сделать свой заголовок... 
PM MAIL   Вверх
Klin
Дата 24.3.2009, 16:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1938
Регистрация: 7.10.2002
Где: Краснодар

Репутация: 20
Всего: 25



Я же говорю, как это сделать. Заголовком может быть все, что душе угодно. Хоть TPanel, хоть рисунок, лишь бы пользователю было бы понятно. Основная его функция - сообщить пользователю, что это за окно и реализация перемещения, которую я уже привел выше.


--------------------
Я человек - попробуйте обвинить меня за это.
PM MAIL   Вверх
LionMdS
Дата 30.3.2009, 02:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 40
Регистрация: 28.3.2009

Репутация: нет
Всего: нет



Поставь в опциях формы Autosize=true и сколко не клацай размер она не изменит!!!
PM MAIL   Вверх
Klin
Дата 30.3.2009, 02:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1938
Регистрация: 7.10.2002
Где: Краснодар

Репутация: 20
Всего: 25



LionMdS, проблема была в сворачивании, а не в изменении размеров окна. А при BorderStyle = bsDialog или некоторым другим параметрам, не требует использования Autosize.


--------------------
Я человек - попробуйте обвинить меня за это.
PM MAIL   Вверх
Страницы: (2) [Все] 1 2 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++ Builder"
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по С++ Builder обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Настоятельно рекомендуем заглянуть в DRKB (Delphi Russian Knowledge Base) - крупнейший в рунете сборник материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C++ Builder | Следующая тема »


 




[ Время генерации скрипта: 0.0938 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.