Форум программистов, компьютерный форум, киберфорум
Delphi для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.66/132: Рейтинг темы: голосов - 132, средняя оценка - 4.66
912 / 672 / 134
Регистрация: 01.03.2010
Сообщений: 1,273
1

События при наведении курсора на различные компоненты формы

01.03.2010, 20:35. Показов 25669. Ответов 15
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Цель такова. На форме есть несколько Панелек. Необходимо, чтобы при наведении курсора на каждую отдельную Панель она меняла цвет(например), при Клике мыши Панель утапливалась(например) и происходило запрограммированное событие, а при уводе курсора принимала исходное состояние.
Спасибо если кто - то мне поможет.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
01.03.2010, 20:35
Ответы с готовыми решениями:

Окрашивание формы при наведении курсора
Всем добрый вечер! Нужна помощь, нужно сделать программу в делфи, вернее создать форму, чтобы при...

dbEdit при наведении курсора
ПРивет! помогите пожалуйста! чтоб при наведении мыши на поле dbEdit, всплыл полный его текст....?...

Подсвечивание кнопки при наведении курсора
Как в Delphi 7 сделать так, чтобы при наведении на кнопку курсора маши, кнопка подсвечивалась?

Появление лабел при наведении курсора
На форме есть картинка и 4 лабела. При создании формы Визибл всех лабелов false. Нужно чтобы при...

15
46 / 38 / 3
Регистрация: 14.12.2009
Сообщений: 272
01.03.2010, 20:48 2
Это событие называеться OnMouseMove
2
912 / 672 / 134
Регистрация: 01.03.2010
Сообщений: 1,273
01.03.2010, 21:16  [ТС] 3
У меня около 30 Панелек (считай кнопок). Для каждой создавать все вышеуказанные события слишком громоздко. Как бы сделать все это более компактно но универсально?
0
Эксперт С++
3071 / 1409 / 425
Регистрация: 19.01.2009
Сообщений: 3,880
01.03.2010, 21:23 4
А обработчик должен делать одинаковые действия для каждой панельки (кнопки)?
1
912 / 672 / 134
Регистрация: 01.03.2010
Сообщений: 1,273
01.03.2010, 21:28  [ТС] 5
На каждой Панельке будет буква. При нажатии на Панель эта буква будет дописываться к содержимому Edit.Text. Но кроме этого с панельками должны происходить все визуальные эффекты, которые я описывал выше. С ними у меня и проблема.
0
714 / 402 / 33
Регистрация: 04.10.2009
Сообщений: 1,686
01.03.2010, 21:39 6
Тебе надо:
1. Написать несколько процедур "спецэффектов".
2. сделать рандомны счетчик по кол-ву написанных процедур.
3. "Пробежаться" по всем компонентам (панелькам) формы и отследить на какой было выбрано действие.
4. Обратиться к рандомно выбранной процедуре и передать ей sender панели.

Усё)

Добавлено через 3 минуты
вот как пробежаться по компонентам
Delphi
1
2
3
for i:=0 to frmKolvo.ComponentCount-1 do 
  if Components[i].ClassNameIs('TSpinEdit') then
    str:=str+(Components[i] as TSpinEdit).Value;
1
Эксперт С++
3071 / 1409 / 425
Регистрация: 19.01.2009
Сообщений: 3,880
01.03.2010, 21:40 7
а можно вот так:

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
var
  Form1: TForm1;
  lastPanel : TPanel;
 
implementation
 
{$R *.dfm}
 
 
procedure TForm1.Panel1MouseMove(Sender: TObject; Shift: TShiftState; X,
  Y: Integer);
 
var panel :TPanel;
begin
 
  panel := Sender as TPanel;
  panel.Color := clblack;
  panel.Font.Color := clWhite;
  // запоминаем панельку, над которой изменили цвет,
  // чтобы когда произойдет движенье мышью над формой вернуть его обратно
  lastPanel := panel;
end;
 
procedure TForm1.FormCreate(Sender: TObject);
begin
  lastPanel := nil;
end;
 
procedure TForm1.FormMouseMove(Sender: TObject; Shift: TShiftState; X,
  Y: Integer);
begin
  if lastPanel <> nil then begin
      lastPanel.Color := clBtnFace;
      lastPanel.Font.Color := clBlack;
      lastPanel := nil;
  end;
end;
//...
2
714 / 402 / 33
Регистрация: 04.10.2009
Сообщений: 1,686
01.03.2010, 21:40 8
а панели лучше создавай динамически (т.е. массив панелек)
1
Эксперт С++
3071 / 1409 / 425
Регистрация: 19.01.2009
Сообщений: 3,880
01.03.2010, 21:42 9
незабыв указать Panel1MouseMove() как обработчик события OnMouseMove для всех панелек
1
912 / 672 / 134
Регистрация: 01.03.2010
Сообщений: 1,273
01.03.2010, 22:09  [ТС] 10
Спасибо. Попробую.

Добавлено через 10 минут
Oleg! Извини но опиши подробнее фразу "незабыв указать Panel1MouseMove() как обработчик события OnMouseMove ДЛЯ ВСЕХ ПАНЕЛЕЙ". В Делфи я пока не очень....
0
Эксперт С++
3071 / 1409 / 425
Регистрация: 19.01.2009
Сообщений: 3,880
01.03.2010, 22:41 11
Евгений В, есть такое окошко в твое IDE Delphi, Object Inspector называется, так вот в нем есть две вкладки properties и Events, в которых соответственно свойства и события для выделенного Контрола. Для первой панельки, выделяешь ее (кликаешь по ней один раз), в Object Inspector вибираешь вкладку Events. Ищещь OnMouseMove и кликаешь по комбобоксу (справа) от надписи выпадающий список, вот по нему
Автоматом создасться обработчик
Delphi
1
procedure TForm1.Panel1MouseMove(Sender: TObject; Shift: TShiftState; X,  Y: Integer);
, но он будет пустым. Скопипасть код из моего поста. Теперь для каждого из панелек по очереди проделывай переходи в Object Inspector на вкладку Events и в OnMouseMove выбирай Panel1MouseMove (выпадающий список)
1
912 / 672 / 134
Регистрация: 01.03.2010
Сообщений: 1,273
01.03.2010, 23:32  [ТС] 12
Oleg! Спасибо! Получилось все и с MouseMove и с PanelClick с записью в edit1.Text букв 'а' или 'б' и т.д. по принципу edit1.Text = edit1.Text+panel.Caption (если panel1.Caption=а и panel2.Caption=б и т.д.). Но если я кликну по одной Панельке относительно быстро 2 раза то второй раз не пропечатывается. А вот если водить курсором по Панели и одновременно кликать, то можно печатать как угодно быстро. Если мне придется так набирать определенный текст при помощи кнопок-панелек то это вызовет некоторые не удобства.
Что у меня не так?
0
Эксперт С++
3071 / 1409 / 425
Регистрация: 19.01.2009
Сообщений: 3,880
02.03.2010, 01:02 13
Евгений В, код покажи

Добавлено через 29 минут
подумав, можно предложить и вот такую версияю
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
procedure TForm1.Panel1MouseMove(Sender:TObject; Shift:TShiftState; X,Y:Integer);
var panel :TPanel;
begin
  panel := Sender as TPanel;
  if (lastPanel <> nil) and (lastPanel <> panel) then begin
      // убираем подсветку у предыдущей панельки
      lastPanel.Color := clBtnFace;
      lastPanel.Font.Color := clBlack;
      // подсвечиваем текущую панельку
      panel.Color := clblack;
      panel.Font.Color := clWhite;
  end;
  // запоминаем панельку, над которой изменили цвет,
  // чтобы когда произойдет движенье мышью над формой вернуть его обратно
  lastPanel := panel;
end;
 
procedure TForm1.FormCreate(Sender: TObject);
begin
  lastPanel := nil;
end;
 
procedure TForm1.Panel1Click(Sender: TObject);
begin
  Edit1.Text := Edit1.Text + (Sender as TPanel).Caption;
end;
1
Эксперт С++
3071 / 1409 / 425
Регистрация: 19.01.2009
Сообщений: 3,880
02.03.2010, 01:10 14
или вот бинарник мой
Вложения
Тип файла: 7z Project1.7z (148.2 Кб, 93 просмотров)
1
912 / 672 / 134
Регистрация: 01.03.2010
Сообщений: 1,273
02.03.2010, 11:34  [ТС] 15
Все работает. Только в procedure TForm1.FormCreate(Sender: TObject) вместо lastPanel := nil написал lastPanel := Panel . Иначе, если сразу навести курсор на первую Панель то ничего не произойдет.Если же сразу навести на любую другую - то все в норме, и первая Панель начинает работать. Но в общем ПРИНЦИП понятен. СПАСИБО!
0
0 / 0 / 0
Регистрация: 22.02.2015
Сообщений: 15
07.03.2015, 20:15 16
schdub, нашел вашу подсказку( у меня такое же задание), хотел спросить насчет вкладки events в Object inspector. Вопрос такой
Как правильно задать OnMouseMove в ней? При нажатии не получается вывести ниспадающий список

Добавлено через 45 минут
Евгений В, А как создаются сами панели?
0
07.03.2015, 20:15
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
07.03.2015, 20:15
Помогаю со студенческими работами здесь

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

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

Увеличивать кнопки при наведении курсора
Здравствуйте. Как реализовать это: на форме имеется два буттона. Нужно: при наведении курсора на...

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


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

Или воспользуйтесь поиском по форуму:
16
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru