powered by simpleCommunicator - 2.0.54     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / комбобокс по феншую
58 сообщений из 58, показаны все 3 страниц
комбобокс по феншую
    #37495498
Фотография BelowZero
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
цель: при щелчке на ячейку таблицы должен открыться комбобокс. я могу сделать так, что при нажатии на таблицу появляется комбобокс, при втором нажатии на стрелочку комбобокс открывается. но это очень муторно. нужно, чтобы хватало одного щелчка на ячейку. заранее спс
...
Рейтинг: 0 / 0
комбобокс по феншую
    #37495700
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
SendMessage MyCombobox.hWnd, CB_SHOWDROPDOWN,  1 ,  0 
надеюсь, что объявление функции и константы ты сможешь найти сам
...
Рейтинг: 0 / 0
комбобокс по феншую
    #37495980
Фотография BelowZero
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.Pro,

спасибо... только я немного не догнал... первый клики проходит норм. комбобокс появляется в нужном месте, открывается, но на второй клик таблица не реагирует, просто комбобокс снова теряет фокус и сворачивается. перемещается только после второго клика. в чём дело? пытался сначала закрыть - от этого ничего не меняется. пытался передать фокус другому элементу - тогда комбобокс вооообще не двигается с места... воть...
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
Private Sub MSFlexGrid1_Click()
SendMessage Combo1.hwnd, CB_SHOWDROPDOWN,  0 ,  0 
Combo1.Visible = True
Combo1.Left = MSFlexGrid1.Left +  3400 
Combo1.Top = MSFlexGrid1.Top + (MSFlexGrid1.RowSel) * MSFlexGrid1.RowHeight( 0 )
SendMessage Combo1.hwnd, CB_SHOWDROPDOWN,  1 ,  0 
Combo1.SetFocus
end sub
...
Рейтинг: 0 / 0
комбобокс по феншую
    #37496198
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
не очень понял, в чем проблема

попробуй сначала поставить фокус, а потом раскрывать
...
Рейтинг: 0 / 0
комбобокс по феншую
    #37496210
Фотография BelowZero
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.Pro,

если запустить приведённый выше код, 1 раз комбобокс появится в нужном месте и откроется. нажать на другую ячейку - ничего не произойдёт. придётся нажать 2 раза. мнее кажется, это как-то связано с фокусом... завтра буду думать на свежую голову
...
Рейтинг: 0 / 0
комбобокс по феншую
    #37496214
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
лень делать тестовый проект - сделай, выложи, посмотрю

кстати, обрати внимание на существование свойств CellLeft, CellTop, CellWidth и CellHeight
...
Рейтинг: 0 / 0
комбобокс по феншую
    #37497039
Фотография BelowZero
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.Pro,

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
Option Explicit
Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, _
    ByVal wMsg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
    Private Const CB_SHOWDROPDOWN As Long = &H14F

Private Sub Form_Load()
MSFlexGrid1.Rows =  10 
MSFlexGrid1.Cols =  10 
End Sub

Private Sub MSFlexGrid1_Click()
SendMessage Combo1.hwnd, CB_SHOWDROPDOWN,  0 ,  0 
Combo1.Visible = True
Combo1.Left = MSFlexGrid1.Left +  200 
Combo1.Top = MSFlexGrid1.Top + (MSFlexGrid1.RowSel) * MSFlexGrid1.RowHeight( 0 )
SendMessage Combo1.hwnd, CB_SHOWDROPDOWN,  1 ,  0 
Combo1.SetFocus
End Sub
при этом получается вот такая фигня.....----->>>
p/s CellLeft, CellTop, CellWidth и CellHeight - что за свойства? свойства чего?
...
Рейтинг: 0 / 0
комбобокс по феншую
    #37497114
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я ведь сказал, что мне лень делать тестовый проект самому. По-моему это тебе надо, а не мне. Выложишь проект - посмотрю.
...
Рейтинг: 0 / 0
комбобокс по феншую
    #37497136
Фотография BelowZero
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.Pro,

не очень понимаю... это не сойдёт? ктрл С ктрл V... вот и весь проект. ну +мсгрид и момбобокс на форме
...
Рейтинг: 0 / 0
комбобокс по феншую
    #37497183
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Когда я давал тебе примеры с контролами, я почему-то не ленился выкладывать проекты, ты почему-то предпочитаешь дискутировать. Лично для тебя - нет, не сойдет.
...
Рейтинг: 0 / 0
комбобокс по феншую
    #37497215
