Страница: 1 | 2 | 3 | 4 |
Вопрос: Неразрешимая проблема? (WithEvents)
Добавлено: 03.11.04 22:16
Автор вопроса: Yxine H.W. | Web-сайт:
Ответы
Всего ответов: 50
Номер ответа: 31
Автор ответа:
LamerOnLine
ICQ: 334781088
Вопросов: 108
Ответов: 2822
Профиль | | #31
Добавлено: 05.11.04 13:33
Ну так оно и есть. Посему я повторюсь - CreateWindowEx + Static. На VB далеко не уедешь.
Кстати, интересно. В Static есть STN_CLICKED и STN_DBLCLK. А как VB обрабатывает события Label? Неужто через Form_Click и координаты?
Номер ответа: 32
Автор ответа:
Nash Bridges
Вопросов: 5
Ответов: 139
Профиль | | #32
Добавлено: 05.11.04 14:09
Именно. Только этот кусок ректа называется windowless control.
Я ему про вб лейбл, а он мне про статик. Это вообще нормально?
Как раз кроме винконтролов другие есть. Об этом тебе и говорят.
Это не так. Но то, что ты не можешь принимать, что тебе говорят - факт.
Номер ответа: 33
Автор ответа:
LamerOnLine
ICQ: 334781088
Вопросов: 108
Ответов: 2822
Профиль | | #33
Добавлено: 05.11.04 14:17
Именно. Только этот кусок ректа называется windowless control.
Я ему про вб лейбл, а он мне про статик. Это вообще нормально?
Номально. Я тебе уже говорил - CreateWindowEx + Static - вот тебе и Label. Никаких вб-шных извратов. АПИ рулит.
Как раз кроме винконтролов другие есть. Об этом тебе и говорят.
Есть, но не в этом вопросе. Ну так почему бы тебе хотя бы не признать что и подход к этой задаче тоже может быть разным?
Но то, что ты не можешь принимать, что тебе говорят - факт.
Да потому что говоришь ты не в тему. Раздул из вопроса на два поста целую дискуссию на три страницы. Надо это было? На поставленный автором вопрос ответили еще на первой. А какие там еще бывают контролы и как их там заморачивать - это уже, извини, оффтоп.
Номер ответа: 34
Автор ответа:
crackoff
ICQ: 156165990
Вопросов: 12
Ответов: 229
Профиль | | #34
Добавлено: 05.11.04 14:21
>Есть такая утилита SPY++, так она Label вообще не видит, ни hWnd, ни класс этого label'a, ни вообще, что оно существует. Похоже, msvbvm просто на hDC формы рисует текст, не более того. И называет кусок своего rect'a "контролом".
Так и есть. Тебе от этого хуже?
>А вообще static - хорошая вещь, те то что label
AFAIK абсолютно одно и тоже
Номер ответа: 35
Автор ответа:
Nash Bridges
Вопросов: 5
Ответов: 139
Профиль | | #35
Добавлено: 05.11.04 14:33
И вообще:
1. Я дал исчерпывающий ответ на вопрос в первом же посте. И не на первой странице, а в первом посте. Все остальное флуд.
2. Разговор зашел про лейбл. Его тоже оказывается можно сабклассить. Т.к. это статик. Когда оказалось, что это не статик, то появилась мысль, что лейблы юзать не нужно, а нужно юзать статики.
3. Контрол про погоду я так понимаю, тоже юзать не надо, т.к. он левый и не сабкласситься.
4. И конечно, класс - это пошло. Только вот уровня абстракции без них не достичь. А сейчас без абстракции никуда. Никому не нужно создание статиков и их сабклассинг. Всем нужно знать, что погода изменилась.
Последняя мысль - достаточно глубокая. Если сразу не понятно, то через некоторое время станет понятно. Если нет, тогда лучше менять специальность.
Все. Я выступление закончил. Оставайся со своим мнением
Номер ответа: 36
Автор ответа:
LamerOnLine
ICQ: 334781088
Вопросов: 108
Ответов: 2822
Профиль | | #36
Добавлено: 05.11.04 14:39
Если юзать Label как, собственно, Label, то есть никаких событий не обрабатывать, то разница невелика.
Конечно, через АПИ вбшный лэйбл, собственно, не создать, а следовательно, и набор стилей поменьше.
Кроме того, вбшный лейбл труднее сабклассировать, однако это требуется только в подобной ситуации, когда требуется объявить их массив с WithEvents.
Представить себе необходимость такого решения достаточно сложно.
А в целом - да, одно и то же.
Номер ответа: 37
Автор ответа:
LamerOnLine
ICQ: 334781088
Вопросов: 108
Ответов: 2822
Профиль | | #37
Добавлено: 05.11.04 14:52
1. Да, ответ действительно был исчерпывающим. Зато все остальные - гон. Да и первый не дал абсолютно ничего.
2. Да, и лейбл можно сабклассить. Но лучше это делать через статик. Для пользователя это одно и то же.
3. Контрол про погоду может и не левый, но немного из другой оперы. Десять раз тебя просил - прочти что требуется в вопросе. Интересен контрол про погоду - вынеси его в отдельный топик.
4. См. пункт 3.
Никому не нужно создание статиков и их сабклассинг. Всем нужно знать, что погода изменилась.
Последняя мысль - достаточно глубокая. Если сразу не понятно, то через некоторое время станет понятно. Если нет, тогда лучше менять специальность.
Вот тебе точно пора менять профессию. Подайся в политики, будешь представлять интересы миллионов избирателей. А до тех пор либо отвечай на поставленный вопрос по существу, либо не флудь форум.
Все. Я выступление закончил. Оставайся со своим мнением
Бурные овации восхищенной публики!
Номер ответа: 38
Автор ответа:
LamerOnLine
ICQ: 334781088
Вопросов: 108
Ответов: 2822
Профиль | | #38
Добавлено: 05.11.04 15:05
Подозреваю что все равно придется повториться. Так что сделаю это сразу.
Пост 12. Ответ автора вопроса:
Публикую часть кода чтобы проще было разобраться что вообще надо:
Код для формы Form1 (на ней лежит собственный конрол FormEx):
Option Explicit
Код контрола FormEx:
Option Explicit
Private WithEvents Button0 As CommandButton
Private WithEvents Button1 As CommandButton
Private WithEvents ParentFrm As Form
Private Sub UserControl_ReadProperties(PropBag As PropertyBag)
On Error Resume Next
Set ParentFrm = Parent
End Sub
Private Sub ParentFrm_load()
On Error Resume Next
Set Button0 = ParentFrm.Controls.Add("VB.CommandButton", "Button0", ParentFrm)
With Button0
.Left = 10
.Top = 10
.Caption="Номер 0"
.Visible = True
.ZOrder 0
End With
Set Button1 = ParentFrm.Controls.Add("VB.CommandButton", "Button1", ParentFrm)
With Button1
.Left = 100
.Top = 100
.Caption="Номер 1"
.Visible = True
.ZOrder 0
End With
End Sub
Private Button0_Click()
msgbox("Нажата 0"
End if
Private Button1_Click()
msgbox("Нажата 1"
End if
Что делает: при запуске Form1 на ней (через компонент FormEx) автоматически создаются две кнопки.
Так вот замечательно было бы объединить Button1 и Button2 в один элемент управления, скажем с именем Button и
индексами 0 и 1 соответственно. Тогда бы событие Click выглядело бы так:
Private Button_Click(index as integer)
msgbox("Надата " & index)
end sub
Что есть намного лучше чем первый вариант! Но как этот грёбаный Index вмутить inside неизвестно (и вообще можно
ли?).
2LamerOnLine: please, про Load {controlname(index)} не надо больше писать. Это всё даже начинающие знают.
А вот насчёт сабклассинга, то можно ли поподробнее? Хотя бы для приведённого выше примера, а то у меня уже голова
болит думать
---------------------------
Насчет индекса с WithEvents мы сошлись во мнениях. Никак. Рассматриваем другие методы решения ЭТОЙ задачи...
Номер ответа: 39
Автор ответа:
LamerOnLine
ICQ: 334781088
Вопросов: 108
Ответов: 2822
Профиль | | #39
Добавлено: 05.11.04 15:19
Да, забыл выделить жирным шрифтом слова разобраться что вообще надо.
Речь идёт о любом стандартном контроле.
Тут, надеюсь, все понятно.
Хотя usercontrol также можно добавить, это не сложно.
Добавить несложно. Сложно будет с WithEvents, но это был гипотетический вопрос.
Неоконные контролы тоже надо взять в рассчёт (Label, например)!
Согласен, я был не совсем прав с Label, поскольку никогда не пользовался этим угробищем для таких задач, но предложенный мной метод со Static все же был правильным.
По крайней мере, это все работает.
2Nash Bridges - http://www.humanities.edu.ru/db/msg/2792 - форум по философии.
Номер ответа: 40
Автор ответа:
BNX
ICQ: 250394886
Вопросов: 1
Ответов: 35
Web-сайт:
Профиль | | #40
Добавлено: 05.11.04 15:23
некаким макаром
Номер ответа: 41
Автор ответа:
LamerOnLine
ICQ: 334781088
Вопросов: 108
Ответов: 2822
Профиль | | #41
Добавлено: 05.11.04 16:08
Ну все, хватит спорить. Уверен, Nash Bridges, конечно, прав, но дюжа все усложняет. Для частного случая остановимся на чем попроще. Просто это повальное увлечение ООП начинает раздражать. Да, приятнее работать с сообщениями о погоде чем с виндовскими каракулями, но откровенно говоря, из-за подобных абстракционистов нынешние программы, которые уступают качеством продуктам 5 давности, тормозят на четвертых пнях...
Надеюсь на этом мы закончили. Меня до вторника в инете не будет, хотелось бы чтобы к тому времени эта ветка уже потонула.
Номер ответа: 42
Автор ответа:
Yxine H.W.
Разработчик Offline Client
ICQ: 479471
Вопросов: 3
Ответов: 29
Web-сайт:
Профиль | | #42
Добавлено: 05.11.04 16:44
2LamerOnLine, спасибо за код, посмотрю поподробней чуть позже.
Тут закрался ещё один вопрос. Стандартные контролы это так себе, а вот как с помощью Controls.Add добавить на форму свой собственный UserControl с именем MyCtl, например?
Номер ответа: 43
Автор ответа:
Александр
Разработчик Offline Client
ICQ: 204034
Вопросов: 106
Ответов: 1919
Профиль | | #43
Добавлено: 06.11.04 08:26
BNX, хочешь чтобы Павел расчехлил чепушкопушку? )
Если нет, и не хочешь на первых парах схватить череп, то...
Я давно за тобой наблюдаю...
Номер ответа: 44
Автор ответа:
CyRax
Разработчик Offline Client
ICQ: 204447456
Вопросов: 180
Ответов: 4229
Web-сайт:
Профиль | | #44
Добавлено: 06.11.04 08:50
А ты не наблюдай, здоровее будешь.
Номер ответа: 45
Автор ответа:
Mihalыch
ICQ: 373-509-101
Вопросов: 56
Ответов: 330
Профиль | | #45
Добавлено: 06.11.04 10:20
Согласен глупо, смешно, но…
Код формы:
Option Explicit
 im btn() As New clsControls
Private WithEvents ParentFrm As Form
Private Sub Form_Load()
ReDim btn(1)
Set ParentFrm = Me
ParentFrm_load
End Sub
Private Sub ParentFrm_load()
 im i As Integer
For i = 0 To 1
Set btn(i).btn = ParentFrm.Controls.Add("VB.CommandButton", "Button" & i, ParentFrm)
With btn(i).btn
.Left = 10 * (i * 100)
.Top = 10 * (i * 100)
.Caption = "Button # " & i
.Visible = True
End With
Next i
End Sub
Код модуля класса:
Option Explicit
Public WithEvents btn As CommandButton
Private Sub btn_Click()
MsgBox "Name of the pressed button - " & btn.Name
End Sub