Подписаться на RSS рассылку
Главная » Статьи по Delphi » Программа и интерфейс » Изменение размеров формы при BorderStyle=bsNone

Изменение размеров формы при BorderStyle=bsNone

Автор: Борисов С. А.

Часто бывает необходимо, например, если программа использует скины, установить свойство формы BorderStyle = bsNone, но при этом необходимо сохранить возможность изменения размеров окна программы. Вот код для реализации этой функции:

private
  procedure HitTest(var Msg: TWMNcHitTest); message WM_NCHITTEST;

...

procedure TForm1.HitTest(var Msg: TWMNcHitTest);
var X, Y: Integer;
begin
  inherited;

// получаем координаты мыши относительно формы
  X := Msg.XPos - Left;
  Y := Msg.YPos - Top;
  if X <= 5 then // если мышь у левого края формы
  begin
    if Y <= 5 then // если мышь у верхнего края формы
      Msg.Result := HTTOPLEFT
    else
      if Y >= ClientHeight - 5 then
        Msg.Result := HTBOTTOMLEFT // мышь у левого нижнего края
      else
        Msg.Result := HTLEFT;
  end
  else
  begin
    if
Y <= 5 then
    begin
      if X >= ClientWidth - 5 then
        Msg.Result := HTTOPRIGHT // у правого верхнего края
      else
        Msg.Result := HTTOP; // у верхнего края
    end
    else
    begin
      if Y >= ClientHeight - 5 then
      begin
        if X >= ClientWidth - 5 then
          Msg.Result := HTBOTTOMRIGHT // у правого нижнего края
        else
          Msg.Result := HTBOTTOM; // у нижнего края
      end
      else
        if X >= ClientWidth - 5 then
          Msg.Result := HTRIGHT // у правого края
        else
          Msg.Result := HTCAPTION; // внутри формы
    end;
  end;

end;

На заметку: Msg.Result := HTCAPTION можно закоментировать если не нужно, чтобы окно можно было перемещать за поверхность формы.

Коддинг: s-mike

Просмотров: 7373

Обсудить на форуме

0   Спам
(02.06.2011)
4. VeloceRAPTOR
s-mike, красава! Спасибо огромное 8-)

+1   Спам
(11.09.2010)
3. ZuBy
Resize Form

Пример показывает как менять размеры формы если BorderStyle = bsNone, без отрисовки стандартной фокусной "тянучки".
Есть возможность поставить "тянучку" и ей выставить ширину.

Скачать http://www.zubymplayer.com/Source/Resize_Form.rar


0   Спам
(10.09.2010)
2. Миша
Если я кладу на форму Panel1 и в свойствах указываю
Panel1.Align := alClient;

То тут как быть?
Как растянуть?


0   Спам
(22.02.2010)
1. Сергей (Xaker)
А как можно сделать чтобы не сразу изменялись границы формы а сначала появлялся будущий размер (типо бордюра) а потом по отпусканию мыши уже прорисовывалась форма..?
Ответ: Скажу честно - я незнаю. Думаю что както можно. Кстати в настройках ОС есть это, может быть за это ОС отвечает, хотя в некоторых приложениях показывается только контур.


Имя *:
Email:


Код *:

Copyright © 2008-2016 Программирование на Delphi для начинающих и не только

Полнота авторских прав на все материалы, опубликованные на сервере DelphiDevelop.ru принадлежит их авторам

Перепечатка материалов разрешается с указанием авторства и гиперссылки на первоисточник информации

Хостинг от uCoz

Автор проекта: Борисов Сергей

e-mail: save-x@yandex.ru

Связь с администрацией сайта