![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Область изображения [D7, WinXP]
Дмитрий_05 © (2005-09-09 16:40:00)У меня на Form.Canvas-е нарисовано изображение, как мне сделать чтобы при наведении на него курсором изменялся курсор(т.е. событие MouseEnter отловить как-то и там поменять курсор) и еще отловить событие OnClick? Было бы изображение в Image, то тут все понятно, а вот как быть с Form.Canvas. Отлавливать событие Form.MouseMove и в нем каждый раз проверять координаты курсора, не над изображением ли курсор, мне кажется не очень хороший вариант... Можно ли какнибудь еще это делать? Какнибудь задать наподобие области, или что-то в этом роде, или еще как...
Дмитрий_05 (2005-09-11 15:46:00) [1]нет, не буду... хочу его наложить сверху уже нарисованного, а сам он будет прозрачным...
Fenik (2005-09-11 12:08:00) [2]
> от TWinControl.
Точнее от TCustomControl, т.к. рисовать на нем будешь.
Fenik (2005-09-11 12:07:00) [3]Зависит от того, какие задачи он выполняет.
Можно от TGraphicControl, а можно от TWinControl.
Дмитрий_05 (2005-09-11 00:12:00) [4]А от чего мне наследовать компонент? От какого класса?
Fenik (2005-09-10 18:24:00) [5]Делай компонент (или возьми тот же PaintBox), а у него меняй свойство Cursor.
Дмитрий_05 (2005-09-10 16:49:00) [6]никак так нельзя сделать???
Дмитрий_05 (2005-09-10 13:23:00) [7]Или вообще сделать чтобы он создавался динамически... Т.е. сделать по краю формы как бы окаймовку...
Дмитрий_05 (2005-09-09 21:27:00) [8]Может написать какойнибудь компонент, который будет как Image, но чтобы в него ничего нельзя было вставить, в смысле изображения и т.д... Просто чтобы определял область и все...
DiamondShark (2005-09-09 20:35:00) [9]Волшебства не бывает.
Отслеживание мыши всё равно сводится в конечном счёте к анализу координат при каждом событии от мыши.
Просто может быть упрятано в разное количество обёрток.
Дмитрий_05 (2005-09-09 19:38:00) [10]А как надо изменять размеры мышкой такую форму? Подскажи пожалуйста...
Digitman (2005-09-09 17:30:00) [11]что-то я не соображу - при чем здесь nc- (non-client area) сообщения ?
Дмитрий_05 (2005-09-09 17:26:00) [12]Может это еще как-то делается... У меня форма не прямоугольная(некоторые регионы вырезаны) и на Canvas-е прорисованы изображения, и мне надо как-то изменять ее размеры мышкой... При обработке WMNCHitTest почему-то не получается ничего... Вот код, тестовый код:
Rgn: Cardinal;
procedure WMNCHitTest(var Message: TWMNCHitTest); message wm_NCHitTest;
procedure TForm1.FormCreate(Sender: TObject);
begin
Rgn:=CreateEllipticRgn(0, 0, Width, Height);
SetWindowRgn(Form1.Handle, Rgn, true);
end;
procedure TForm1.WMNCHitTest(var Message: TWMNCHitTest);
var
P: TPoint;
R: TRect;
B: Integer;
begin
inherited;
with Message do
if Result = HTCLIENT then
Result := HTCAPTION
else begin
P := Point(XPos, YPos);
R := BoundsRect;
if PtInRect(R, P) then begin
B := BorderWidth;
InflateRect(R, -B, -B);
if not PtInRect(R, P) then begin
if P.X < R.Left then
Result := HTLEFT
else if P.X > R.Right then
Result := HTRIGHT;
if P.Y < R.Top then
if Result = HTLEFT then
Result := HTTOPLEFT
else if Result = HTRIGHT then
Result := HTTOPRIGHT
else
Result := HTTOP
else if P.Y > R.Bottom then
if Result = HTLEFT then
Result := HTBOTTOMLEFT
else if Result = HTRIGHT then
Result := HTBOTTOMRIGHT
else
Result := HTBOTTOM;
end;
end;
end;
end;
Может посоветуете чегонибудь? Заранее спасибо!
Digitman (2005-09-09 16:49:00) [13]
> Отлавливать событие Form.MouseMove и в нем каждый раз проверять
> координаты курсора, не над изображением ли курсор, мне кажется
> не очень хороший вариант
как бы тебе ни казалось, но при данных условиях это единственно возможный и верный вариант.