Фотография BelowZero
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.Pro,
...
Рейтинг: 0 / 0
комбобокс по феншую
    #37497241
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если не игнорировать мои советы, все работает корректно.

Мля, нафига я отвечаю????
Нафига вопросы задаются, если ответы не интересуют?
...
Рейтинг: 0 / 0
комбобокс по феншую
    #37497262
Фотография BelowZero
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.Pro,

каким советам? поставить фокус, а потом открывать? не помогает
...
Рейтинг: 0 / 0
комбобокс по феншую
    #37497308
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Тогда начнем с того, что ты не написал, чего именно ты хочешь добиться.
...
Рейтинг: 0 / 0
комбобокс по феншую
    #37497340
Фотография BelowZero
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.Pro,

мсгрид. столбик мсгрида. при нажатии на любую ячейку из этого столбика появляется на месте ячейки комбобокс и открывается. ***блаблабла промежуточные нужды*** при нажатии на другой ячейке комбобокс сворачивается и появляется в новом месте, открывается. но на деле не получается. закрытый комбобокс перемещается норм, а открытый нет. вручную перед перемещением
Код: plaintext
SendMessage Combo1.hwnd, CB_SHOWDROPDOWN,  0 ,  0 
не помогает
...
Рейтинг: 0 / 0
комбобокс по феншую
    #37497347
Фотография Konst_One
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
он не может быть открытый при перемещении. у него своя очередь сообщений срабатывает и он всегда свернёт список
...
Рейтинг: 0 / 0
комбобокс по феншую
    #37497359
Фотография BelowZero
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Konst_One,

тогда в чём проблема?)) поч не перемещается так, как текстбокс?... код тот же, всё то же самое... p/s перемещается норм, если вырезать строчку с открытием
...
Рейтинг: 0 / 0
комбобокс по феншую
    #37497363
Фотография Konst_One
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
сначала закрыть (завершить событие), потом перемещать
...
Рейтинг: 0 / 0
комбобокс по феншую
    #37497381
Фотография BelowZero
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Konst_One,

т.е.? какое событие? закрыть комбобокс - не вариант. пробовал , даже под таймером.
...
Рейтинг: 0 / 0
комбобокс по феншую
    #37497390
Фотография Konst_One
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
надо выполнить событие CLICK по элементу открытого списка
...
Рейтинг: 0 / 0
комбобокс по феншую
    #37497401
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В общем-то Костя прав.

Открой любое диалоговое окно (да хоть бы свойство проекта), разверни любой комбобокс, затем попробуй нажать любую кнопку или открыть другой комбобокс и т.п. С первого раза у тебя не выйдет - это нормальное поведение развернутого комбобокса.

Можно, конечно, исхитриться.....

А еще подумай, если комбобокс тебе не нужен для ввода текста, а только для выбора из списка, используй вместо него листбокс.
...
Рейтинг: 0 / 0
комбобокс по феншую
    #37497433
Фотография BelowZero
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Konst_One,

имитировать при помощи клика левой кнопки мыши по выделенному элементу открытого комбобокса? или как-то более цивилизованно?

Shocker.Pro,

какое объявление для листбокса?
Код: plaintext
SendMessage MyCombobox.hWnd, CB_SHOWDROPDOWN,  1 ,  0 
как и
Код: plaintext
SendMessage MyCombobox.hWnd, LB_SHOWDROPDOWN,  1 ,  0 
наверняка уже не проканает...
...
Рейтинг: 0 / 0
комбобокс по феншую
    #37497448
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну-ну. А для текстбокса у тебя какое объявление?
...
Рейтинг: 0 / 0
комбобокс по феншую
    #37497458
Фотография BelowZero
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.Pro,

неправильно выразился... но уверен, что ты и так понял) нуно событие для развёртывания... разворачивания... открытия листбокса(имитация нажатия на стрелочку)
...
Рейтинг: 0 / 0
комбобокс по феншую
    #37497466
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я тебе задал вполне конкретный вопрос.
Если ты перефразировал, то и я перефразирую.

Какое событие ты используешь для текстбокса для "развёртывания... разворачивания... открытия текстбокса(имитация нажатия на стрелочку)"?
Спрашиваю потому, что ты сказал, что у тебя текстбокс не вызывает вопросов.
...
Рейтинг: 0 / 0
комбобокс по феншую
    #37497482
Фотография BelowZero
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.Pro,

так текстбокс и не надо разворачивать) ....... только ща посмотрел, что такое листбокс... какая-то фигня с 2 миниатюрными стролочками... как там вообще что-то можно выбрать?т.е. выбрать-то можно, но не видно вариантов выбора... p/s мне нравилось попупменю. но создать это меню нажатием на ячейку наверно не выйдет. пока людирует комбобокс
...
Рейтинг: 0 / 0
комбобокс по феншую
    #37497496
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
BelowZeroтак текстбокс и не надо разворачиватьа с чего ты решил, что листбокс надо разворачивать
BelowZero только ща посмотрел, что такое листбоксКлассно, то есть тут полчаса дискутируешь даже не зная о чем. Так посмотри сначала, что это такое
BelowZeroмне нравилось попупменю. но создать это меню нажатием на ячейку наверно не выйдетвыйдет
...
Рейтинг: 0 / 0
комбобокс по феншую
    #37497519
Фотография BelowZero
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.Pro,

Shocker.Proвыйдет COOl) эм... как?)) после нажатия на мсгрид нужно как-то запихнуть значения из некоторых ячеек в меню... даже не представляю как... (я умею запихивать значения в лейблы, текстбоксы и их потомков, умею создавать меню до начала запуска проги) p/s до этого обсуждали комбобокс, с ним более менее разобрался. думал, листбокс - что-то подобное. с ним раньше никогда не сталкивался
...
Рейтинг: 0 / 0
комбобокс по феншую
    #37497550
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Почитай о создании меню
Материалов полно.
...
Рейтинг: 0 / 0
комбобокс по феншую
    #37497559
Фотография BelowZero
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.Pro,

как создать-то знаю
Конечно, можно обойтись и без меню. Я, например считаю, что меню надо использовать в сложных программах, чтобы избежать использования множества командных кнопок. Однако меню придает программе профессиональный, "не детский" вид, в отличие от множества насобаченых на форму кнопок. Для добавления меню имеется редактор Menu Editor. С его помощью и можно как раз добавлять, изменять, уничтожать меню.

Создай новый exe-проект. Вверху окна VB найди кнопку инструменты, и из выпадающего меню выберем Редактор Меню (рис.18). Обратит внимание, что вызов редактора меню доступен, когда ты нахожишься в окне формы - объект. Если ты редактируешь код программы или программа запущена, вызвать редактор меню нельзя.

Рисунок 18.
У нас в общем-то откроется окно меню редактора (Рис.19)

Рисунок 19.

В первой строке этого чуда "Название" (Caption) мы пишем название меню, то, что у на отобразиться на экране при запуске программы. А во второй строке, "Имя" (Name) имя меню, которое используется в программном коде. Заполнение обоих этих полей обязательно.
Для примера слепим меню, которое (должно же меню что-то делать), изменяет свойства графического объекта Shape, поскольку мы наплевали на него в прошлой главе. Поэтому, нажмем кнопку OK, отчего наше окно редактора меню закроется, положим на форму Form1 объект Shape1. По умолчанию он у нас будет в виде прямоугольника. Снова откроем редактор точно также, как и в первый раз.

Итак, в названии пишем "Фигура", а в имени - mnuShape. Почему mnu? Потому что так принято, и в коде программы потом будет легче отличать меню от прочих переменных.

Из нашего пункта меню Фигура должно выскакивать, например, подменю Прямоугольник и подменю Круг. Мы можем нажать кнопку Дальше и курсор в нижнем большом окне (окно списка меню) перескочит на следующую строчку, сейчас пустую, а можем просто мышь кликнуть по нужной строке и таким образом перейти к следующему пункту. Перейдем на вторую строку и напишем в названии Прямоугольник, а в имени - mnuPram. Перейдем на третью строчку и напишем соответственно Круг и mnuKrug. Поскольку названия и имена я придумывал на ходу, прошу простить за их несуразность.
Вот и здорово, но если мы запустим нашу программу, то увидим, что наши названия расположились рядком, и никаких подменю не получилось. Для того чтобы строчку Прямоугольник переместить в подменю, нужно щелкнуть по ней в окне списка меню (при этом она выделится) и нажать маленькую стрелочку вправо. Ты увидишь, что строка переместилась вправо, как бы стала на другой уровень. Нажимая кнопки вправо и влево мы создаем подменю второго, третьего и т.д. уровня или выводим из подменю на более высокий уровень. Теперь посмотри на эту таблицу.



Определение уровня подменю Вид в редакторе меню Вид в программе
Мы не нажимали стрелку вправо, все наши пункты меню расположились в главном меню, подменю нет.
Мы нажали на стрелку вправо на строках "Прямоугольник" и "Круг" один раз, отчего они сдвинулись на 4 пикселя вправо и вошли в меню "Фигура", как строки подменю.
Мы нажали на стрелку вправо на строках "Простой", "Скругленный", "Квадрат", а также "Круглый" и "Овальный" два раза, отчего они сдвинулись в право на 8 пикселей и вошли в подменю следующего уровня (в подменю "Прямоугольник" и подменю "Круг" соответственно).


Сдвинем строчку Круг, как в таблице. Вот теперь у нас настоящее подменю. А кнопочками вверх и вниз мы можем изменять их положение по вертикали.

Теперь самостоятельно, так же, как в таблице, введем в подменю Прямоугольник подменю следующего уровня, куда войдет
Название Простой Имя mnuProstoi
Название Скругленный Имя mnuPramRound
Название Квадрат Имя mnuKvadrat
а в подменю Круг подменю следующего содержания (уровень тот же, что и у подменю Прямоугольник)
Название Круглый Имя mnuKrugli
Название Овальный Имя mnuOval

Кроме того еще введем паралельно меню Фигура меню Заливка (Самого первого уровня) c именем mnuPaint и в него поместим следующие подменю (их нужно передвинуть с помощью стрелки вправо на следующий уровень)
Название Залить Имя mnuZalit
Название Прозрачно Имя mnuProzrachno
Название Горизонтальная Имя mmuHorizont
Название Вертикальная Имя mnuVertical

В поле "Быстрая клавиша" из выпадающего списка мы можем назначить клавишу или комбинацию клавиш, для каждого пункта нашего меню.

Общий вид редактора меню должен получиться, как на рисунке 20.

Рисунок 20.

Если горячие клавиши были тобой назначены, они тоже показаны в окне списка меню (Ctrl+S, Ctrl+K и т.д.)

Что еще есть в редакторе меню. Ну понятно, что с помощью кнопок "Дальше", "Вставить", "Удалить" мы можем передвигаться в окне списка меню, вставлять и удалять строки. Если поставить галочку возле "Отмечено", то в меню данная строка тоже будет помечена галочкой (Это для переключателей) только эта галка так и будет светиться для нас это пока совершенно бесполезно. Галочка возле "Видимо" указывает на то, что эта стока видима, если ее убрать, пользователь не будет видеть эту строчку меню. Галочка возле "Включено" показывает, что эта строчка доступна пользователю. Если ее убрать, то эта строка будет показана тускло и кликать по ней пользователю будет бесполезно. Вообще-то эти свойства для пользы дела надо задавать программно, а не тыкать сейчас по ним мышью.


Дальше надо заставить наше меню работать. Нажми кнопку OK и выйди из редактора меню.
Внимание. Если кнопка OK не будет нажата, твои изменения в меню не сохранятся!
Закрой это чертов редактор и перейди к окну редактирования кода. Кликни по полю (General) и опаньки, все наши строчки там есть! Можно кликать и делать процедуру для любой строчки, то бишь пункта меню (рисунок 21).

Рисунок 21.
Но нам нужны только пунты самого последнего уровня, потому, что предыдущих уровней мы используем только для выбора.
Пишем процедуры, которые включим изменения свойств объекта Shape ( ну там заливку, и вид). Свойств объекта Shape на самом деле больше, но мы используем некоторые из них:

Private Sub mmuHorizont_Click()
Shape1.FillStyle = 2
End Sub

Private Sub mnuKrugli_Click()
Shape1.Shape = 3
End Sub

Private Sub mnuKvadrat_Click()
Shape1.Shape = 1
End Sub

Private Sub mnuOval_Click()
Shape1.Shape = 2
End Sub

Private Sub mnuPramRound_Click()
Shape1.Shape = 4
End Sub

Private Sub mnuProstoi_Click()
Shape1.Shape = 0
End Sub

Private Sub mnuProzrachno_Click()
Shape1.FillStyle = 1
End Sub

Private Sub mnuVertical_Click()
Shape1.FillStyle = 3
End Sub

Private Sub mnuZalit_Click()
Shape1.FillStyle = 0
End Sub


Можно запустить программу, и с помощью меню изменять вид объекта Shape.

Но мы еще с меню не закончили. Допусти нам захотелось, чтобы меню появлялось не в стандарном месте в верхней строке нашего окна, а допустим, где угодно, например около курсоры мыши. Давайте "Фигура" оставим как есть, а меню "Заливка" превратим в контекстное, т. е. всплывающее. Но для этого сначала познакомимся с методом PopupMenu.

Метод PopupMenu

С помощью этого метода мы можем создавать всплывающие меню в любом месте нашей формы (одновременно отображаться может только одно).
Синтаксис его таков

объект.PopupMenu имяменю, флаг, позицияX, позицияY, выделеннаястрока

Объект - необязательный параметр, если опущен, то принимается форма, на которой фокус
Имяменю - имя всплявающего меню. Обязательный параметр.
Флаг - константа или значение, указывающее расположение и поведение меню. Список констант приведен в таблице ниже. При использовании двух констант (по одной из каждой группы) необходимо между ними ставить логический оператор Or.
ПозицияX, позицияY - координаты X и Y, указывающие, где отобразиться окно. Если они опущены, то принимаются координаты мыши.
Выделеннаястрока - название элемента всплывающего меню, которое отобразится жирным шрифтом.

Таблица флагов, указывающих позицию и поведение контекстного меню.


Константа Числовое значение константы Описание
Размещение
vbPopupMenuLeftAlign 0 По умолчанию. Размещение по x левого края всплывающего меню
VbPopupMenuCenterAlign 4 Центрирование всплывающего меню по x.
VbPopupMenuRightAlign 8 Размещение по x правого края всплывающего меню.
Поведение
vbPopupMenuLeftButton 0 По умолчанию. Элемент на всплывающем меню реагирует только на щелчок левой кнопки мыши.
VbPopupMenuRightButton 8 Элемент на всплывающем меню реагирует на щелчки и левой и правой кнопки мыши.

Контекстное меню.
Теперь, опираясь на метод PopupMenu сделать контекстное меню раз плюнуть. Создадим процедуру, которая срабатывает на щелчок мыши по форме Form_Click и вставим в нее наш новый метод:

Private Sub Form_Click()
Form1.PopupMenu mnuPaint, , , , mnuZalit
End Sub

Как видишь, mnuPaint - это название нашего меню "Заливка", а mnuZalit - имя строки "Залить", оно будет выделяться жирным цветом. Остальные опции мы опускаем, хочешь, пробуй сам. Поскольку теперь меню "Заливка" в старом месте, в верхней строке формы нам не нужна, сделаем ее невидимой. Зайдем в Редактор Меню выделим в окне списка меню строку "Заливка" и поставим галочку у "Видимо". Ну, пока хватит. Если понадобиться исходник, то как всегда, его можно скачать вверху страницы.


как создать меню на ходу, программно.... хз
...
Рейтинг: 0 / 0
комбобокс по феншую
    #37497569
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
BelowZeroкак создать меню на ходу, программночерез массив контролов: создать один элемент заранее (с индексом), а остальные пункты - как любой элемент массива контролов - командой Load
...
Рейтинг: 0 / 0
комбобокс по феншую
    #37497585
Фотография BelowZero
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.Pro,

Shocker.Proмассив контролов - не знаю, что это, но звучит зловеще, учитывая недавнюю мороку с созданием контрола...
...
Рейтинг: 0 / 0
комбобокс по феншую
    #37497614
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
У тебя морока с любым чихом, так что ничего страшного.
...
Рейтинг: 0 / 0
комбобокс по феншую
    #37497619
Фотография BelowZero
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.Pro,

такс... создал меню из 1 строки с индексом... остальные добавлять в ходе программы через load? как?
...
Рейтинг: 0 / 0
комбобокс по феншую
    #37497621
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Через Load
...
Рейтинг: 0 / 0
комбобокс по феншую
    #37497641
Фотография BelowZero
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.Pro,

нашёл статейку, добавляются строкив меню через AppendMenu. т.е. при нажатии на мсгрид появится полноценное меню. но как узнать, что было выбрано пользователем? я не могу создать обрабатывающие события для вариантов меню, т.к. сам не знаю, что в меню будет записано...
...
Рейтинг: 0 / 0
комбобокс по феншую
    #37497645
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
BelowZeroчерез AppendMenu. т.е. при нажатии на мсгрид появится полноценное меню. но как узнать, что было выбрано пользователем? я не могу создать обрабатывающие событияСпрашивай у того, кто посоветовал AppendMenu

Лично я советовал Load
...
Рейтинг: 0 / 0
комбобокс по феншую
    #37497652
Фотография BelowZero
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.Pro,

я не понял как через load... воть
Код: plaintext
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.
Const MF_CHECKED = &H8&
 Const MF_APPEND = &H100&
 Const TPM_LEFTALIGN = &H0&
 Const MF_DISABLED = &H2&
 Const MF_GRAYED = &H1&
 Const MF_SEPARATOR = &H800&
 Const MF_STRING = &H0&
 Private Type POINTAPI
 x As Long
 y As Long
 End Type
 Private Declare Function CreatePopupMenu Lib "user32" () As Long
 Private Declare Function TrackPopupMenu Lib "user32" (ByVal hMenu As Long, ByVal wFlags As Long, ByVal x As Long, ByVal y As Long, ByVal nReserved As Long, ByVal hwnd As Long, ByVal lprc As Any) As Long
 Private Declare Function GetSystemMenu Lib "user32" (ByVal hwnd As Long, ByVal bRevert As Long) As Long
 Private Declare Function AppendMenu Lib "user32" Alias "AppendMenuA" (ByVal hMenu As Long, ByVal wFlags As Long, ByVal wIDNewItem As Long, ByVal lpNewItem As Any) As Long
 Private Declare Function DestroyMenu Lib "user32" (ByVal hMenu As Long) As Long
 Private Declare Function GetCursorPos Lib "user32" (lpPoint As POINTAPI) As Long
 Dim hMenu As Long

 Private Sub Command1_Click()
 'добавляем еще один пункт меню
 AppendMenu hMenu, MF_STRING, ByVal  0 &, "новое меню"
 End Sub

 Private Sub Form_Load()
 'Создаём пустое всплывающие меню
 hMenu = CreatePopupMenu()
 'Добавляем несколько пунктов в меню
 AppendMenu hMenu, MF_STRING, ByVal  0 &, "Hello !"
 AppendMenu hMenu, MF_GRAYED Or MF_DISABLED, ByVal  0 &, "Testing ..."
 AppendMenu hMenu, MF_SEPARATOR, ByVal  0 &, ByVal  0 &
 AppendMenu hMenu, MF_CHECKED, ByVal  0 &, "TrackPopupMenu"
 End Sub

 Private Sub Form_MouseUp(Button As Integer, Shift As Integer, x As Single, y As Single)
 Dim Pt As POINTAPI
 'Получаем позицию курсора мыши
 GetCursorPos Pt
 If Button =  1  Then
 'Показываем всплывающие меню
 TrackPopupMenu hMenu, TPM_LEFTALIGN, Pt.x, Pt.y,  0 , Me.hwnd, ByVal  0 &
 Else
 'Показываем всплывающее меню по умолчанию
 TrackPopupMenu GetSystemMenu(Me.hwnd, False), TPM_LEFTALIGN, Pt.x, Pt.y,  0 , Me.hwnd, ByVal  0 &
 End If
 End Sub

 Private Sub Form_Unload(Cancel As Integer)
 'Уничтожаем наше меню
 DestroyMenu hMenu
 End Sub

т.е. теперь я могу создать программно меню, запихнуть в него всё, что нужно откуда нужно... но... как узнать, что пользователь выберет? например у него выйдет меню "морковка" "не морковка" "ёжик". пользователь выберет "ёжик". как я узнаю, что он выбрал?
...
Рейтинг: 0 / 0
комбобокс по феншую
    #37497713
Фотография BelowZero
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
guys? are you here? guys.. it is not funny
...
Рейтинг: 0 / 0
комбобокс по феншую
    #37497729
Фотография BelowZero
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.Pro, Konst_One,

пасяп в помощи по этому топику. т.к. тема плавно перетекла в попупменю, создам новый топик
...
Рейтинг: 0 / 0
комбобокс по феншую
    #37497848
Фотография BelowZero
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Konst_Oneнадо выполнить событие CLICK по элементу открытого списка
как выполнить событие CLICK по элементу открытого списка? имитировать нажатие левой кнопки мыши?
Код: plaintext
combo1_click
или
Код: plaintext
Combo1.Activate
не канает... насильственный программный выбор одной из строк тоже не помогает
Код: plaintext
Me.Combo1.Text =  1 
...
Рейтинг: 0 / 0
комбобокс по феншую
    #37497880
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
напрямую у тебя этот фокус не пройдет
открытый комбобокс отбирает клик у других объектов и тратит на свое закрытие
заниматься сабклассингом нет никакого резона в данной задаче

самое логичное, если не нужен одновременный ввод текста и выбор из списка, воспользоваться листбоксом вместо комбобокса
...
Рейтинг: 0 / 0
комбобокс по феншую
    #37497887
Фотография BelowZero
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.Pro,

а бывают нормальные листбоксы, в которых заранее видно, что вибирается? а то приходится методом тыка перебирать строки в листбоксе
...
Рейтинг: 0 / 0
комбобокс по феншую
    #37497892
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
BelowZeroв которых заранее видновопрос не понят. Работа со списком идет там так же, как и в комбобоксе, что добавил, то и видишь.
...
Рейтинг: 0 / 0
комбобокс по феншую
    #37497900
Фотография BelowZero
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.Pro,

я там вижу одну узкую строчку и всё. и 2 мелкие стрелочки, при нажатии на которые в строке появляется новая строка и тд
...
Рейтинг: 0 / 0
комбобокс по феншую
    #37497943
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ну классно.
еще флексгрид сделай высотой в одну строку - тоже прикольно будет его листать
...
Рейтинг: 0 / 0
комбобокс по феншую
    #37498350
TpaBka
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Собственно по теме топика
Вот не давно склепал:

Данный ComboBox это - TextBox+ComandButton+VSFlexGrid (на своей форме)
Главная особенность моего «комбобокса» состоит в том, что высота строк в выпадающем списке подстраивается под размер текста.
Да кстати в нем присутствует, как по мне корявая процедура может, кто-то подскажет альтернативное решение.
В общем, когда пользователь начинает вбивать текст в TextBox, в событии Change отрабатывается следующая процедура (это конечно не все, но что бы понять суть достаточно):
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
RsVSF.Find RsVSF( 0 ).Name & " Like '" & Text1 & "%'" 'Здесь ищем запись в рекордсете которая начинается с текста введенного в Text1  

InText = Text1 ' Запоминаем введенный текст пользователем!     

If RsVSF.AbsolutePosition >  0  Then ' Проверяем нашлась ли соответствующая запись в рекордсете, и если нашлась то

    Text1 = RsVSF( 0 ) ' присваиваем ее Text1   
    Text1.SelStart = Len(RsVSF( 0 )) ' Перееводим курсор в конец текста Text1   

                 If IsFormLoaded("ComboList") = True Then '  IsFormLoaded –функция для проверки загруженности формы ComboList
                        ComboList.VSFlexGrid1.Row = RsVSF.AbsolutePosition –  1  ' Поиск нужной записи в флексе и ее выделение цветом 
                        ComboList.VSFlexGrid1.ShowCell ComboList.VSFlexGrid1.Row,  0 
                        ComboList.VSFlexGrid1.CellBackColor = &H8000000D
                        ComboList.VSFlexGrid1.CellForeColor = &H80000005
                 End If

  For i = Len(RsVSF( 0 )) To Len(InText) +  1  Step - 1 '  А вот этот корявый кусок
       SendKeys("+{Left}")  
  Next  

Дело в том, что нужно выделить текст в Text1 от конца текста до InText (-текста который ввел пользователь до присвоения записи из RsVSF Text-у1) и поставить курсор сразу же после InText
Метод SelLength позволяет выделять текст только вперед и курсор ставится соответственно в конце выделенного текста, и если длина текста будет превышать размер TextBoxа то в TextBox-е отобразится нижняя часть текста что есть неприемлемо.
Ну типо вот так.
...
Рейтинг: 0 / 0
комбобокс по феншую
    #37498946
Фотография BelowZero
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.Pro,

оказывается, листбокс то, что было нужно! спс)

TpaBka,

любительские советы: 1) вместо выделения использовать перерисовку букв или фона, или изменение шрифта. типа по лучить
2) иммитировать нажатия мыши
...
Рейтинг: 0 / 0
комбобокс по феншую
    #37499001
TpaBka
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2-ой вариант интересный
Я над ним уже думал
Может, кто подскажет, как имитировать click: Shift+LMouseButton
И как получить X,Y координаты коретки в TextBoxe
...
Рейтинг: 0 / 0
комбобокс по феншую
    #37499020
TpaBka
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Блин опять написал и не подумал (
...
Рейтинг: 0 / 0
комбобокс по феншую
    #37499043
Фотография BelowZero
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
TpaBka,

а получить координаты букв в текстбоксе ты можешь? если да, то координаты каретки будут равно координате последней буквы + пара твипов. если нет, то у тебя новый тупик - узнать, до куда произвести выделение.
поэтому можно попробовать 3 вариант:
Код: plaintext
1.
2.
3.
4.
'фокус на текстбокс
'сендкейс енд
'зажать ктрл
'сендкейс стрелочка влево столько раз, сколько букв до нужного места
'отпустить ктрл
примерно так
...
Рейтинг: 0 / 0
комбобокс по феншую
    #37499074
Фотография BelowZero
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
сорь, не ктрл, а шифт
и правильней это будет выглядеть так
Код: plaintext
1.
2.
3.
4.
'фокус на текстбокс
'сендкейс енд
'for х = 1 to количество букв до места остановки
'сендкейс шифт+стрелка влево
'next х
...
Рейтинг: 0 / 0
комбобокс по феншую
    #37499091
TpaBka
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
)
11500577

Код: plaintext
1.
2.
For i = Len(RsVSF( 0 )) To Len(InText) +  1  Step - 1 '  А вот этот корявый кусок
       SendKeys("+{Left}")  
Next 
...
Рейтинг: 0 / 0
комбобокс по феншую
    #37499102
TpaBka
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Может как-то так:
Переводим курсор в конец текста Text1.SelStart = Len(Text1)
Затем удерживаем шифт в нажатом состоянии (не знаю, как сделать)
Переводим курсор в нужную позицию Text1.SelStart = Len(InText1)
Затем отпускаем шифт (не знаю, как сделать)
...
Рейтинг: 0 / 0
комбобокс по феншую
    #37499107
Фотография BelowZero
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
TpaBka,

хм)) сорь, упустил из виду. эмитация нажатий клавиш мыши врят ли превзойдёт сендкейс. если нет специальных функций для выделения с конца текста, то сендкейс остаётся лучшим вариантом. мб кто-нить что-нить ещё подскажет)
...
Рейтинг: 0 / 0
комбобокс по феншую
    #37499160
TpaBka
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ну имитацию зажимания шифта нашел :

Код: plaintext
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.
Private Type KEYBDINPUT ' событие клавиатуры
  wVk As Integer
  wScan As Integer
  dwFlags As Long
  time As Long
  dwExtraInfo As Long
End Type

Private Type INPUT_TYPE ' событие ввода
  dwType As Long
  xi( 0  To  23 ) As Byte
End Type

Const INPUT_KEYBOARD =  1     ' константа определяет ввод с клавиатуры
Const VK_SHIFT = &H10       ' код клавиши SHIFT

Private Declare Sub CopyMemory Lib "kernel32.dll" Alias "RtlMoveMemory" (Destination As Any, Source As Any, ByVal Length As Long)
Private Declare Function SendInput Lib "user32.dll" (ByVal nInputs As Long, pInputs As INPUT_TYPE, ByVal cbSize As Long) As Long
   
Sub setShift(ShiftState As Boolean)
Dim Inp As INPUT_TYPE
Dim xxi As KEYBDINPUT
Inp.dwType = INPUT_KEYBOARD '   имитировать ввод с клавиатуры
xxi.wVk = VK_SHIFT      '   код клавиши SHIFT
xxi.wScan =  0            '   сканкод - не нужен
xxi.dwExtraInfo =  0      '   экстраинформация - не нужна
xxi.time =  0             '   время - не нужно
If (ShiftState) Then    '
    xxi.dwFlags =  0      ' Нажатие клавиши
Else
    xxi.dwFlags =  2      ' Отпускание клавиши
End If

CopyMemory Inp.xi( 0 ), xxi, Len(xxi) ' копировать структуру xxi в массив байт Inp.xi
SendInput  1 , Inp, Len(Inp) ' WinApi функция поссылки keystrokes, mouse motions, и button clicks
'Спасибо Paul Kuliniewicz
End Sub

Вызывать:

Код: plaintext
1.
2.
setShift (True) ' зажимаем
setShift (False) ' отпускаем

Но почему-то не выделяет (((
...
Рейтинг: 0 / 0
комбобокс по феншую
    #37499664
Фотография BelowZero
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
TpaBka,

а чем плох этот код? разве это не решение поставленной задачи? 11503864
...
Рейтинг: 0 / 0
комбобокс по феншую
    #37499895
TpaBka
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Решает, но хотелось бы по феншую ;)
...
Рейтинг: 0 / 0
58 сообщений из 58, показаны все 3 страниц
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / комбобокс по феншую
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]