Форум программистов, компьютерный форум, киберфорум
Delphi для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.92/13: Рейтинг темы: голосов - 13, средняя оценка - 4.92
1 / 1 / 1
Регистрация: 27.11.2014
Сообщений: 115

Наведение курсора на картинку

29.04.2015, 08:53. Показов 3204. Ответов 37
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Как сделать строку условия покороче, такой код громоздкий получается...
Задумка - На форме есть Image и при наведении на определенную область, должна появляться другая Imaga
В условии указывал x - минимум x - максимум и y - минимум, y - максимум
Может есть какое решение? Потому что картинок будет много, а код получается ужасно плохо читаемым

Delphi
1
2
3
4
5
6
7
8
procedure TForm2.Image28MouseMove(Sender: TObject; Shift: TShiftState; X,
  Y: Integer);
  var
  MyMouse: TMouse;
begin
   if  ((MyMouse.CursorPos.x >= 174) and (MyMouse.CursorPos.x < 208) and (MyMouse.CursorPos.y >= 365) and  (MyMouse.CursorPos.y < 413)) then im_L1 := 1
   else  im_L1 := 0;
end;
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
29.04.2015, 08:53
Ответы с готовыми решениями:

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

Изменить картинку при наведении курсора
Здравствуйте! Подскажите пожалуйста, как можно изменить картинку при наведении курсора мыши? В гугле поискал - ничего однозначного не...

При наведении курсора сменить картинку
У меня есть два Image. Предположим, Image1 и Image2. Сами картинки имеют одинаковый размер. Но они находятся в двух разных местах, и Image2...

37
1 / 1 / 1
Регистрация: 27.11.2014
Сообщений: 115
29.04.2015, 14:23  [ТС]
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от northener Посмотреть сообщение
Нигде. Их там нет и никогда не было.
так а цифры что означают?

Delphi
1
myRect := Rect(20, 30, 100, 200);
0
пофигист широкого профиля
4770 / 3207 / 862
Регистрация: 15.07.2013
Сообщений: 18,615
29.04.2015, 14:32
Лучший ответ Сообщение было отмечено S_007 как решение

Решение

Цитата Сообщение от S_007 Посмотреть сообщение
так а цифры что означают?
Left, Top, Right & Bottom
1
1 / 1 / 1
Регистрация: 27.11.2014
Сообщений: 115
29.04.2015, 14:43  [ТС]
northener , СПАСИБО! счас буду разбираться...
понимаю, задаю тупые вопросы, но вы должны тоже понять, программистами не рождаются - программистами становятся!
когда руки трясутся и быстро надо что-то сделать - и не получается, приходится обращаться к Вам, к тем кому это запросто...
0
 Аватар для krapotkin
6854 / 4680 / 1465
Регистрация: 14.04.2014
Сообщений: 20,686
Записей в блоге: 21
29.04.2015, 14:56
магия слова просто
Миниатюры
Наведение курсора на картинку   Наведение курсора на картинку   Наведение курсора на картинку  

0
1 / 1 / 1
Регистрация: 27.11.2014
Сообщений: 115
29.04.2015, 15:26  [ТС]
не, я не знаю зачем так усложнять мой совершенно, я понимаю простой, для опытных программеров вопрос...
сейчас попробовал, перевел, что такое гребаное Right & Bottom, поясняю простым языком так как я спрашивал, для таких деревянных как я...
myRect := Rect(x1, x2, y1, y2); вот и все...
отдельное спасибо за толерантность northener, СПАСИБО!

