Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2005.02.20;
Скачать: CL | DM;

Вниз

Перетаскивание формы за Image   Найти похожие ветки 

 
Dmitry_04   (2005-02-02 17:35) [0]

Я тут в интернете нашел несколько способов по перетаскиванию формы за Image:

Способ №1

private
procedure WMNCHITTEST(var M:TWMNCHitTest); message WM_NCHITTEST;
...
procedure TForm1.WMNCHITTEST(var M: TWMNCHitTest);
begin
 inherited;
 if M.Result = htClient then
   M.Result := htCaption;
end;


Способ №2

procedure TForm1.Image1MouseDown(Sender: TObject; Button: TMouseButton;
 Shift: TShiftState; X, Y: Integer);
const
SC_DragMove = $F012;
begin
ReleaseCapture;
perform(WM_SysCommand, SC_DragMove, 0);
end;


Способ №3

procedure TForm1.Image1MouseDown(Sender: TObject; Button: TMouseButton;
 Shift: TShiftState; X, Y: Integer);
begin
if( ssLeft in Shift )then begin
 ReleaseCapture;
 SendMessage(Handle, WM_SYSCOMMAND, 61458, 0);
end;
end;


Все способы работают... Но я никак не пойму какой из них лучше(менее тормознутый). Тут есть еще небольшая проблема с первым способом, он перехватывает сообщения OnMouseDown..:( И у меня есть на форме кнопки на основе Image, они не нажимаются... Так что остается 2-й и 3-й или 1-й если там как-нибудь чтонибудь изменить :) Что посоветуете?


 
Shirson ©   (2005-02-02 17:36) [1]

Я способ №2 юзаю.


 
Dmitry_04   (2005-02-02 17:37) [2]

Мне кстати тоже так кажется что второй лучше :)


 
DVM ©   (2005-02-02 17:39) [3]

2) и 3) - это одно и то же.:)
Самый гибкий способ - 1)


 
remb   (2005-02-02 20:14) [4]

Все способы имеют проблемы со сдвиганием формы в самый верх эрана.


 
Dmitry_04   (2005-02-02 20:48) [5]

Точно... я сейчас попробовал и заметил... Как быть?


 
grom   (2005-02-02 20:57) [6]

var
f: boolean;
xx,yy: integer;

procedure TForm1.Image1MouseDown(Sender: TObject; Button: TMouseButton;
 Shift: TShiftState; X, Y: Integer);
begin
f := true;
xx := x;
yy := y;
end;

procedure TForm1.Image1MouseUp(Sender: TObject; Button: TMouseButton;
 Shift: TShiftState; X, Y: Integer);
begin
f := false;
end;

procedure TForm1.Image1MouseMove(Sender: TObject; Shift: TShiftState; X,
 Y: Integer);
begin
if  not f then exit;
Left := Left + x - xx;
Top := Top + y - yy;
end;



Страницы: 1 вся ветка

Текущий архив: 2005.02.20;
Скачать: CL | DM;

Наверх




Память: 0.45 MB
Время: 0.039 c
14-1107244946
Jaxtor
2005-02-01 11:02
2005.02.20
Запуск CGI приложения и обработка его результата


1-1107468100
Назаров Евгений
2005-02-04 01:01
2005.02.20
чтение из Excel таблиц в фоновом режиме


14-1107349002
Nifrit
2005-02-02 15:56
2005.02.20
проблема с Com портом


1-1107755628
Vovka_the_Carrot1
2005-02-07 08:53
2005.02.20
Печать Chart


14-1106808021
Kerk
2005-01-27 09:40
2005.02.20
Outlook Express





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский