Как работать с (компонентами, составляющими) Combobox?

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
Nikita
Обычный пользователь
Обычный пользователь
 
Сообщения: 90
Зарегистрирован: 05.02.2003 (Ср) 15:09
Откуда: Russia

Как работать с (компонентами, составляющими) Combobox?

Сообщение Nikita » 21.04.2003 (Пн) 14:33

ComboBox это TextBox, CommandButton со стрелкой и ListBox

хочется чтобы оно так и работало, причем отдельно, а не вместе,

например нажатие на кнопку со стрелкой всегда автоматически выделяет элемент в списке, т.е. меняется и текст в textbox, а хочется чтобы просто окрывался List, или когда мышкой проводишь над открытым List, выделяется элемент над которым проводишь мышкой, а хочется чтобы это был просто статичный ListBox, и еще много всяких мелочей

я бы написал свой ComboBox, да не получается - если брать отдельно эти 3 компонента - текст, кнопку и список, и на форму их, список когда разворачивается, если он не помещается до края формы, то урезается этим краем, этот вариант отпадает;
если же список ложить на дополнительную форму, то она должна быть не модальной (поскольку в Combobox при развернутом списке можно кликнуть на кнопку со стрелкой, которая вне списка, и список свернется, да и вообще где угодно если кликнуть, т.е. фокус увести с комбобокса), а если список на не модальной форме, то полученный комбобокс нельзя использовать в модальных формах (из модальной формы нельзя вызвать немодальную)

т.е. изначальный вопрос можно заменить на "как написать ComboBox?"

И еще, я знаю программу в которой комбобокс (по-видимому сделаный вручную), в т.ч. на модальной форме, если кликнуть на стрелочку открывается список, и будто все 3 элемента - текстбокс, кнопка и список - на одной модальной форме, те. кликать можно только на них, кликаешь на стрелочку, список сворачивается, и оставшиеся текстбокс и кнопка перестают быть "на модальной форме" - как такое сделать?

GoGosha
Постоялец
Постоялец
 
Сообщения: 642
Зарегистрирован: 02.08.2002 (Пт) 9:14
Откуда: Russia

Re: Как работать с (компонентами, составляющими) Combobox?

Сообщение GoGosha » 21.04.2003 (Пн) 15:53

Nikita писал(а):ComboBox это TextBox, CommandButton со стрелкой и ListBox

хочется чтобы оно так и работало, причем отдельно, а не вместе,

например нажатие на кнопку со стрелкой всегда автоматически выделяет элемент в списке, т.е. меняется и текст в textbox, а хочется чтобы просто окрывался List, или когда мышкой проводишь над открытым List, выделяется элемент над которым проводишь мышкой, а хочется чтобы это был просто статичный ListBox, и еще много всяких мелочей

я бы написал свой ComboBox, да не получается - если брать отдельно эти 3 компонента - текст, кнопку и список, и на форму их, список когда разворачивается, если он не помещается до края формы, то урезается этим краем, этот вариант отпадает;
если же список ложить на дополнительную форму, то она должна быть не модальной (поскольку в Combobox при развернутом списке можно кликнуть на кнопку со стрелкой, которая вне списка, и список свернется, да и вообще где угодно если кликнуть, т.е. фокус увести с комбобокса), а если список на не модальной форме, то полученный комбобокс нельзя использовать в модальных формах (из модальной формы нельзя вызвать немодальную)

т.е. изначальный вопрос можно заменить на "как написать ComboBox?"

И еще, я знаю программу в которой комбобокс (по-видимому сделаный вручную), в т.ч. на модальной форме, если кликнуть на стрелочку открывается список, и будто все 3 элемента - текстбокс, кнопка и список - на одной модальной форме, те. кликать можно только на них, кликаешь на стрелочку, список сворачивается, и оставшиеся текстбокс и кнопка перестают быть "на модальной форме" - как такое сделать?



Помоему стандартные элементы- это классы, которые не разбиваются на Command Button-bl со стрелкой на Image Box-bl и т.д. То есть у стандартного элемента единый хендел. А вот как написать Combo Box- вопрос другой, и мне непонятно в чём именно проблема

Nikita
Обычный пользователь
Обычный пользователь
 
Сообщения: 90
Зарегистрирован: 05.02.2003 (Ср) 15:09
Откуда: Russia

Сообщение Nikita » 21.04.2003 (Пн) 15:58

как написать самому Combobox - проблему я описал, что если его делать без доп окна то список обрезается краем формы, а если делать на допокне то оно должно быть модальным, а это не подходит

Combobox разбивается на компоненты, поскольку например я уже нашел как получить hwnd его listbox-a

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 21.04.2003 (Пн) 16:40

