Модераторы: Akina

Поиск:

Закрытая темаСоздание новой темы Создание опроса
> Вывод имени контрола в MsgBox, Подскажите, пожалуйста :) 
:(
    Опции темы
АлексейМ
  Дата 29.8.2005, 10:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 35
Регистрация: 29.8.2005

Репутация: нет
Всего: нет



Народ!
У меня проблемка. При клике по контролу формы (прямоугольнику!) надо вывести в MessageBox его имя. Но функция, которую я намалякал, выводит имя активного объекта, а не того, по которому кликаю. smile Я думал, что можно каким-то образом при том же клике этот контрол активировать, и тогда бы вывелось его имя... Но выяснилось, что я не представляю, как можно активировать прямоугольник.

Подскажите, плиз, как из этого выпутаться smile
PM MAIL   Вверх
Akina
Дата 29.8.2005, 13:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 30
Всего: 454



Событие OnClick происходит абстрактно в приложении, и нельзя определить где именно (косвенно - по смещению фокуса, но не все контролы его получают).
В то же время события OnMouseDown, OnMouseUp, etc. получают в качестве параметров координаты события в окне приложения (внимательно следить за ед. изм.!). Следовательно, перебрав все контролы и сравнив, можно выяснить, в тело какого контрола попадает клик. Возможно, следует учитывать также Hidden.
Трудности возникнут, если есть несколько видимых контролов один над другим. Или, скажем, с закладками. Как вывернуться тут - пока не знаю... впрочем взаимное расположение контролов известно на стадии дизайна, а если оно потом программно изменяется - это можно отслеживать.


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
Papirus
Дата 29.8.2005, 13:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 298
Регистрация: 19.4.2005
Где: Санкт-Петербург

Репутация: 2
Всего: 1



Событие Click здесь наступает (если речь о прямоугольнике) в случае щелчка по линии границы. Это надо?
Тогда все просто - пишем свой код в процедуре обработки события:
Код

Private Sub Прямоугольник0_Click()
MsgBox "Прямоугольник0"
End Sub


Если надо во всей области прямоугольника, то не знаю, что и посоветовать. Попробуй вместо прямоугольника использовать Label соответственно оформленный.
PM MAIL ICQ   Вверх
АлексейМ
Дата 29.8.2005, 15:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 35
Регистрация: 29.8.2005

Репутация: нет
Всего: нет



Большое спасибо! smile


Ещё вопросик. Почти по этой же теме.

Вот смотрите. У меня два контрола. При клике по одному из них должно определяться его имя и помещаться в функцию. Например, чтобы при клике по нему выводилось сообщение с его именем (но вообще для разных целей, конечно). Для чего я это спрашиваю? Просто представьте, что этих контролов штук 50, или тыща - и для каждого прописывать функцию. Это ведь ужасно! А если имя будет определяться и помещаться в функцию, то хватит и её одной - она просто станет универсальной smile

Подскажите, пожалуйста.
Наверное, не только мне это интересно. smile
PM MAIL   Вверх
Akina
Дата 29.8.2005, 16:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 30
Всего: 454



Дело в том, что невозможно понять пока ЦЕЛЬ всей этой заморочки. Не локальную маленькую по получению имени контрола, а за нафига это потребовалось...
Озвучь. Вдруг окажется, что задача имеет иное решение? ведь не свою среду визуального построения макетов поди пишешь...


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
АлексейМ
Дата 29.8.2005, 18:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 35
Регистрация: 29.8.2005

Репутация: нет
Всего: нет



Да это во многом пригодится может smile
Мне бы пока решение этой задачки, если можно.

Всё дело в том, что для решения моей проблемки уже практически всё сделано, кроме вот того, о что я попросил объяснить smile А если искать другое решение, то всё переделывать придётся.
Когда сделаю, обязательно расскажу!

А пока... Нет, в общих чертах я сейчас расскажу smile Например, зрительный зал (или школьный класс, или автостоянка, или ещё что-нибудь). Определение, занято ли место (разными способами, в зависимости от того, зал это зрительный, или конференционный, или стоянка) и добавление данных о человеке, занимающим данное место (например, телефон его, ФИО и проч.) через отдельную форму.

Алгоритм примерно такой при клике по контролу, означающему какое-то место на плане зала:
1. Передача в функцию имени места, то, о чём я и спрашиваю - номера его (имя контрола на плане зала)
2. Определение, занято или свободно место
3. Затем, если свободно, открыть форму для заполнения именно этого места. После принятия данных место считается занятым
4. Если место занято, то открыть форму очистки (освобождения) места
5. Ну и, в конце концов, обновление формы-плана зала (окраска занятых-незанятых мест в разные цвета)

Вот такие пироги. Первый пункт - вот чего прошу объяснить smile
Добавлено @ 18:24
Кстати, чё значит
Цитата
не свою среду визуального построения макетов поди пишешь...
???
Всё моё smile Личное

Заранее благодарю за помощь smile

Это сообщение отредактировал(а) АлексейМ - 29.8.2005, 18:20
PM MAIL   Вверх
Akina
Дата 29.8.2005, 21:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 30
Всего: 454



И ты эту всю байду рисуешь ректанглами? да ты сам виноват - выбрал наихудший по реализации вариант. Замени просто кучу прямоугольников на массив (слышишь? МАССИВ!) лэйблов - и от твоих проблем ничего не останется... мало того что лабел принимает клик, так когда есть уцправляющий массив, он принимается как
Код

Private Sub Label1_Click(Index As Integer)
...
End Sub

Так что не зря я с тебя тряс целю работы... а по коду от такой замены будет правка ну просто минимальная.


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
АлексейМ
Дата 30.8.2005, 09:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 35
Регистрация: 29.8.2005

Репутация: нет
Всего: нет



Спасибо огромное!

Когда я буду массив лэйблов использовать, всё-таки будет определятся имя конкретного лэйбла при клике по нему? smile smile smile

PM MAIL   Вверх
Akina
Дата 30.8.2005, 09:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 30
Всего: 454



Цитата
Когда я буду массив лэйблов использовать, всё-таки будет определятся имя конкретного лэйбла при клике по нему?

Имя у них будет на всех одно. А вот индекс у каждого свой - и он передается обработчику события.

грубо - если у тебя 5 рядов по 5 лэйбаков, то

Код

Private Sub Label_Click(Index As Integer)
' Index может быть от 0 до 24
Row = Index \ 5 + 1
Col = Index MOD 5 + 1
End Sub


Ты эта... прежде чем спрашивать - попробуй...

Простейший способ создания массива контролов с управляющим массивом - это копирование-вставка в макете... при вставке второго экземпляра тебе будет предложено создать управляющий массив - согласись. Обработчики событий пиши ПОСЛЕ создания управляющего массива - иначе придется дописывать аргумент руками.

И не забудь отслеживать порядок расположения лэйблов по этому индексу. Да, индекс начинается с нуля.
Добавлено @ 09:29
Что еще удобно - достаточно в макете поместить 1 лабел с управляющим массивом, а остальные можно создавать из него в рантайме... но это потом, сперва со статическим массивом контролов разберись.


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
АлексейМ
Дата 30.8.2005, 13:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 35
Регистрация: 29.8.2005

Репутация: нет
Всего: нет



Спасибо!
smile smile smile


P.S. Пробую прибамбасы форума smile
PM MAIL   Вверх
АлексейМ
  Дата 30.8.2005, 18:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 35
Регистрация: 29.8.2005

Репутация: нет
Всего: нет



Эээ... Позвольте ещё вопросик - что такое лабел? В смысле по-русски...
А то чё-то в справке не нашёл smile
Я ещё немного новичок.
PM MAIL   Вверх
Akina
Дата 30.8.2005, 18:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 30
Всего: 454



Label. Он же Надпись.


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
АлексейМ
Дата 30.8.2005, 19:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 35
Регистрация: 29.8.2005

Репутация: нет
Всего: нет



Понял.
PM MAIL   Вверх
АлексейМ
Дата 6.9.2005, 05:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 35
Регистрация: 29.8.2005

Репутация: нет
Всего: нет



Все хелпы перерыл, а как массив сделать, не нашёл. Подскажите, кто могет!
PM MAIL   Вверх
Papirus
Дата 6.9.2005, 08:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 298
Регистрация: 19.4.2005
Где: Санкт-Петербург

Репутация: 2
Всего: 1



Чессно говоря, про массивы контролов в VB6 знаю, а в Access не встречал и есть большие сомнения, что они таки существуют.
Добавлено @ 08:07
Есть еще и такой вариант действий (не такой красивый, к сожалению, как с массивом) - создать функцию с параметром в общем модуле. Затем разместить Надписи на форме и в свойствах каждой на событие клик (или иное) прописать =ИмяФункции(Параметр). Зато здесь сам управляешь - какой лейбл какой параметр передает функции. При этом также как и с массивом изменения в алгоритм работы проги потребуется вносить только раз.
PM MAIL ICQ   Вверх
АлексейМ
Дата 7.9.2005, 14:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 35
Регистрация: 29.8.2005

Репутация: нет
Всего: нет



Спасибо!

Akina, правда ли можно массив лейблов в Access сделать? Если да, то как?
Заранее благодарю smile
PM MAIL   Вверх
Akina
Дата 7.9.2005, 15:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 30
Всего: 454



АлексейМ
Это я дошел уже... одновременно модерю VB6 и Access - путаю... виноват, сорри.

Да, массив контролов действительно в Аксессе не создать.
Придется выворачиваться - у каждой надписи метод CLICK свой делать + единая процедура обработки:

Код

Private Sub Надпись0_Click()
    Call Label_Click_Handler(0)
End Sub
Private Sub Надпись1_Click()
    Call Label_Click_Handler(1)
End Sub
Private Sub Надпись2_Click()
    Call Label_Click_Handler(2)
End Sub
...
Private Sub Label_Click_Handler(Index As Integer)
    ....
End Sub




--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
Papirus
Дата 8.9.2005, 08:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 298
Регистрация: 19.4.2005
Где: Санкт-Петербург

Репутация: 2
Всего: 1



Цитата(Akina @ 7.9.2005, 15:12)
Придется выворачиваться - у каждой надписи метод CLICK свой делать

Можно, конечно, и так тоже. Но =ИмяФункции(параметр) мне кажется проще и меньше кода
PM MAIL ICQ   Вверх
Akina
Дата 8.9.2005, 10:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 30
Всего: 454



Цитата(Papirus @ 8.9.2005, 09:04)
Но =ИмяФункции(параметр) мне кажется проще и меньше кода

Именно это в моем примере и эмулируется... в Аксессе это невозможно, ибо не VB, а VBA. Так что не понял, к чему это ты сказал...


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
Papirus
  Дата 8.9.2005, 13:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 298
Регистрация: 19.4.2005
Где: Санкт-Петербург

Репутация: 2
Всего: 1



Цитата(Akina @ 8.9.2005, 10:07)
Цитата (Papirus @ 8.9.2005, 09:04)
Но =ИмяФункции(параметр) мне кажется проще и меньше кода


Именно это в моем примере и эмулируется... в Аксессе это невозможно, ибо не VB, а VBA. Так что не понял, к чему это ты сказал...

=ИмяФункции(параметр) - это прописывается в СВОЙСТВАХ надписи в поле "Нажатие клавиши" ВМЕСТО [процедура обработки события] и не требует создавать процедуру
Цитата(Akina @ 7.9.2005, 15:12)
Private Sub Надпись2_Click()
    Call Label_Click_Handler(2)
End Sub
smile




PM MAIL ICQ   Вверх
Akina
Дата 8.9.2005, 14:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 30
Всего: 454



Papirus
Это абсолютно то же самое по коду и по скорости... впрочем с точки зрения простоты ты совершенно прав...
Однако автоматизировать это будет не совсем просто... хотя в каждом контроле (надписи) можно указать свой параметр.


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
Papirus
Дата 9.9.2005, 10:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 298
Регистрация: 19.4.2005
Где: Санкт-Петербург

Репутация: 2
Всего: 1



Цитата(Akina @ 8.9.2005, 14:11)
хотя в каждом контроле (надписи) можно указать свой параметр.

Вот именно. А автоматизировать разработку в любом случае здесь не удастся
PM MAIL ICQ   Вверх
АлексейМ
Дата 9.9.2005, 19:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 35
Регистрация: 29.8.2005

Репутация: нет
Всего: нет



Спасибо!!!!! smile smile smile
PM MAIL   Вверх
Guest
Дата 11.9.2005, 10:38 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Цитата(Papirus @ 9.9.2005, 10:15)
А автоматизировать разработку в любом случае здесь не удастся

Хотя возможно именно в этом случае я и не прав. Ведь есть возможность указать в процедуре, например, создания лейбла:
Код

Dim I as Integer
I=11
MyForm.MyLabel.OnClick = "=MyProcName(" & I & ")"
.....


  Вверх
Akina
Дата 11.9.2005, 21:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 30
Всего: 454



Цитата(Guest @ 11.9.2005, 11:38)
возможность указать в процедуре, например, создания лейбла:

Какая разница, в какой точке писАть индивидуальный для каждого контрола код?




--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
Papirus
Дата 12.9.2005, 08:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 298
Регистрация: 19.4.2005
Где: Санкт-Петербург

Репутация: 2
Всего: 1



Цитата(Akina @ 11.9.2005, 21:05)
Какая разница, в какой точке писАть индивидуальный для каждого контрола код?


Мож я чё не понял, но при создании коллекции лейблов программно, такой подход очень даж поможет добавить обработчики событий этим лейблам (текстбоксам, комбо, лист и т.д.)

PM MAIL ICQ   Вверх
Гость_Олег
Дата 25.11.2005, 10:49 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Даа, ребята. прикольные советы даёте. А если придется 764 прямоугольника автоматом нарисовать и у всех их одно и то же событие обрабатывать? Например MouseMove? Написать в каждом контроле обработчик и потом чего-то куда-то какой-то функции скармливать? Как говориться, "легких путей не ищем" smile))
А про модули классов кто-нибудь вообще слышал? Это так, подсказка.
smile))
  Вверх
