Перетаскивать окно не за заголовок

 

Как сделать окно, которое перетаскивается не за заголовок
(caption), а за все поле.

Нужно обрабатывать сообщение WM_NCHITTEST:

TForm1 = class(TForm)
...
private
...
procedure WMNCHitTest(var M: TWMNCHitTest); message wm_NCHitTest;
...
end;

...

procedure TForm1.WMNCHitTest(var M: TWMNCHitTest);
begin
inherited; { вызов унаследованного обработчика }
if M.Result = htClient then{ Мышь сидит на окне? }
M.Result := htCaption; { Если да - то пусть Windows думает,
что мышь на caption bar }

end;
...

Окно можно сделать вообще без caption.

Ввод в Edit только чисел

procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
begin
if not (Key in ['0'..'9', ',']) then Key := #0;
end;

В данном примере не обрабатывается нажатие «Backspace».
В следующем коде это исправлено.

procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
begin
if not (Key in ['0'..'9', ',' , #8]) then Key := #0;
end;