Форум: "Основная";
Текущий архив: 2005.10.02;
Скачать: [xml.tar.bz2];
ВнизОбласть изображения Найти похожие ветки
← →
Дмитрий_05 (2005-09-09 16:40) [0]У меня на Form.Canvas-е нарисовано изображение, как мне сделать чтобы при наведении на него курсором изменялся курсор(т.е. событие MouseEnter отловить как-то и там поменять курсор) и еще отловить событие OnClick? Было бы изображение в Image, то тут все понятно, а вот как быть с Form.Canvas. Отлавливать событие Form.MouseMove и в нем каждый раз проверять координаты курсора, не над изображением ли курсор, мне кажется не очень хороший вариант... Можно ли какнибудь еще это делать? Какнибудь задать наподобие области, или что-то в этом роде, или еще как...
← →
Digitman © (2005-09-09 16:49) [1]
> Отлавливать событие Form.MouseMove и в нем каждый раз проверять
> координаты курсора, не над изображением ли курсор, мне кажется
> не очень хороший вариант
как бы тебе ни казалось, но при данных условиях это единственно возможный и верный вариант.
← →
Дмитрий_05 (2005-09-09 17:26) [2]Может это еще как-то делается... У меня форма не прямоугольная(некоторые регионы вырезаны) и на 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 17:30) [3]что-то я не соображу - при чем здесь nc- (non-client area) сообщения ?
← →
Дмитрий_05 (2005-09-09 19:38) [4]А как надо изменять размеры мышкой такую форму? Подскажи пожалуйста...
← →
DiamondShark © (2005-09-09 20:35) [5]Волшебства не бывает.
Отслеживание мыши всё равно сводится в конечном счёте к анализу координат при каждом событии от мыши.
Просто может быть упрятано в разное количество обёрток.
← →
Дмитрий_05 (2005-09-09 21:27) [6]Может написать какойнибудь компонент, который будет как Image, но чтобы в него ничего нельзя было вставить, в смысле изображения и т.д... Просто чтобы определял область и все...
← →
Дмитрий_05 (2005-09-10 13:23) [7]Или вообще сделать чтобы он создавался динамически... Т.е. сделать по краю формы как бы окаймовку...
← →
Дмитрий_05 (2005-09-10 16:49) [8]никак так нельзя сделать???
← →
Fenik © (2005-09-10 18:24) [9]Делай компонент (или возьми тот же PaintBox), а у него меняй свойство Cursor.
← →
Дмитрий_05 (2005-09-11 00:12) [10]А от чего мне наследовать компонент? От какого класса?
← →
Fenik © (2005-09-11 12:07) [11]Зависит от того, какие задачи он выполняет.
Можно от TGraphicControl, а можно от TWinControl.
← →
Fenik © (2005-09-11 12:08) [12]
> от TWinControl.
Точнее от TCustomControl, т.к. рисовать на нем будешь.
← →
Дмитрий_05 (2005-09-11 15:46) [13]нет, не буду... хочу его наложить сверху уже нарисованного, а сам он будет прозрачным...
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2005.10.02;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.005 c