как переместить форму без полей? Пробовал искать в интернете, но ничего. Большое спасибо.
Переместить форму без рамки
comment
может быть здесь: delphi.about.com/od/windowsshellapi/a/dragnocaption. htm
- person philnext   schedule 06.06.2012
comment
Дубликат C++Builder: создание TForm с BorderStyle bsNone, который, тем не менее, можно перемещать и изменять размер — этот код для C++Builder, но это все тот же VCL! Переход на Delphi должен быть тривиальным.
- person David   schedule 07.06.2012
Ответы (2)
Вы можете перетаскивать форму, используя любой содержащийся элемент управления, включая саму себя.
Используя следующий пример, вы можете переместить форму, щелкнув ее холст и перетащив ее. Вы можете сделать то же самое с панелью в форме, поместив тот же код в событие MouseDown панели, что позволит вам создать свою собственную панель псевдозаголовка.
procedure TForm1.FormMouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
const
SC_DRAGMOVE = $F012;
begin
if Button = mbLeft then
begin
ReleaseCapture;
Perform(WM_SYSCOMMAND, SC_DRAGMOVE, 0);
end;
end;
person
Bruce McGee
schedule
06.06.2012
Если вы имеете в виду перетаскивание окна мышью, вы можете переопределить WM_NCHITTEST
обработку сообщений и вернуть HTCAPTION
для области перетаскивания. В приведенном ниже примере окно будет перетаскиваться в пределах верхних 30 пикселей:
type
TForm1 = class(TForm)
private
protected
procedure WMNCHitTest(var Message: TWMNCHitTest); message WM_NCHITTEST;
end;
..
procedure TForm1.WMNCHitTest(var Message: TWMNCHitTest);
var
Pt: TPoint;
begin
Pt := ScreenToClient(SmallPointToPoint(Message.Pos));
if Pt.Y < 30 then
Message.Result := HTCAPTION
else
inherited;
end;
person
Sertac Akyuz
schedule
06.06.2012
@David: В последнее время я немного скептически отношусь к этому подходу, потому что, по сути, вы сообщаете ОС, что вся форма является заголовком окна, что на самом деле может быть семантически неверным. (Ну, в коде Сертака, возможно, первые 30 пикселей являются на самом деле заголовком, но в целом это может быть не так.)
- person Andreas Rejbrand; 07.06.2012
@andreas У вас есть конкретная причина отклонить это? Каковы недостатки? Это стандартный подход.
- person David Heffernan; 07.06.2012
@David: Нет, никаких конкретных недостатков я не могу придумать.
- person Andreas Rejbrand; 07.06.2012
Альтернативой является реализация обработчика OnMouseDown, в котором вы устанавливаете состояние перемещения и сохраняете положение мыши, обработчика OnMouseMove, в котором вы перемещаете форму, и обработчика OnMouseUp, в котором вы очищаете состояние перемещения. Это не так много работы. Например, преимущество заключается в том, что вы сами решаете, на сколько пикселей должна переместиться мышь, прежде чем вы начнете движение. Иногда это может быть желательно.
- person bjaastad_e; 07.06.2012
Я пытаюсь использовать этот метод и обнаружил, что не могу закрыть форму с помощью кнопки X. Итак, есть один минус. Я полагаю, я мог бы просто нажать крошечную кнопку и написать код, конечно.
- person Craig Stevensson; 16.10.2014
@Craig - сначала вызовите
inherited
, измените результат, только если это «HTCLIENT». В качестве альтернативы измените область вмешательства, чтобы исключить кнопки.
- person Sertac Akyuz; 17.10.2014