АлексейМ
Дата 25.11.2005, 13:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 35
Регистрация: 29.8.2005

Репутация: нет
Всего: нет



А если поподробнее?
А то я уж задолбался к каждому контролу свою процедуру обработки прописывать - там не одна тыща строк получается.... Неужели всё-таки можно сделать что-то универсальное?
PM MAIL   Вверх
gromikiss
Дата 25.11.2005, 17:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 8
Регистрация: 2.6.2005

Репутация: нет
Всего: нет



Полностью поддерживаю Papirusa smile . Просто и со вкусом, пусть и не очень круто. Главное что бы Леха сообразил. И вопрос к Akine : расскажи поподробнее как сделать такой массив, чтобы у всех надписей было одно имя. smile если не тяжело опубликуй кусок работающей проги, для размещения надписей с одним именем на обычной форме. Или ты имел в виду все надписи будут восприниматься как один объект? Тогда тем более интересно глянуть код программы. Лично я как ни крутил - но увы две надписи с одим и тем же именем не смог прилепить на форму. один объект - одно имя, это же его идентификация. Я не прав? Если да, то в чем? И опять же хочу пример smile
PM MAIL   Вверх
Гость_Олег
Дата 27.11.2005, 17:01 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Ладно, девочки, вот вам пример. Естественно, вопреки пожеланиям трудящихся , никаких извращений вроде макросов не будет. Одинаковых имен контролов тоже - в VBA Access это невозможно, это возможно в простом VB.

