Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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
1-1126092225
oSa
2005-09-07 15:23
2005.10.02
Обработка математических выражений


1-1126013597
QWe
2005-09-06 17:33
2005.10.02
Как сделать одно fsStayOnTop окно выше такого же другого ?


1-1126533067
Surok
2005-09-12 17:51
2005.10.02
DBStringGrid и перенос слов


1-1125926628
Mishenka
2005-09-05 17:23
2005.10.02
Копирование текста в Clipboard


1-1126619099
Дмитрий_05
2005-09-13 17:44
2005.10.02
Активный - неактивный компонент





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский