Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Как изменить свойство BorderStyle [D7, WinXP]


ArtemESC ©   (2005-09-18 21:16:00) 

Как изменить это свойство в окне с некоторым Hwnd.

Вообще-то мне надо аналогичное следующему:
      BorderStyle := bsNone;


Nick Denry   (2005-09-19 10:23:00) [1]

Во избежание.

Угу. Учту обязательно, а то и правда нехорошо может получится.

написал пару приложений :)

прикольно :)


Игорь Шевченко   (2005-09-19 01:09:00) [2]

Nick Denry ©   (19.09.05 00:55) [3]


> Честно? Нет, видел в одном примере....


Я тебе совет дам - всегда перед постом в форум убедись, что решение опробовано лично тобой. Во избежание.


> а что должно быть вместо?


А вот мне стало интересно, и я написал пару приложений :) Первое из формы с кнопкой, по кнопке вызывается Close основной формы.

Второе ищет окно первого, заносит его в переменную FWnd и выполняет  последовательность действий:

var
 RClient, R: TRect;
begin
 Windows.GetClientRect(FWnd, RClient);
 GetWindowRect(FWnd, R);
 R.Right := R.Left + RClient.Right;
 R.Bottom := R.Top + RClient.Bottom;
 SetWindowLong(FWnd, GWL_STYLE, GetWindowLong(FWnd, GWL_STYLE) and
   not WS_CAPTION);
 SetWindowPos (Fwnd, 0, R.Left, R.Top, R.Right - R.Left, R.Bottom - R.Top,
   SWP_NOZORDER or SWP_DRAWFRAME);


Манипуляции с прямоугольником мне потребовались для того, чтобы окно сохраняло свой размер, так как если оставить только прямоугольник WindowRect, то окно увеличится в размерах (как минимум, по высоте). Я специально не стал убирать возможность изменения размеров окна мышкой.

Ключевой фукнцией здесь является SetWindowPos с указанными флажками, убери этот вызов и ты сразу увидишь, что вызов SetWindowLong не дает никакого видимого эффекта.

Кстати, от такого изменения стиля окна можно защититься в целевом приложении, обрабатывая сообщения WM_STYLECHANGING/WM_STYLECHANGED.

Удачи!


Nick Denry   (2005-09-19 00:55:00) [3]

Честно? Нет, видел в одном примере....

а что должно быть вместо?


Игорь Шевченко   (2005-09-18 23:42:00) [4]


> SetWindowLong(YourWindowHandle, GWL_STYLE, GetWindowLong(YourWindowHandle,
>  GWL_STYLE) xor WS_BORDER);


Сам-то пробовал ?


Nick Denry   (2005-09-18 21:48:00) [5]

Если при создании, то стиль WS_POPUP,

Если при каком либо действии тоесть уже после создания, то

SetWindowLong(YourWindowHandle, GWL_STYLE, GetWindowLong(YourWindowHandle, GWL_STYLE) xorWS_BORDER);


Наверх

Титульная страница Поиск, карта сайта Написать письмо