К примеру, очень нам захотелось обрабатывать кучу одинаковых контролов. Пусть это будут надписи. Мы хотим, чтобы при наведении на надпись она меняла свой стиль, а при двойном клике - выводила своё имя. Хотим, чтобы имя оно в себе самой и писала. Естественно, на вечер у нас запланирована пьянка, но её нам придется пропустить, если нужно будет писать к каждому контролу обработчик. Не говоря уже о случае, когда произвольное количество контролов создаётся программно.

Подход такой:
1. Создаем свой собственный класс, в котором опишем всё желаемое, что должна делать наша надпись.
2. В каком-нибудь событии нашей формы (Open вполне подойдет) , содержащей надписи, напишем процедуру, просматривающую все контролы этой формы и для всех встретившихся надписей создающая объект нашего собственноручно написанного в п.1. класса. Эти объекты все запихиваются в какую-нибудь коллекцию и там будут храниться, пока существует наша форма.
3. Наслаждаемся.

Поехали. Начнем с формы.

Пишем в модуле нашей формы:
Option Explicit

' Наше событие Open
Private Sub Form_Open(Cancel As Integer)
Dim ctl As Control, oLbLst As LabelListener
Set cllControls = New Collection 'создаем коллекцию где будем хранить
'обработчики событий
For Each ctl In Me.Controls ' просматриваем все контролы формы
If ctl.ControlType = acLabel Then ' нужны только надписи
Set oLbLst = New LabelListener 'создаем наш объект
'самописного класса LabelListener
oLbLst.Init ctl 'вызываем событие объекта,
'обозначающее те события контрола
' которые нам приспичило обрабатывать '
cllControls.Add oLbLst 'добавляем обработчик в коллекцию
End If
Next ctl
End Sub

