Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Как сделать, чтобы форму нельзя было перемещать? 
:(
    Опции темы
Evgesha
Дата 2.7.2005, 00:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



smile Хочу сделать чтобы форма была фиксированая и нельзя было ее перемещать. Хотелось чтобы бордюр оставлся. Если можно пример с кодом. Зарание благодарю.
--------------------
Все это хорошо, а как дальше жить!!!
PM MAIL   Вверх
BreakPointMAN
Дата 2.7.2005, 11:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Смотри в сторону следующих Properties формы:

BorderStyle - установить в, скажем, bsSingle, чтобы нельзя было изменять размеры формы,

BorderIcons - установить biMaximize в false, дабы разворачивать на весь экран было ее нельзя, ну и

FormStyle - в fsStayOnTop, если не хочешь, чтоб она двигалась.

А вообще, RTFM: "Программирование с C++ Builder" © А.Я. Архангельский и, в конце концов, хелп встроенный...


--------------------
"Разруха не в клозетах, а в головах." © Ф.Ф. Преображенский (М.Булгаков, "Собачье сердце")
PM WWW ICQ   Вверх
codelord
Дата 2.7.2005, 11:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 777
Регистрация: 7.5.2005
Где: ты моя темноглаза я где?!

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



BreakPointMAN
Цитата(BreakPointMAN @ 2.7.2005, 11:11)
FormStyle - в fsStayOnTop, если не хочешь, чтоб она двигалась.

c чего ты это взял что она не будет двигаться.??

Если не смущает наверное один из самых не оптимальных способов, но в голову что-то больше не пришло ничего.
Смысл в том, чтобы в событии формы onCanResize вставить Abort(); а в один из таймеров запихнуть текущее положение формы, вот и все. Но таймер выстави эдак на 50 мсек. Только пробовал, не двигается. Без таймера двигается маленькими шажечками. А по поводу размеров,
BreakPointMAN вроде все правильно говорит. smile


--------------------
Доступен поиск по исходным кодам в GOOGLE.
http://www.google.com/codesearch
PM MAIL   Вверх
Adil'
Дата 2.7.2005, 12:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Можно еще Caption у формы убрать, тогда и перемещать не за что будет.


--------------------
Удачи
PM MAIL WWW   Вверх
Adil'
Дата 2.7.2005, 12:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



А можно красивее - добавить обработчик сообщения WM_NCLBUTTONDOWN с примерно таким содержимым:
Код
void __fastcall TForm1::OnNCLBTNDOWN(TMessage& Msg)
{
  if(Msg.WParam!=HTCAPTION)
    Msg.Result=DefWindowProc(Handle,Msg.Msg,Msg.WParam,Msg.LParam);
}



--------------------
Удачи
PM MAIL WWW   Вверх
MaximNR
Дата 2.7.2005, 14:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



ещё можно отлавливать сообщение, которое отвечает за собственно перемещение окна ченить типа WM_MOVE, так же вполне возможно, что есть сообщение, которое тестирует возможность перемещения окна в определенное место.
PM   Вверх
Evgesha
Дата 3.7.2005, 22:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Всем спосибо за помощь, но
void __fastcall TForm1::OnNCLBTNDOWN(TMessage& Msg)
{
if(Msg.WParam!=HTCAPTION)
Msg.Result=DefWindowProc(Handle,Msg.Msg,Msg.WParam,Msg.LParam);
}
мне кажется красивей сегодня попробую
--------------------
Все это хорошо, а как дальше жить!!!
PM MAIL   Вверх
Evgesha
Дата 3.7.2005, 23:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Только вариант от codelord работает.

А вот что я нашел

smile

Ловим WM_NCHITTEST и внутри функции-обработчика этого сообщения пишем:

if(Message.Result == HTCAPTION) Message.Result = HTNOWHERE;

но как ловить WM_NCHITTEST
--------------------
Все это хорошо, а как дальше жить!!!
PM MAIL   Вверх
Adil'
Дата 4.7.2005, 10:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата(Evgesha @ 3.7.2005, 23:47)
Только вариант от codelord работает.
Ну, не знаю, я свой варинт перед отправкой проверял.
Хотя, судя по
Цитата(Evgesha @ 3.7.2005, 23:47)
но как ловить WM_NCHITTEST
ты наверно и WM_NCLBUTTONDOWN не ловил, а просто вставил OnNCLBTNDOWN(TMessage& Msg)? Тогда, конечно, не будет работать.
Как добавить обработчик сообщения виндоуз:
1. Идем в ClassExplorer (Меню View->ClassExplorer).
2. Находим в списке классов проекта нужный класс - пусть это будет класс формы TForm1
3. Щелкаем по нему правой мышкой. В появившемся попуп-меню выбираем пункт New Method. Появляется диалог "Add Method".
4. В поле Method Name пишем название функции-обработчика сообщения - просто имя функции на свой вкус. Пусть это будет OnNCLBTNDOWN
5. Поле Add to Class оставляем как есть (TForm1)
6. В поле Arguments пишем принимаемый обработчиком парметр TMessage& Msg В принципе, для некоторых сообщений определены соответствующие типы - например, для WM_PAINT можно написать TWMPaint& Msg. Можно даже сврой тип определить. В любом случае - если не знаете конкретно, то пишите TMessage - не промахнетесь.
7. В группе Method type оставляем отмеченным Function, а в поле Function result пишем void.
8. В группе Visibility оставляем отмеченным Protected, хотя можно любой дрогой, кроме Published
9. В группе Directives лучше отметить только __fastcall(4) - хотя это и необязательно, а вот отметить Message handler нужно обзательно и в соответствующем полк выбрать (или набить руками) нужное сообщение виндоуз. Пусть это будет WM_NCLBUTTONDOWN.
10. В группе Implementation details остваляем все, как есть, пустым, а имя файла должно соответствовать файлу нашего класса-формы.
11. После описанных действий (точнее - после п. 4) станут доступны кнопки Ok и Apply - жмем Ok
В результате в файлы *.h и *.cpp будет добавлен следующий код.
Код
//*.h:
class TForm1 : public TForm
{
...
protected:
BEGIN_MESSAGE_MAP
VCL_MESSAGE_HANDLER(WM_NCLBUTTONDOWN, TMessage, OnNCLBTNDOWN)
END_MESSAGE_MAP(TForm)
void __fastcall OnNCLBTNDOWN(TMessage& Msg);
};
...
//*.cpp:
void __fastcall TForm1::OnNCLBTNDOWN(TMessage& Msg)
{
  //TODO: Add your source code here
}
Done.
Конечно, можно было и не лезть в класс-эксплорер, а просто набить этот код руками - результат одинаковый.
Добавлено @ 10:26

З.Ы. WM_NCHITTEST тоже можно, но мне кажется это более ресурсоёмким способом - эти сообщения посылаются гораздо чаще, чем WM_NCLBUTTONDOWN

Это сообщение отредактировал(а) Adil' - 4.7.2005, 10:23


--------------------
Удачи
PM MAIL WWW   Вверх
codelord
Дата 4.7.2005, 11:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 777
Регистрация: 7.5.2005
Где: ты моя темноглаза я где?!

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



Adil', я попробовал твой способ, все отлично работает, и это конечно гораздо лучше чем предложил я.


--------------------
Доступен поиск по исходным кодам в GOOGLE.
http://www.google.com/codesearch
PM MAIL   Вверх
Evgesha
Дата 4.7.2005, 23:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Спосибо Adil' . Особое спасибо за разъеснение, я действительно не отлавливал событие.
smile
--------------------
Все это хорошо, а как дальше жить!!!
PM MAIL   Вверх
codelord
Дата 20.7.2005, 13:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 777
Регистрация: 7.5.2005
Где: ты моя темноглаза я где?!

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



Хе оказывается достаточно выставить свойство Align в alCustom smile


--------------------
Доступен поиск по исходным кодам в GOOGLE.
http://www.google.com/codesearch
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++ Builder"
Rrader

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

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

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

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


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

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


 




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


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

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