Главная страница
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
14-1126207075
LanPlayer
2005-09-08 23:17
2005.10.02
Игра для LAN


1-1126181305
JTAG
2005-09-08 16:08
2005.10.02
Как можно узнать открыт файл или нет?


14-1126184463
Prohodil Mimo
2005-09-08 17:01
2005.10.02
Кто может помоч с приобретенийем мыши?


14-1125986780
Igorek
2005-09-06 10:06
2005.10.02
За что мы любим США


3-1124349223
dest81
2005-08-18 11:13
2005.10.02
Как сделать архив базы данных