' Это событие формы просто восстанавливает стиль отображения
' контрола когда если мы уводим с него мышку. DataField - это имя основного раздела нашей формы.
Private Sub DataField_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
On Error Resume Next
lastControl.SpecialEffect = 3
End Sub

'При выгрузке формы хотим очищать коллекцию и уничтожать ссылку на неё,
'чтобы не засирать память компа
Private Sub Form_Unload(Cancel As Integer)
Dim q As Long, i As Long
q = cllControls.Count
For i = 1 To q
cllControls.Remove 1
Next
Set cllControls =Nothing
End Sub

Далее создадим обычный модуль в котором только объявим публичные ссылки
Public lastControl As Control, cllControls As Collection
(lastControl нам нужен, чтобы восстанавливать его отображение при уводе мышки с контрола (и на lastControl и на cllControls есть ссылки и из модуля формы и из нашего самописного модуля класса))

Далее создадим модуль класса, присваиваем ему имя LabelListener и пишем в нем следующее
Option Explicit

Private WithEvents ctlMntr As Label 'объявили переменную с событиями
'типа Надпись

' Обозначаем сам факт наличия соответствующих событий контрола
' Нас интересуют события MouseDown, MouseMove и DblClick
Public Sub Init(ByRef monitorControl As Label)
Set ctlMntr = monitorControl
ctlMntr.OnMouseDown = "[Event Procedure]"
ctlMntr.OnMouseMove = "[Event Procedure]"
ctlMntr.OnDblClick = "[Event Procedure]"
End Sub

' Далее описываем сами события, обратите внимание на специфику их имен
Private Sub ctlMntr_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
lastControl.SpecialEffect = 3
Set lastControl = ctlMntr
ctlMntr.SpecialEffect = 2
End Sub

Private Sub ctlMntr_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
On Error Resume Next
lastControl.SpecialEffect = 3
Set lastControl = ctlMntr
ctlMntr.SpecialEffect = 1
End Sub

Private Sub ctlMntr_DblClick(Cancel As Integer)
lastControl.SpecialEffect = 3
Set lastControl = ctlMntr
ctlMntr.Caption = ctlMntr.Name
End Sub

Всё, программирование закончили. Далее в нашей форме, любым доступным нам способом создаем столько надписей, сколько хотим (в форме максимум 754 контрола можно добавить не вызывая ругательных сообщений). Для пущего эффекта пусть свойство Caption наших надписей изначально будет содержать пустую строку .

Запускаем форму, наслаждаемся, уходим на пьянку.
  Вверх
Papirus
Дата 28.11.2005, 10:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 298
Регистрация: 19.4.2005
Где: Санкт-Петербург

Репутация: 2
Всего: 1



Цитата
Ладно, девочки, вот вам пример.

Была такая рубрика в журнале "Техника молодежи" - "Зачем просто, когда можно сложно" smile
PM MAIL ICQ   Вверх
Гость_Олег
Дата 29.11.2005, 13:38 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Просто просто вам кажется сложно, а то, что сложно на самом деле и есть просто. smileАдекватный подходец должен быть, таварисчи, адекватный.
smile
З.Ы. А еще есть такой девиз, "в жопу нищих!" Не слышали, нет?
  Вверх
Papirus
Дата 29.11.2005, 15:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 298
Регистрация: 19.4.2005
Где: Санкт-Петербург

Репутация: 2
Всего: 1



Не оспариваю, дорогой Гость, Ваш подход. Но рекомендую прочитать первый пост топика. Автору надо было, с моей точки зрения, конкретное, и, отнюдь, не универсальное решение. Чему соответствовали (были адекватны) рекомендации практически всех товарисчей, отвечавших в пределах заданного вопроса. Если вы предложили нечто более универсальное - это Ваше право. Но оно (решение) напоминает мне попытку ввинтить массу лишних наворотов, куда ни попадя. Т.е. каждый раз разрабатывать свою операционку там, где просят простенький АРМ. Сие ИМХО, конечно.
А, так... Не хватает Вам существующих классов - делайте свои. Мериться... э-э-м... крутизной и объемом кода не намерен. Ваш подход - для Ваших задач, а мой - для моих. Если автору удалось помочь - значит сайт сделал свое доброе дело. И для меня лично совершенно не важно, кто лучше помог. Главное, что я и для себя нечто полезное получил. "Век живи - век учись...!" smile

ПыСы. Про жопу и нищих, пардон, не понял. smile
PM MAIL ICQ   Вверх
likhobory
Дата 29.11.2005, 15:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 466
Регистрация: 17.5.2005
Где: Москва

Репутация: 4
Всего: 20



Цитата
При выгрузке формы хотим очищать коллекцию и уничтожать ссылку на неё

позволю себе добавить еще один вариант уничтожения коллекции:
Код
Set cllControls = New Collection
Set cllControls = Nothing


Это сообщение отредактировал(а) likhobory - 29.11.2005, 15:53


--------------------
PM MAIL   Вверх
Гость_Олег
Дата 30.11.2005, 09:38 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











2Papirus. Конечно, конечно, тока вопрос был про массив лэйблов, а ответы - про что-то другое, что в Access явно не работает.
Хотя, честно говоря, подкуплен Вашим умиротворяющим тоном, к которому присоединяюсь с фразой "мне ведь тоже по большому счету без разницы".
З.Ы. Про жопу и нищих - есть у меня один знакомый, контора которого торгует каким-то дорогущим немецким производственным оборудованием. У них эта поговорка относится к клиенту и примерно означает - "не можешь себе позволить - дело твоё, дорабатывай болванки напильником". Я хотел этим сказать - "если не можете себе позволить (из-за лени или еще чего) простое и надежное решение - извращайся с имеющимися заготовками".
Но всё равно-риспект всем присутствующим smile
  Вверх
Papirus
Дата 30.11.2005, 09:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 298
Регистрация: 19.4.2005
Где: Санкт-Петербург

Репутация: 2
Всего: 1



Цитата
тока вопрос был про массив лэйблов,


Вопрос был... читаем тему: "Вывод имени контрола в MsgBox..." и не более того. И ответы были именно об этом. Это Ваши ответы, имхо, опять же:

Цитата
а ответы - про что-то другое

И рекомендации прекрасно работают без дополнительных наворотов...
Цитата
что в Access явно не работает.

Учите Access.

Ну а если есть желание копать ямку в цветочном горшке карьерным экскаватором... Ваше глобальное программистское право.

Цитата
"не можешь себе позволить - дело твоё, дорабатывай болванки напильником".

А на КОНКРЕТНОМ заводе при выполнении КОНКРЕТНЫХ задач вполне возможно в 10 раз надежнее, качественнее, быстрее и дешевле болванки обрабатывать именно напильником.
PM MAIL ICQ   Вверх
Гость_Олег
Дата 1.12.2005, 09:35 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Вполне возможно всё.
Бог с Вами, дерзайте. Не будем устраивать перепалку.
  Вверх
Papirus
Дата 1.12.2005, 09:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 298
Регистрация: 19.4.2005
Где: Санкт-Петербург

Репутация: 2
Всего: 1



Дерзать автору - не мне. smile И выбирать подходящий вариант - тоже ему. smile
PM MAIL ICQ   Вверх
АлексейМ
Дата 4.12.2005, 14:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 35
Регистрация: 29.8.2005

Репутация: нет
Всего: нет



Да уж smile
Главное, что есть из чего!
Всем огромное спасибо!
PM MAIL   Вверх
Страницы: (3) [Все] 1 2 3 
Закрытая темаСоздание новой темы Создание опроса
Правила форума "MS Access"
Akina
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • Используйте теги [code=vb][/code] и [code=sql][/code] для подсветки кода. Используйтe чекбокс "транслит" (возле кнопок кодов) если у Вас нет русских шрифтов.

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Akina.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | MS Access | Следующая тема »


 




[ Время генерации скрипта: 0.0850 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.