Добавлено через 8 минут
извиняюсь, поторопился, - myRect := Rect(x1, y1, x2, y2);
0
1 / 1 / 1
Регистрация: 27.11.2014
Сообщений: 115
29.04.2015, 15:39  [ТС]
0
пофигист широкого профиля
4770 / 3207 / 862
Регистрация: 15.07.2013
Сообщений: 18,615
29.04.2015, 15:44
Хм. Что бы могла означать эта странная картинка?
0
1 / 1 / 1
Регистрация: 27.11.2014
Сообщений: 115
29.04.2015, 15:49  [ТС]
Цитата Сообщение от northener Посмотреть сообщение
Что бы могла означать эта странная картинка?
Left, Top, Right, Bottom
не так ли?
Миниатюры
Наведение курсора на картинку  
0
пофигист широкого профиля
4770 / 3207 / 862
Регистрация: 15.07.2013
Сообщений: 18,615
29.04.2015, 15:53
Непохоже.
Почему Y1 внизу? Почему X2 вверху?
0
1 / 1 / 1
Регистрация: 27.11.2014
Сообщений: 115
29.04.2015, 15:58  [ТС]
У меня получилось так... Тогда вы напишите как должно быть по вашему?
Вот это хозяйство myRect := Rect(x1, y1, x2, y2); на экране не видно, а как его тогда в уме представлять?
Left, Right - это X
Top, Bottom - Это Y
0
пофигист широкого профиля
4770 / 3207 / 862
Регистрация: 15.07.2013
Сообщений: 18,615
29.04.2015, 16:03
(x1, y1) и (x2, y2) это по твоей идее координаты точек левого верхнего и правого нижнего угла прямоугольника соответственно.
0
1 / 1 / 1
Регистрация: 27.11.2014
Сообщений: 115
29.04.2015, 16:12  [ТС]
теперь понимаю - это так... благодаря доброму человеку krapotkin, в начале темы он мне посоветовал, а потом обиделся, по этому прямоугольнику можно отслеживать нужные координаты на картинке, у меня все получилось,
я же с чего начинал тему - чтобы сократить код отслеживания нужных координат, а при помощи такого подхода, код сокращается в разы
код теперь получается такой

Delphi
1
2
3
4
5
6
7
procedure TForm1.Image1MouseMove(Sender: TObject; Shift: TShiftState; X,
  Y: Integer);
  var    myRect : TRect;
begin
      myRect := Rect(0, 0, 68,43);
     if PtInRect(myRect, Point(X,Y)) then Image2.Visible := true;
end;
0
пофигист широкого профиля
4770 / 3207 / 862
Регистрация: 15.07.2013
Сообщений: 18,615
29.04.2015, 16:29
Цитата Сообщение от S_007 Посмотреть сообщение
код сокращается в разы
Если у тебя не очень древняя Дельфи, то при использовании событий OnMouseEnter, OnMouseLeave код сократится вообще почти до нуля.
1
1 / 1 / 1
Регистрация: 27.11.2014
Сообщений: 115
29.04.2015, 16:36  [ТС]
Delphi 2010, а КАК?

Я сделал так, но кнопок будет много, теперь чешу репу как бы это не растянуть на много функций для каждой

