Вниз
Скачать: 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 вся ветка

Скачать: CL | DM;



Память: 0.49 MB
Время: 0.011 c
1-34924
Lazy girl
2003-05-31 09:01
2003.06.12
Пропали системные кнопки MDI-child!!!!!!!!!!!!!!!!!


1-34918
Cossys
2003-05-29 16:55
2003.06.12
Как в компоненте DateEdit проверить, что дата не введена


3-34711
Ann
2003-05-22 09:10
2003.06.12
кодировка


14-35072
Инна
2003-05-27 17:58
2003.06.12
Ошибка Access Violation at address...


6-34963
msoftware
2003-04-09 09:10
2003.06.12
Нужен совет по Сокетам




   Наверх