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

Вниз

Как изменить размер формы если ее BorderStyle= bsNone   Найти похожие ветки 

 
kofman ©   (2002-08-24 00:11) [0]

Здравствуйте Мастера. Вот такая задача. Есть форма BorderStyle которой установлен в bsNone. На форме лежит TImage выравненный по клиенской части формы. Вопрос такой, как в run-time потянув за край имэйджа изменить размер формы?


 
Almaz ©   (2002-08-24 03:10) [1]

Вам следует обрабатывать сообщение WM_NCHITTEST - оно отвечает за то, как система обработает нажатие кнопки мыши на форме. Просто "заставьте" систему видеть рамку окна. В приведенном ниже примере форма имеет BorderStyle = bsNone, однако правый край формы ведет себя как будто там есть рамка:


type
TForm1 = class(TForm)
private
procedure WMNCHitTest(var Message: TWMNCHitTest); message WM_NCHITTEST;
...
end;
...

procedure TForm1.WMNCHitTest(var Message: TWMNCHitTest);
var
Pt: TPoint;
begin
inherited;
with Message do
begin
Pt := ScreenToClient(Point(XPos, YPos));
// 4 - толщина "рамки"
if Pt.x > Width - 4 then Message.Result := HTRIGHT;
...
end;
end;


Возвращая значения HTLEFT, HTBOTTOMRIGHT и т.д. можно имитировать рамку с любой стороны или угла окна.

Удачи.


 
anod ©   (2002-08-24 12:56) [2]

А если программа на ВинАпи

По-моему я не правильно возвращаю значение, потому что ничего не происходит.

WM_NCHitTest: begin
Pt := Mouse.CursorPos;
if (Pt.x > plWidth - 4)and(Pt.y > plHeight - 4) then Result := LongBool(HTBOTTOMRIGHT);
end;


 
Diamond Cat ©   (2002-08-24 20:14) [3]

можно использовать setwindowpos


 
anod ©   (2002-08-24 22:51) [4]

ТОЛЬКО КАК?


 
Almaz ©   (2002-08-27 02:01) [5]


> anod © (24.08.02 12:56)
> А если программа на ВинАпи
>
> По-моему я не правильно возвращаю значение, потому что ничего
> не происходит.

По-моему вы не правильно вычисляете условие - Mouse.CursorPos вернет вам позицию мышм в координатах экрана, а вам нужно в координатах окна. Т.е. вам следует вычесть из значений Mouse.CursorPos координаты левого верхнего угла окна.

p.s. Если вы пишите на WinAPI, то что в программе делает объект TMouse ?

Удачи.



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

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

Наверх




Память: 0.48 MB
Время: 0.011 c
1-14063
Danco
2002-08-24 18:52
2002.09.05
Использование PrintDialog


8-14184
Antrax
2002-04-29 08:46
2002.09.05
Иконки


14-14283
kull
2002-08-09 01:44
2002.09.05
Какой рост у Дженифер Лопес?


1-14103
Gamar
2002-08-23 16:07
2002.09.05
Над каким компонентом отпущена кнопка мыши?


4-14333
eruc
2002-07-04 19:00
2002.09.05
Какое ОКНО Было АКТИВНО ?