ComboBox -- это в первую очередь окно.
Когда ComboBox раскрывается, показывается окно (без рамки и заголовка), а в нем ListBox, развернутый на все окно. И форма это показывается как модальная. И поскольку это форма, она не обрезается границами твоей формы.
Но нужно предусмотреть, чтобы модальная форма легко "теряла" фокус, когда пользователь переходит Tab'ом или кликает мышкой не на раскрытом ComboBox.

Например, обработчик Form_KeyDown
Код: Выделить всё
Private Sub Form_KeyDown(...
If KeyCode = vbKeyTab Then
  Select Case Shift
    Case 0
      KeyCode = 0
      Unload Me
      SendKeys "{TAB}"
    Case vbShiftMask
      KeyCode = 0
      Unload Me
      SendKeys "^{TAB}"
  End Select
End If
End Sub


Обрабатывать клик мышкой вне предела своей формы можно двумя способами:
1. Периодически опрашивать координаты и состояние мыши. Если произошел клик, то выгрузить форму и съэмулировать клик мышкой.
2. Перехватывать сообщения, подменив стандартный обработчик сообщений (SetWindowLong).
Lasciate ogni speranza, voi ch'entrate.

Powersoft
Обычный пользователь
Обычный пользователь
 
Сообщения: 76
Зарегистрирован: 17.04.2003 (Чт) 21:23

Сообщение Powersoft » 21.04.2003 (Пн) 18:31

если тебе действительно нужно решение данной задачи, напиши письмо на support@powersoftnet.com.

moderator
Модератор
Модератор
 
Сообщения: 1896
Зарегистрирован: 10.12.2001 (Пн) 18:11
Откуда: Украина, Харьков

Сообщение moderator » 21.04.2003 (Пн) 22:51

Так. Все это хорошо и замечательно, но!

У нас как бы демократия и каждый вправе постить практически все, что хочет - но не стоит забывать и про модераторов, ОК?

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

Если Вы, уважаемый powersoft, не прекратите использование подобной практики, то я должен буду применить антиспамерские меры.

Надеюсь, смысл моего постинга довольно прозрачен. За всеми разъснениями, если такие потребуются, прошу писать Личные Сообщения (кнопка внизу постинга) либо на moderator@vbstreets.ru
Модератор
http://www.vbstreets.ru / moderator@vbstreets.ru

... Почетные награды: [*], [+], [!]. Все еще впереди...

Nikita
Обычный пользователь
Обычный пользователь
 
Сообщения: 90
Зарегистрирован: 05.02.2003 (Ср) 15:09
Откуда: Russia

Сообщение Nikita » 22.04.2003 (Вт) 8:31

alibek писал(а):ComboBox -- это в первую очередь окно.
Когда ComboBox раскрывается, показывается окно (без рамки и заголовка), а в нем ListBox, развернутый на все окно. И форма это показывается как модальная. И поскольку это форма, она не обрезается границами твоей формы.
Но нужно предусмотреть, чтобы модальная форма легко "теряла" фокус, когда пользователь переходит Tab'ом или кликает мышкой не на раскрытом ComboBox.

но ведь при открытом листе можно писать текст в комбобокс, т.е. получается что вместе с листом на модальной форме находится и все остальное - и текстовое поле и кнопка

получается что комбобокс реализован как текст+кнопка, при нажатии на кнопку открывается модальная форма на которой текст-кнопка-список, причем эта форма расположена так чтобы текст и кнопка накрывали текст и кнопку - так?

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 22.04.2003 (Вт) 8:44

Возможно, но мне не верится, что элементы (TextBox и Button) будут дублироваться.
Скорее всего "выпадающая" форма является модальной, но не по отношению к "родительской" форме (форме, на которой размещен ComboBox).
Lasciate ogni speranza, voi ch'entrate.

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 22.04.2003 (Вт) 15:20

И еще, попробуй поиграться со стилем окна (константы WS_???). В частности, есть константы WS_CLIPCHILDREN = &H2000000 и
WS_CLIPSIBLINGS = &H4000000, возможно один из этих стилей как раз и отвечает за то, что элементы, размещенные на форме, обрезаются по границе этой формы.
Lasciate ogni speranza, voi ch'entrate.

Nikita
Обычный пользователь
Обычный пользователь
 
Сообщения: 90
Зарегистрирован: 05.02.2003 (Ср) 15:09
Откуда: Russia

Сообщение Nikita » 22.04.2003 (Вт) 15:24

пробую, и то и другое,
спасибо!

Nikita
Обычный пользователь
Обычный пользователь
 
Сообщения: 90
Зарегистрирован: 05.02.2003 (Ср) 15:09
Откуда: Russia

Сообщение Nikita » 22.04.2003 (Вт) 16:02

попробовал оба,
элементы все равно обрезаются краями формы


Вернуться в Visual Basic 1–6

Кто сейчас на конференции

Сейчас этот форум просматривают: Google-бот и гости: 95

    TopList