Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Низкоуровневое программирование > Win Api
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 09.02.2008, 08:58   #11
AidarBik
Форумчанин
 
Регистрация: 12.06.2007
Сообщений: 130
По умолчанию

Цитата:
Сообщение от rpy3uH Посмотреть сообщение
сообщение CB_GETCURSEL - получение индекса выбранного элемента, CB_GETLBTEXT получение текста по индексу
Я делаю так:
Код:
var
NewItem: PChar;
...
if SendMessage(ComboBox, CB_GETCURSEL, 0, 0) <> CB_ERR then
begin
SendMessage(ComboBox, CB_GETLBTEXT, SendMessage(ComboBox, CB_GETCURSEL, 0, 0), LPARAM(NewItem));
SendMessage(ListBox, LB_ADDSTRING, 0, LPARAM(NewItem));
end;
Но не работает. Что я делаю не так?
AidarBik вне форума Ответить с цитированием
Старый 09.02.2008, 09:08   #12
rpy3uH
добрый няша
Старожил
 
Аватар для rpy3uH
 
Регистрация: 29.10.2006
Сообщений: 4,804
По умолчанию

попробуй так:
Код:
var   
  NewItem: array[0..255] of Char;//255 - максимальная длина строки   
...   
if SendMessage(ComboBox, CB_GETCURSEL, 0, 0) <> CB_ERR then   
 begin   
  SendMessage(ComboBox, CB_GETLBTEXT, SendMessage(ComboBox, CB_GETCURSEL, 0, 0), LPARAM(@NewItem));   
  SendMessage(ListBox, LB_ADDSTRING, 0, LPARAM(@NewItem));   
 end;
rpy3uH вне форума Ответить с цитированием
Старый 09.02.2008, 09:13   #13
AidarBik
Форумчанин
 
Регистрация: 12.06.2007
Сообщений: 130
По умолчанию

Спасибо! Теперь работает.
А как узнать, что выбранный элемент ComboBox'а изменился?
AidarBik вне форума Ответить с цитированием
Старый 09.02.2008, 12:00   #14
rpy3uH
добрый няша
Старожил
 
Аватар для rpy3uH
 
Регистрация: 29.10.2006
Сообщений: 4,804
По умолчанию

если изменяется выбранный элемент, то комбобоксу приходит сообщение CB_SETCURSEL, то тогда придётся делать сабклассинг.... но лучше всего сохранять предыдущее состояние комбобокса в какой-нибудь переменной и если текущее состояние не равно последнему, то оно изменилось.
rpy3uH вне форума Ответить с цитированием
Старый 25.02.2014, 17:42   #15
BLACK_RAIN
Форумчанин
 
Регистрация: 13.02.2012
Сообщений: 867
По умолчанию

Цитата:
Сообщение от AidarBik Посмотреть сообщение
Спасибо! Теперь работает.
У меня абракадабра вместо текста. Как исправить?
BLACK_RAIN вне форума Ответить с цитированием
Старый 25.02.2014, 17:56   #16
waleri
Старожил
 
Регистрация: 13.07.2012
Сообщений: 6,331
По умолчанию

Поплясать с бубном.
Ну или код показать...
waleri на форуме Ответить с цитированием
Старый 26.02.2014, 10:58   #17
BLACK_RAIN
Форумчанин
 
Регистрация: 13.02.2012
Сообщений: 867
По умолчанию

Цитата:
Сообщение от waleri Посмотреть сообщение
Поплясать с бубном.
Танцы с бубном действительно помогли. Заработало.
Но теперь другая проблема. Мне нужна ручная отрисовка комбобокса. Использую стиль CBS_OWNERDRAWVARIABLE. Когда я вожу мышью по элементам выпавшего списка, то индекс комбо сразу меняется на тот, который в данный момент находится под курсором. Во вторых,при щелчке по элементу, список не закрывается. В-третьих, если нажать мышью на сам комбобокс, то список закроется, но в комбобоксе не отрисовывается текст. Не пойму, что я делаю не так.
Дайте ссылки, где описаны эти вопросы.
BLACK_RAIN вне форума Ответить с цитированием
Старый 26.02.2014, 11:17   #18
waleri
Старожил
 
Регистрация: 13.07.2012
Сообщений: 6,331
По умолчанию

Читайте про WM_MEASUREITEM и WM_DRAWITEM, ну и продолжайте плясать...
waleri на форуме Ответить с цитированием
Старый 26.02.2014, 11:47   #19
BLACK_RAIN
Форумчанин
 
Регистрация: 13.02.2012
Сообщений: 867
По умолчанию

Цитата:
Сообщение от waleri Посмотреть сообщение
Читайте про WM_MEASUREITEM и WM_DRAWITEM, ну и продолжайте плясать...
Дык я и так сначала несколько раз перечитал http://www.cyberforum.ru/win-api/thread370073.html, поплясал, поиск по форуму юзал и только потом сюда написал. Отрисовывать айтемы получается, но при выборе список не закрывается. И в самом окошке комбо текста нет. А если и удается его вывести, то при перекрытии его другим комбо, текст пропадает.
Неужто, WM_PAINT юзать надо?
BLACK_RAIN вне форума Ответить с цитированием
Старый 26.02.2014, 12:06   #20
waleri
Старожил
 
Регистрация: 13.07.2012
Сообщений: 6,331
По умолчанию

Ща кофе допью и погадаю... покажите код, иначе как вам ответить?
Судя по всему - да, надо юзать WM_PAINT, но тогда наверно проще свой контрол написать.
Ref: http://stackoverflow.com/questions/1...ox-shown-empty

Хотя вот тут вроде и без WM_PAINT обходятся:
http://msdn.microsoft.com/en-us/libr...(v=vs.85).aspx

Edit:
После парочки експериментов, для CBS_DROPDOWNLIST вызывается WM_DRAWITEM и для edit бокса (хотя это не едит вовсе). Для CBS_SIMPLE и CBS_DROPDOWN там обычный edit box и в него надо ручками вбивать текст для показа (те. отслеживать выбор элемента, CBN_SELENDOK, CBN_SELCHANGE), и показывать будет только текст.

Последний раз редактировалось waleri; 26.02.2014 в 12:43.
waleri на форуме Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Форма. Выпадающий список SNkMaster HTML и CSS 13 15.03.2010 15:02
Выпадающий список Акашаев Нурлан Общие вопросы Delphi 3 27.06.2008 16:58
Выпадающий список в таблице БД Antowka БД в Delphi 14 28.05.2008 15:18
выпадающий список SunKnight БД в Delphi 1 24.03.2008 22:44
выпадающий список Toxa Microsoft Office Excel 2 23.04.2007 09:40