Delphi
1
2
3
4
5
6
7
8
9
procedure TForm1.Image1MouseUp(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
  var    myRect : TRect;
begin
     myRect := Rect(0, 0, 68,43);
     if PtInRect(myRect, Point(X,Y)) then
     if Image2.Visible = true then Image2.Visible := false
     else Image2.Visible := true;
end;
Это включение выключение одной кнопки...
0
пофигист широкого профиля
4770 / 3207 / 862
Регистрация: 15.07.2013
Сообщений: 18,615
29.04.2015, 16:43
Цитата Сообщение от S_007 Посмотреть сообщение
Delphi 2010, а КАК?
Версия не древняя, но я ошибся забыв саму задачу
0
1 / 1 / 1
Регистрация: 27.11.2014
Сообщений: 115
29.04.2015, 16:48  [ТС]
northener, неужели задача сложная? Зто для меня, - да... А для Вас должно быть как два пальца...
Наверно многие делали графические программы, просто не каждый хочет все показывать как это делается - понимаю...
не, сделать и я как-то смогу, но хотелось грамотно оптимизировать код и для читаемости и для выполнения...
хотелось бы делать сразу все правильно - как у крутых программистов...
0
 Аватар для krapotkin
6854 / 4680 / 1465
Регистрация: 14.04.2014
Сообщений: 20,686
Записей в блоге: 21
29.04.2015, 20:36
Лучший ответ Сообщение было отмечено S_007 как решение

Решение

как у крутых - нужно завести массив объектов, содержащих все данные твоей квази-кнопке
Delphi
1
2
3
4
5
TMyButton = record
  R:TRect; // координаты те самые Left,Top,Right,Bottom
  State:integer;// состояние - Свободна/Под мышью/Нажата
  Text:string; // надпись на кнопке
end;
потом сделать в форме битмапы для 3 картинок на кнопку
завести массив этих самых кнопок
инициализировать этот массив при создании формы
и обработать движения и клики мыши

Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
TForm1=class(TForm)
...
  procedure FormCreate(Sender:TObject);
  procedure FormDestroy(Sender:TObject);
private
  procedure CheckButtonStates(x,y:integer);
  procedure DrawButtons;
  procedure DrawButton(index:integer);
  procedure ButtonClicked(index:integer);
public
  imgNorm:TBitmap;
  imgOver:TBitmap;
  imgPressed:TBimap;
  buttons:array[0..20] of TMyButton;
end;
 
procedure TForm1.FormCreate(Sender:TObject);
begin
  imgNorm:=TBitmap.Create;
  imgNorm.LoadFromFile('ButtonNorm.bmp');
  imgOver:=TBitmap.Create;
  imgOver.LoadFromFile('ButtonOver.bmp');
  imgPressed:=TBitmap.Create;
  imgPressed.LoadFromFile('ButtonPressed.bmp');
 
  button[0].text:='кнопка 1'; Button[0].rect:=bounds(10,10,120,20);
  button[1].text:='кнопка 2'; Button[1].rect:=bounds(10,40,120,20);
  button[2].text:='кнопка 3'; Button[2].rect:=bounds(10,70,120,20);
  button[3].text:='кнопка 4'; Button[3].rect:=bounds(10,100,120,20);
  button[4].text:='кнопка 5'; Button[4].rect:=bounds(10,130,120,20);
end;
 
procedure TForm1.FormDestroy(Sender:TObject);
begin
  imgNorm.free;
  imgOver.free;
  imgPressed.free;
end;
 
procedure TForm1.CheckButtonStates(x,y:integer);
begin
  for i:=0 to high(Buttons) do
  begin
    if ptInRect(Buttons[i].R, point(X,Y)) then
      Buttons[i].State:=1 // mouse over button
    else
     Buttons[i].State:=0; // button normal state
  end;
end;
 
procedure TForm1.DrawButton(index:integer);
begin
  case Buttons[index].state of
    0:begin 
       // рисуем кнопку Buttons[index] в ненажатом состоянии
    end;
    1:begin
       // рисуем кнопку Buttons[index] в состоянии "под курсором"
    end;
    2:begin
       // рисуем кнопку Buttons[index] в нажатом состоянии
    end;
  end;
end;
 
procedure TForm1.DrawButtons;
var i:integer;
begin
  for i:=0 to high(Buttons) do
    drawButton(i);
end;
 
procedure TForm1.ImageOnMouseMove(.....);
begin
  CheckButtonStates(x,y);
  DrawButtons;
end;
 
procedure TForm1.ImageOnMouseDown(...);
var i:integer;
begin
  for i:=0 to high(buttons) do
    if ptInRect(Buttons[i], Point(x,y)) then
    begin
       buttons[i].state:=2; // нажата
       drawButtons;
       break;
    end; 
end;
 
procedure TForm1.ImageOnMouseUp(...);
var i:integer;
begin
  for i:=0 to high(buttons) do
    if ptInRect(Buttons[i], Point(x,y)) then
    begin
       ButtonClicked(i);
       DrawButtons;
       break;
    end; 
end;
 
procedure TForm1.ButtonClicked(index:integer);
begin
  // по нажатию любой кнопки программа приходит сюда
  // т.е. сейчас нажали кнопку buttons[index]
  // делай тут что хотел
end;
возможно теперь понятно, почему стоило сделать просто кнопки??
1
1 / 1 / 1
Регистрация: 27.11.2014
Сообщений: 115
30.04.2015, 10:25  [ТС]
Очень красиво и понятно! Спасибо krapotkin, а я уже успел кучу кода нагородить
буду пробовать ваш пример

Добавлено через 13 часов 12 минут
Это самый лучший форум из всех на свете! Здесь отзывчивые, терпеливые к новичкам участники!
Огромное всем Спасибо за помощь в этой теме! Отдельное спасибо krapotkin, ваш пример помог не только мне, но и поможет еще многим!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
30.04.2015, 10:25

При наведении курсора сменить картинку
У меня есть два Image. Предположим, Image1 и Image2. Сами картинки имеют одинаковый размер. Но они находятся в двух разных местах, и Image2...

Наведение курсора на panel!
Как сделать так чтоб после наведения на panel где visible = false , visible становилась true? private void panel1_MouseMove(object...

Наведение курсора на div
Подскажите, реально ли без флеша реализовать следующее: при наведении мышкой на див и клике открывается новая страница?

Наведение курсора мыши на объект
Здравствуйте ,не могу разобраться ,как сделать,чтобы при наведении мыши на объект (iz1,iz2,iz3) вылезало название(Музей-квартира...

Наведение курсора на ячейку таблицы!
Всем добра! Помогите пожалуйста кто может! Вот табличка: &lt;table&gt; &lt;tr&gt; &lt;td...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
38
Ответ Создать тему
Новые блоги и статьи
Беседа с ИИ о программистах, недопускающих к созданию и правке кода генеративные ИИ и причины этого
zorxor 21.09.2026
Раньше я радовался или получал некоторые эмоции, пусть небольшие, но всё же, от самого процесса написания кода, рекомпиляции и запуска, видя постепенное развитие программы и прочее. А теперь лень. . .
Мобильное приложение ColorStep
pavlinmavlin 17.09.2026
Реализовал приложение Красный, Зеленый, Синий в Unity3d + c#. Название изменил на ColorStep. Приложение прошло модерацию и теперь доступно для скачивания. Делал его сам, шаг за шагом — и вот,. . .
Запрет дублирования строк в табличной части
Maks 13.09.2026
Реализация из решения ниже выполнена на нетиповом справочнике "Нормы ТО" с табличной часть "Виды ТО", разработанного в КА2, со следующими реквизитами: - ВидТО (СправочникСсылка. ВидыТО); - ВидГСМ. . .
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр.
Jin X 06.09.2026
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр. Работая с форумом и нейросетями в браузере часто хочется что-то подкорректировать или добавить какого-то функционала. Ниже прикреплён. . .
Программа опроса у.з. расходомера SLS-720F
Argus19 02.09.2026
Программа опроса у. з. расходомера SLS-720F Программа опрашивает один раз в минуту три ультразвуковых расходомера SLS-720F через интерфейс RS-485 по протоколу Modbus RTU. Опрашиваются регистры. . .
Hyper-V: Компьютер должен поддерживать доверенный платформенный модуль 2.0.
Maks 31.08.2026
При установке Windows 11 на виртуальную машину Hyper-V 2-го поколения вылезла такая ошибка: Решение: в параметрах виртуальной машины, в разделе "Безопасность" (Security) активировать флаг. . .
Архитектура биовида Стива в Майнкрафте: Зачем бонобо кубический каннибализм
anaschu 30.08.2026
Кубический Вагинокапитализм в Minecraft: Математический инвариант ОДУ и рок Стивов-бонобо Главная задача разработанной «Модели Всего» — наглядно продемонстрировать наличие системной «судьбы». . .
Оттачиваю умение писать js программы.
russiannick 30.08.2026
Проектом выходного дня стало написание Книги шифров Виженера. Итогом стала версия 200, синий туман. Синий туман назван так, потому что замораживает текст под собой. Нажатие синих кнопок управляют. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru