Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.78/9: Рейтинг темы: голосов - 9, средняя оценка - 4.78
266 / 211 / 89
Регистрация: 27.09.2010
Сообщений: 1,234
1

(Sender) не работает на Win7!? НА XP и win 8 и win 10 все прекрасно работает!

05.10.2015, 21:02. Показов 1730. Ответов 8
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Всем привет!
есть четыре CheckListBox-а на них при наведении мышки срабатывает обработчик OnMouseEnter.
на форме есть кнопка загрузки базы , нажав на нее загружается текст в CheckListBox-ы и после этого нет ни какой реакции на вход мышки на поле CheckListBox-а , то есть Sender уже не реагирует.
Это странное поведение касается только виндовс 7 , программа прекрасно работает на XP , win 8 , и win 10.
почему исчезает реакция только на семерке? как решить?
вот часть кода , там я поставил return после записи текста в первый CheckListBox , и мышка не реагирует только на первом CheckListBox-а все остальные работают (пока пустые если занести любой текст то тоже перестают работать).
C++
1
2
3
4
5
6
7
8
9
10
11
  data->Sort(); // сортирую список
  zajawka->Sort();
  izpolnitel->Sort();
  rajon->Sort();//
 
    CheckListBox1->Items->Text = data->Text;
    //CheckListBox1->OnMouseEnter = MouseEnter;
    return;
    CheckListBox2->Items->Text = rajon->Text;
    CheckListBox3->Items->Text = zajawka->Text;
    CheckListBox4->Items->Text = izpolnitel->Text;
вход мышки
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
void __fastcall TForm_List_Rajon::MouseEnter(TObject *Sender)
{
   //ShowMessage("lll");
 
  if (N6->Checked == false) {
  //static
  TCheckListBox *//clb = NULL;
  clb = dynamic_cast <TCheckListBox *> ( Sender );
  clb->Height = 4 + clb->ItemHeight * clb->Items->Count;
 
  if(clb->Tag == 1)
  clb->Width = ComboBox1->Width;
  else
  if(clb->Tag == 2)
  clb->Width = ComboBox2->Width;
  else
  if(clb->Tag == 3)
  clb->Width = ComboBox3->Width;
  else
  if(clb->Tag == 4)
  clb->Width = ComboBox4->Width;
  clb->BringToFront();
                              }
}
выход мышки из поля CheckListBox-а
C++
1
2
3
4
5
6
7
8
9
10
void __fastcall TForm_List_Rajon::MouseLeave(TObject *Sender)
{
    if (N6->Checked == false) {
   TCheckListBox *clb// = NULL;
 // clb
   = dynamic_cast <TCheckListBox *> ( Sender );
  clb->Height = clb->ItemHeight;
  clb->Width = 17;
        }                     
}
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
05.10.2015, 21:02
Ответы с готовыми решениями:

Не работает сеть Win 8 - Win7
Компьютер с Win7 подключен к роутеру сетевым шнуром Dlink DSL_2640NRU, ноутбук с Win8 подключен к...

Как во free pascal узнать, в какой ос работает программа: Win 7 или Win xp?
Так же хотелось бы узнать имя пользователя, запустившего программу.

Не работает звук после установки win 7 вместо win XP
РЕБЯТ!!! Прошу помогите!!! :-[ Есть кто царь-гений-вундеркинд кто сможет эту проблему с звуком...

Не работает интернет после обновления с win 7 до win 10
Помогите пожалуйста с интернетом, сменила с windows 7 на 10, сразу проблема - не работает на...

8
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
32971 / 21284 / 8173
Регистрация: 22.10.2011
Сообщений: 36,558
Записей в блоге: 8
05.10.2015, 21:08 2
Тестовый проект прикрепи, и расскажи, что нужно делать, чтобы воспроизвести ошибку. У меня Win7, проверю.
0
266 / 211 / 89
Регистрация: 27.09.2010
Сообщений: 1,234
05.10.2015, 23:22  [ТС] 3
простой пример. после нажатия на кнопку перестает работать sender на CheckListBox1
Вложения
Тип файла: zip Projects.zip (4.36 Мб, 5 просмотров)
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
32971 / 21284 / 8173
Регистрация: 22.10.2011
Сообщений: 36,558
Записей в блоге: 8
06.10.2015, 01:20 4
Лучший ответ Сообщение было отмечено lifeforce как решение

Решение

lifeforce, а ничего, что у тебя при занесении строки в Items->Text к компоненту добавляется полоса прокрутки, и пока его ширина не будет как минимум GetSystemMetrics(SM_CXVSCROLL)+5 (а не 17, как у тебя в примере), мышь будет не над компонентом, а над полосой прокрутки, естественно, что событие работать не будет. Поправь:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
void __fastcall TForm1::CheckListBoxMouseLeave(TObject *Sender)
{
    TCheckListBox *clb = dynamic_cast<TCheckListBox*>(Sender);
    clb->Height = clb->ItemHeight;
    clb->Width = GetSystemMetrics(SM_CXVSCROLL) + 5;
}
 
// ---------------------------------------------------------------------------
void __fastcall TForm1::SpeedButton1Click(TObject *Sender)
{
    CheckListBox1->Items->Text = "yyyyy\n uuuuuu\n mmmmm \n dddd";
    CheckListBox1->Width = GetSystemMetrics(SM_CXVSCROLL) + 5;
}
- тогда все заработает...
1
266 / 211 / 89
Регистрация: 27.09.2010
Сообщений: 1,234
06.10.2015, 07:52  [ТС] 5
volvo, спасибо за подсказку.
я специально скрываю ширину чтоб не мешало на экране и после наведения мышки - раскрывалось.
я не знал за такую команду.
Цитата Сообщение от volvo Посмотреть сообщение
GetSystemMetrics(SM_CXVSCROLL)
интересно что срабатывает только один раз.
вечером после работы посижу за решением.
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
32971 / 21284 / 8173
Регистрация: 22.10.2011
Сообщений: 36,558
Записей в блоге: 8
06.10.2015, 09:00 6
Цитата Сообщение от lifeforce Посмотреть сообщение
интересно что срабатывает только один раз
Тестировал, работает столько раз, сколько пытался. Не один и не два и не 10, раз 25 точно отработало.

Цитата Сообщение от lifeforce Посмотреть сообщение
чтоб не мешало на экране и после наведения мышки - раскрывалось
Для этого есть TDockTabSet: кладешь панель на форму, связываешь ее с DockTabSet-ом, когда нужно - нажимаешь на вкладку - панель выезжает, на ней лежит все что нужно. По OnMouseLeave с панели убираешь с нее фокус - она сама сворачивается и компонент не занимает место на экране.

Пользуйся готовыми возможностями среды, а не придумывай велосипеды.
0
266 / 211 / 89
Регистрация: 27.09.2010
Сообщений: 1,234
06.10.2015, 20:09  [ТС] 7
вот такой результат работы в двух вариантах.
в первом выбираешь только один CheckListBox и там отмечаешь нужное.
или второй вариант выбираешь один CheckListBox и автоматически высвечиваются все , это удобно для наглядности что было выбрано в других CheckListBox-ах.
это типа фильтра (ИЛИ / И )текста
Миниатюры
(Sender) не работает на Win7!? НА XP и win 8 и win 10 все прекрасно работает!   (Sender) не работает на Win7!? НА XP и win 8 и win 10 все прекрасно работает!  
0
266 / 211 / 89
Регистрация: 27.09.2010
Сообщений: 1,234
06.10.2015, 20:10  [ТС] 8
Цитата Сообщение от volvo Посмотреть сообщение
TDockTabSet:
для этого не совсем подходит.
0
266 / 211 / 89
Регистрация: 27.09.2010
Сообщений: 1,234
06.10.2015, 22:10  [ТС] 9
Цитата Сообщение от volvo Посмотреть сообщение
при занесении строки в Items->Text к компоненту добавляется полоса прокрутки
Все оказалось очень банальнорешение. ведь действительно что добавляется полоса прокрутки, и мышка не активируется на ней. но в других системах(XP, win 8, win 10) продолжает работать?
решил проблему увеличением начального размера увеличив его до размера когда стало видно полосу прокрутки .
C++
1
clb->Width = 37;//17;
volvo, спасибо за правильную наводку.
вот результат работы на Windows 7.
Миниатюры
(Sender) не работает на Win7!? НА XP и win 8 и win 10 все прекрасно работает!  
0
06.10.2015, 22:10
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
06.10.2015, 22:10
Помогаю со студенческими работами здесь

Проблемма при Установке Win7. Win Vista. Win Xp sp3
Ребята такая проблемма при попытке установки виндоуса на ноут: После выбора &quot;Boot From CD/DVD&quot; и...

Работал в win 7, но не работает в Win 8
Ругается на функцию Private Declare Function GetKeyState Lib &quot;user32&quot; (ByVal nVirtKey As Long) As...

Граф. приложение+библиотеки+консольное приложение! Не работает программа без использования консоли. Если использую, то всё прекрасно работает.
Ребята нужна помощь,все вроде сделал, но приложение начинает зависать при запуске без использования...

От модема к Win 7. от Win7 до Win XP
Приветствую Вас уважаемые форумчане! Проблема такая - невозможно подать интернет на второй комп с...


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

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