Форум: "Основная";
Текущий архив: 2003.06.12;
Скачать: [xml.tar.bz2];
Вниз---|Ветка была без названия|--- Найти похожие ветки
← →
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;
Скачать: [xml.tar.bz2];
Память: 0.48 MB
Время: 0.007 c