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

Вниз

Область изображения   Найти похожие ветки 

 
Дмитрий_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;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.038 c
1-1126287500
Pavel__
2005-09-09 21:38
2005.10.02
А что представляет из себя переменная типа string


3-1124526000
Dell3r
2005-08-20 12:20
2005.10.02
Помогите составить запрос


14-1126214784
partizan
2005-09-09 01:26
2005.10.02
Задачка по теории вероятности


2-1123411165
panov
2005-08-07 14:39
2005.10.02
Правила конференции.


14-1126505206
КаПиБаРа
2005-09-12 10:06
2005.10.02
Задачка про деньги