Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2006.02.19;
Скачать: [xml.tar.bz2];

Вниз

Перенос формы за Client Area (Не глючный способ с WMNCHITTEST)   Найти похожие ветки 

 
Glex ©   (2006-01-08 17:27) [0]

Как сделать возможным перенос формы за Client Area в RunTime?

Во всех FAQ"ах, которые я просмотрел, продемонстрирован способ с подменой в WMNCHITTEST. Этот способ мне не подходит, так как
1) Image"ы на форме исползуются в качестве элементов управления.
2) Программа пишется на CLX, чтобы сделать возможным последующее её портирование на Linux.


 
Glex ©   (2006-01-08 19:10) [1]

ап)

Кстати, почему с OnMouseMove так глючно работает, что и не работает? =))


 
VirEx ©   (2006-01-08 22:14) [2]

ну вот пример с элементом Panel, можешь сделать через Image:
procedure TForm1.PanelMouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
const
SC_DRAGMOVE : Longint = $F012;
begin
ReleaseCapture;
SendMessage(Form1.Handle, WM_SYSCOMMAND, SC_DRAGMOVE, 0);
end;


 
Glex ©   (2006-01-08 22:59) [3]

Спасибо, попробую. Наутро отпишусь. Только у меня такое чувство, что при этом ни форма, ни Image(который alClient) переносится не будут. Если будут, то respect


 
Glex ©   (2006-01-09 13:33) [4]

VirEx

Работает!!!

Подскажи пожалуйста, какие модули нужно включить в uses лист в CLX application, чтобы этот пример заработал? Windows?


 
Glex ©   (2006-01-09 13:37) [5]

uses Windows;

...

______________
[Error] Unit1.pas(33): Undeclared identifier: "WM_SYSCOMMAND"
[Fatal Error] Project1.dpr(5): Could not compile used unit "Unit1.pas"
______________

!!!


 
sniknik ©   (2006-01-09 14:07) [6]

> Windows?
в свете
> 2) Программа пишется на CLX, чтобы сделать возможным последующее её портирование на Linux.
использование виндовых сообщений... не совсем верное решение.

а так uses Messages;


 
Glex ©   (2006-01-09 14:19) [7]

sniknik
Спасибо!!!!

uses Windows, Messages
...
procedure TForm1.Panel1MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
const
SC_DRAGMOVE : Longint = $F012;
begin
Windows.ReleaseCapture;
Windows.SendMessage(HWND(Form1.Handle), WM_SYSCOMMAND, SC_DRAGMOVE, 0);
end;


Теперь компилиуется, но не работает ((
Кто-нибудь знает универсальный способ без использования Windows может?


 
френк   (2006-01-09 15:06) [8]

а смысл приводить THandle к HWND?


 
Glex ©   (2006-01-09 15:25) [9]

френк

Какой THandle? Это в clx.


 
Glex ©   (2006-01-09 15:28) [10]

Form1.Handle - это QOpenScrollViewH.

Так
procedure TForm1.Panel1MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
const
SC_DRAGMOVE : Longint = $F012;
begin
Windows.ReleaseCapture;
Windows.SendMessage(THandle(Form1.Handle), WM_SYSCOMMAND, SC_DRAGMOVE, 0);
end;

тоже не работает(((((


 
sniknik ©   (2006-01-09 15:49) [11]

ну так. если в "бензиновую" машину угля засыпать, тоже не поедет.


 
Glex ©   (2006-01-09 15:59) [12]

sniknik

А где бензин взять?(((
В смысле, как надо?


 
sniknik ©   (2006-01-09 16:14) [13]

линух изучать, его сообщениями(???) пользоваться. я его не знаю настолько чтобы советовать.
но чего точно, так это фунциями из Windows и сообшениями из Messages, точно пользоваться нельзя.  
 
> Кстати, почему с OnMouseMove так глючно работает, что и не работает? =))
???
вот тут действительно интересно а почему? чегож там такого можно написать чтоб неработало? (там же пяти-шести строк хватит... ошибиться негде)


 
Glex ©   (2006-01-09 18:27) [14]

Опа! Заработало!
-----------------

Другой вопрос. Простой, новую тему можно не создавать.

Как получить relative координаты мышки, относительно формы? =))


 
Begin   (2006-01-12 13:52) [15]

ClientToParent
ParentToClient
MouseToClient
etc


 
Glex ©   (2006-01-17 20:39) [16]

procedure TForm1.FormImgMouseMove(Sender: TObject; Shift: TShiftState; X,
 Y: Integer);
begin
if ssLeft in Shift then begin
 Form1.Left:= Mouse.CursorPos.X - X; //Я так понимаю это относительные координаты
 Form1.Top:= Mouse.CursorPos.Y - Y; //
 end;
end;


По непонятной мне причине форма не перемещается. Как исправить код, чтобы всё заработало?


 
sniknik ©   (2006-01-17 22:06) [17]

> По непонятной мне причине форма не перемещается.
у тебя нет "шага" на который сдвигать, т.к. X,Y координаты относительно FormImg, Mouse.CursorPos экранные, и обе одной и тойже точки (только начало координат различается)
а отнимая одно от другого ты вообще получаеш ничего не значащую для тебя цифру (FormImg.Left/Top в экранных координатах... вроде того)

> Как исправить код, чтобы всё заработало?
а говорил работало...? -> [14]

TForm1 = class(TForm)
 ...
private
 InX, InY: integer;
 ...
end;

procedure TForm1.FormImgMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);
begin
 if ssLeft in Shift then begin
   Left:= Left + X - InX;
   Top:= Top + Y - InY;
 end;
end;

procedure TForm1.FormImgMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
 InX:= X;
 InY:= Y;
end;


 
Glex ©   (2006-01-18 08:23) [18]

sniknik
Выручил!!!
Огромное спасибо!!! Респект, млин)))



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

Форум: "Основная";
Текущий архив: 2006.02.19;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.48 MB
Время: 0.058 c
2-1138531757
Evgenius
2006-01-29 13:49
2006.02.19
Hint и как с ними дружить...


2-1138887763
KorD
2006-02-02 16:42
2006.02.19
Ввод данных в поле Edit другой программы


15-1138191869
Pazitron_Brain
2006-01-25 15:24
2006.02.19
CDMA телефон


15-1138371733
AlexXXX
2006-01-27 17:22
2006.02.19
Видеоролик с бегущей строкой


15-1138250776
begin...end
2006-01-26 07:46
2006.02.19
С Днём рождения! 26 января





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский