Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Область изображения [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 и в нем каждый раз проверять
> координаты курсора, не над изображением ли курсор, мне кажется
> не очень хороший вариант


как бы тебе ни казалось, но при данных условиях это единственно возможный и верный вариант.


Наверх

Титульная страница Поиск, карта сайта Написать письмо