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

Вниз

---|Ветка была без названия|---   Найти похожие ветки 

 
merfi   (2003-05-31 22:25) [0]

Доброй ночи, великие мастера Delphi. Я к вам вот с каким вопросом: мне нужно создать "невидимые кнопки".
Не много поподробнее: у меня есть картинка, мне нужно сделать так, что при нажатии на определенный участок этой
картинки происходило действие. Как можно описать эту самую область, при нажитии на которую будет совершаться действие.


 
stranger___ ©   (2003-05-31 22:28) [1]

а по координатам ловить никак?


 
Романов Р.В. ©   (2003-05-31 22:35) [2]

кнопки совершенно не нужны см. stranger___ © (31.05.03 22:28)


 
Vulko ©   (2003-05-31 22:39) [3]

У Image усть событие OnMouseMove, которое ловит координаты.

procedure TForm1.Image1MouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
begin
edit1.Text:=inttostr(x);
edit2.Text:=inttostr(y);
end;


Я думаю всё предельно ясно.


 
merfi   (2003-05-31 23:03) [4]

Так-то я тоже сделал, но как можно указать некоторую область, чтобы не запускать цикл for для сравнения каждой координаты этой области


 
jack128 ©   (2003-05-31 23:10) [5]


> чтобы не запускать цикл for для сравнения каждой

Какой цикл??

Для прямоугольной области :

procedure TForm1.Image1MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
if (X < ...) and (X>...) and (Y < ...) and (Y > ...) then
begin
... // Пиши что хочешь
end;
end;


 
merfi   (2003-05-31 23:18) [6]

Согласен, дурак. Ну спасибо, не зря вы мастера своего дела.


 
Palladin ©   (2003-05-31 23:23) [7]

жуть какая


 
Плохой человек   (2003-06-01 00:30) [8]

Я бы к изображению создал цветную маску и по ней определял бы область, на которой мышь, ведь то, что вы предложили годится лишь для прямоугольных областей.


 
jack128 ©   (2003-06-01 11:09) [9]


> Плохой человек (01.06.03 00:30)

Для круговой области
if ((x-x0)*(x-x0)+(y-y0)*(y-y0))<(R*R) then

и вообще для любой фигуры для которой можно описать функцию
function PointInFifure(p : Tpoint) : boolean;


 
Anatoly Podgoretsky ©   (2003-06-01 11:26) [10]

А зачем чего то писать?
Если в системе есть функция PtInRect.
Время что ли некуда девать?


 
Yanis ©   (2003-06-01 11:35) [11]

To merfi
> но как можно указать некоторую область, чтобы не запускать цикл for для сравнения каждой координаты этой области
Можно просто разместить ещё один Image, без картинки, вот и получается определённая область.
Я думаю это самое простое.


 
jack128 ©   (2003-06-01 18:12) [12]


> Anatoly Podgoretsky © (01.06.03 11:26
Для ЛЮБОЙ фигуры, а не для прямоугольника.

Хотя, наверное, в системе есть функция и для любой фигуры(наверное, где нибудь в районе регионов, но лень искать ;-))...


 
Anatoly Podgoretsky ©   (2003-06-01 18:19) [13]

И есть предположение, что невидимые кнопки помогут?


 
Плохой человек   (2003-06-01 18:21) [14]

2 jack128:

По-моему, слишком много усилий. Можно пренебречь ресурсами и сделать такую маску и всё будет гораздо проще.


 
jack128 ©   (2003-06-01 18:42) [15]

Плохой человек (01.06.03 18:21)
С моей сторону усилий и не будет ;-)...
Мы автору предложили варианты, а он уж пусть сам решает.


 
Всеволод Соловьёв ©   (2003-06-01 19:24) [16]

Удалено модератором
Примечание: Личная переписка


 
Diamond Cat ©   (2003-06-01 20:01) [17]

есть такая функция как ptinregion в отличии от PtInRect реально высчитывает находится-ли точка внутри определенной фигуры, причем фигура может быть произвольной, единственно что слегка заморачивает так это то , что приходиться создавать этот самый регион, но это куда легче чем по циклу высчитывать попадает-ли точка в фигуру


 
Palladin ©   (2003-06-01 22:45) [18]

а чем плохо решение с маской, изящно, элегантно, мне нравится


 
Плохой человек   (2003-06-01 22:48) [19]

>а чем плохо решение с маской, изящно, элегантно, мне нравится

И, например, можно поменять файл с изображением и с ним маску, а регионы в файл описывать сложнее.



Страницы: 1 вся ветка

Текущий архив: 2003.06.12;
Скачать: CL | DM;

Наверх




Память: 0.51 MB
Время: 0.017 c
1-34829
Всеволод Соловьёв
2003-06-02 20:29
2003.06.12
Четвертый байт TColor


4-35113
raven2003
2003-04-13 21:58
2003.06.12
Как получить дату последнего открытия и измененрия файла!?!


1-34786
АлексейК
2003-06-02 08:28
2003.06.12
Использование DLL созданной в D7 для D5


1-34835
mr. !
2003-06-02 22:57
2003.06.12
Отловить сообщение ...


14-34995
Vitas2
2003-05-26 13:19
2003.06.12
SQL