Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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
14-35067
Дмитрий К.К.
2003-05-28 07:22
2003.06.12
Именинники 28 мая


14-34973
ALEX2003
2003-05-28 14:00
2003.06.12
Где взять BSDBGrid?


14-35053
Till
2003-05-23 08:21
2003.06.12
MainMenu как в Офисе ХР


3-34717
BBCHa
2003-05-23 13:54
2003.06.12
Тип uniqueidentifie в MSSQL 2000


1-34802
Hooch
2003-06-02 14:08
2003.06.12
MDIChild





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский