|  | 
 
 | 
| 
 | |||||||
| Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны | 
|  | 
|  | Опции темы | Поиск в этой теме | Опции просмотра | 
| 
			 
			#1  
			
			
			
			
		 | |||
| 
 | |||
|  Форма без заголовка окна... Если свойство формы в bsNone, то можно чтобы форму можно было бы перетаскивать без панели вверху окна.  Так, обработать это OnMouseMove: Код: ReleaseCapture; Perform(WM_SYSCOMMAND, $F012, 0) А если, например, нажав на TImage перетаскивать форму? Так не получается почему. Помогите, как сделать? | 
| 
			 
			#2  
			
			
			
			
		 | ||||
| 
 | ||||
|   Я обычно делаю так -  Код: ...
var
  Form1: TForm1;
CursorPos : TPoint;
  FormPos : TPoint;
   Drag : boolean;
implementation
{$R *.dfm}
...
procedure TForm1.OnIdle(Sender: TObject; var Done: boolean);
var Point: TPoint;
begin
  if Drag then
  begin
    GetCursorPos(Point);
    Left := FormPos.X + Point.X - CursorPos.X;
    Top := FormPos.Y + Point.Y - CursorPos.Y;
  end;
end;
procedure TForm1.Image1MouseDown(Sender: TObject;
  Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
 if Button = mbLeft then
  begin
    Drag := True;
    FormPos.X := Left;
    FormPos.Y := Top;
    GetCursorPos(CursorPos);
  end;
end;
procedure TForm1.Image1MouseUp(Sender: TObject;
  Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
 if Button = mbLeft then Drag := False;
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
Application.OnIdle := OnIdle;
end;
 | 
| 
			 
			#3  
			
			
			
			
		 | ||||
| 
 | ||||
|   Цитата: 
 Код: procedure TForm1.Image1MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); begin ReleaseCapture; Perform(WM_SYSCOMMAND, $F012, 0); end; | 
| 
			 
			#4  
			
			
			
			
		 | ||||
| 
 | ||||
|   Еще можно переопределить обработчик событий окна, и тогда ВСЕ сообщения будут идти сначала в него, а в нем ты уже будешь вызывать старые после отработки нужных действий. Если надо: Код: var 
   old: pointer;
   fl:boolean=fasle;
...
function MyWNDProc(h: hwnd; msg, wparam, lparam: longint): longint; stdcall;
begin
  case msg of
WM_LBUTTONDOWN:
  begin
    // сохраняем координаты мыши, ставим глобальный флаг перетаскивания fl:=true;
  end;
WM_MouseMove:
  begin
   // если fl то перетаскиваем - в глобальных переменных храним старые значения X и Y,
   // получаем новые, и сдвигаем окно на dX и dY и переписываем старые X и Y новыми
  end;
WM_LBUTTONUP:
  begin
   // fl:=false;
  end;
  end;
  result := CallWindowProc(old, h, msg, wparam, lparam);
end;
// при создании формы:
integer(old) := GetWindowLong(handle, GWL_WNDPROC);
SetWindowlong(handle, GWL_WNDPROC, integer(@MyWNDProc)); | 
| 
			 
			#5  
			
			
			
			
		 | |||
| 
 | |||
|   Спасибо большое! ryderx34, Bargest, deltas благодарю   |