Как изменить ClientRect формы? - PullRequest
0 голосов
/ 06 декабря 2011

Пожалуйста, обратитесь к другому вопросу здесь: Изменение размера формы без полей из-за ограничений, отличных от дальних краев?

Этот предыдущий вопрос был решен, но у меня есть еще один похожий вопрос. Поскольку я создаю форму пользовательской формы с другой клиентской областью, мне нужно изменить область ClientRect этой формы. Форма имеет какой-то особый рисунок с некоторыми изогнутыми краями и тому подобным, но эта часть не имеет значения. Мне нужно изменить ClientRect формы, чтобы она представляла новую клиентскую область, где разрешено удалять компоненты, и игнорировать все, что находится за пределами этих границ.

(У меня есть форма без полей, я рисую свою собственную рамку, размер которой значительно отличается от стандартной границы окон.)

Это решение как-то изменит способ работы моего предыдущего вопроса, но это будет еще одна тема, которую, я уверен, я выясню самостоятельно, должно быть очень простым. Мне просто нужно правильно установить это в первую очередь.

1 Ответ

6 голосов
/ 06 декабря 2011
type
  TForm1 = class(TForm)
    ..
  private
    procedure WmNCCalcSize(var Msg: TWMNCCalcSize); message WM_NCCALCSIZE;
    ..

..

procedure TForm1.WmNCCalcSize(var Msg: TWMNCCalcSize);
begin
  inherited;
  if Msg.CalcValidRects then begin
    InflateRect(Msg.CalcSize_Params.rgrc[0], -10, -6);
    Msg.Result := 0;
  end;
end;

Пожалуйста, внимательно прочитайте документацию WM_NCCALCSIZE, включая примечания , а также NCCALCSIZE_PARAMS, так как я не уверен, что это то, что выхочу.Но это ваше сообщение ..

...