Главная страница
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.158 c
14-34987
Style
2003-05-26 08:03
2003.06.12
Вчера смотрел новую маму и чипсет i7205


3-34666
mao
2003-05-18 07:59
2003.06.12
А всегда нужен BDE?


3-34677
AlexBut
2003-05-22 14:26
2003.06.12
Enter вместо Tab


1-34884
prorok2
2003-05-30 19:49
2003.06.12
Как сделать


3-34758
YuraKiller
2003-05-19 22:49
2003.06.12
Как наладить работу с пользователями в IB