Форум программистов, компьютерный форум, киберфорум
Наши страницы
Delphi для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.82/11: Рейтинг темы: голосов - 11, средняя оценка - 4.82
krost
0 / 0 / 1
Регистрация: 23.04.2013
Сообщений: 10
1

ComboBox со стилем "csOwnerDrawVariable" как программно выбрать текст?

08.05.2013, 08:53. Просмотров 2299. Ответов 14
Метки нет (Все метки)

Всем привет, вроде все должно быть очень просто, но никак не могу ни сам срастить ни найти ответ. В общем есть ComboBox со стилем "csOwnerDrawVariable" и уже добавленными строчками выбора. Как выбрать программно какую-нибудь строчку из этого списка? ComboBox.Text='text1'; не работает даже если такой текст есть в списке!? Всем сразу огромное спасибо, мозг уже закипает
0
QA
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
08.05.2013, 08:53
Ответы с готовыми решениями:

Как спарсить текст "myTex" и при том что в showuser="" может быть другое значение?
прошу тапками не кидать, я в delphi новичок <td class="rank_name_font" style="width: 165px;cursor:...

JvTrayIcon из пакета JEDI - как "программно" отключить AutoHide
На форме компонент JvTrayIcon1, и все работает прекрасно... Форма сворачивается в трей - исчезая из...

как программно написать "если выбран радиобуттон то"
как программно написать "если выбран радиобуттон то"

Как программно запускать "Восстановление системы"
Как программно запускать "Восстановление системы"

Как реализовать перебор вариантов из списка ComboBox используя клавишу "пробел"?
Доброго времени суток! Подскажите, если кто знает как сделать так чтоб с помощью клавиши "пробел"...

14
droider
Universal
Эксперт Pascal/Delphi
4505 / 2521 / 802
Регистрация: 04.10.2012
Сообщений: 9,163
08.05.2013, 09:34 2
Цитата Сообщение от krost Посмотреть сообщение
как программно выбрать текст?
В каком случае? Выделить в CB при поиске или по заданному номеру?
1
krost
0 / 0 / 1
Регистрация: 23.04.2013
Сообщений: 10
08.05.2013, 11:59  [ТС] 3
Не, не по номеру, а по тексту, т.е. например в СВ есть список: стол, стул, табуретка; изначально не выбран ни 1 из "текстов" (или как говориться выбрана "-1" запись в спике)
теперь надо что-то написать и олеееоп - в СВ выбран стул(не по номеру его нахождения в списке а по тексту) например.

Без этого стиля можно было бы просто написать ComboBox.Text='стул', но при таком стиле так не работает
0
angstrom
2473 / 1849 / 242
Регистрация: 14.09.2012
Сообщений: 5,981
Записей в блоге: 2
08.05.2013, 12:03 4
Работает, только нужно самому отрисовкой заниматься в OnDrawItem.
1
08.05.2013, 12:03
krost
0 / 0 / 1
Регистрация: 23.04.2013
Сообщений: 10
08.05.2013, 12:19  [ТС] 5
Нашел как красить цвета OnDrawItem, но чтобы в этом случае помогло не понимаю как, можешь пример кода привести?
0
angstrom
2473 / 1849 / 242
Регистрация: 14.09.2012
Сообщений: 5,981
Записей в блоге: 2
08.05.2013, 12:21 6
Delphi
1
2
3
4
5
6
7
8
9
procedure TForm2.ComboBox1DrawItem(Control: TWinControl; Index: Integer;
  Rect: TRect; State: TOwnerDrawState);
begin
  with (Control as TComboBox).Canvas do
  begin
    FillRect(Rect);
    TextOut(Rect.Left, Rect.Top, (Control as TComboBox).Items[Index]);
  end;
end;
1
krost
0 / 0 / 1
Регистрация: 23.04.2013
Сообщений: 10
08.05.2013, 12:31  [ТС] 7
Для чайника поподробнее можно? извиняюсь за свою твердолобость, но вместо "(Control as TComboBox)" я например выбираю КомбоБокс2, в нем выбираю стул и в КомбоБоксе1 должен выбраться стул? Если так, то чет не работает
0
angstrom
2473 / 1849 / 242
Регистрация: 14.09.2012
Сообщений: 5,981
Записей в блоге: 2
08.05.2013, 12:48 8
В событие OnDrawItem твоего ComboBox-а впиши указанный код и этого достаточно. Не нужно ничего менять.

Добавлено через 12 минут
У тебя оба ComboBox-а имеют стиль csOwnerDrawVariable?
1
krost
0 / 0 / 1
Регистрация: 23.04.2013
Сообщений: 10
08.05.2013, 12:49  [ТС] 9
Ну, вписываю в onDrawItem эту штуку и создаю кнопку чтобы проверить:

Delphi
1
2
3
4
procedure TForm1.Button1Click(Sender: TObject);
begin
ComboBox1.Text:='стул';
end;
и КомбоБокс не отображает выбранный "стул" у себя
0
angstrom
2473 / 1849 / 242
Регистрация: 14.09.2012
Сообщений: 5,981
Записей в блоге: 2
08.05.2013, 12:51 10
Выбирай ItemIndex с нужным текстом.
1
krost
0 / 0 / 1
Регистрация: 23.04.2013
Сообщений: 10
08.05.2013, 12:56  [ТС] 11
Так в том-то и дело, моя предыдущая форма не знает индекса, слова "стул", "стол" и "табуретка" (а там их очень много) записываются в КомбоБокс из базы данных, которая может обновляться. Как мне узнать индекс этого слова?
0
angstrom
2473 / 1849 / 242
Регистрация: 14.09.2012
Сообщений: 5,981
Записей в блоге: 2
08.05.2013, 13:01 12
Использовать IndexOf
Delphi
1
  Index := ComboBox1.Items.IndexOf('стул');
1
krost
0 / 0 / 1
Регистрация: 23.04.2013
Сообщений: 10
08.05.2013, 17:47  [ТС] 13
Во, урааа, свершилось!!! Спасибки большущее =)))

Добавлено через 4 часа 39 минут
Только можно и без рисований, не понимаю вообще зачем обрисовка и что она делает в том примере, но и без нее все норм работает
Delphi
1
ComboBox1.ItemIndex:=ComboBox1.Items.IndexOf('стул');
0
angstrom
2473 / 1849 / 242
Регистрация: 14.09.2012
Сообщений: 5,981
Записей в блоге: 2
08.05.2013, 17:53 14
Цитата Сообщение от krost Посмотреть сообщение
можно и без рисований
Кто сказал, что выставлен стиль csOwnerDrawVariable и
Цитата Сообщение от krost
не работает даже если такой текст есть в списке!?
0
krost
0 / 0 / 1
Регистрация: 23.04.2013
Сообщений: 10
08.05.2013, 17:59  [ТС] 15
да, csOwnerDrawVariable, я и в названии темы про него писал, и сейчас работает нормально. А не работало говорил - ComboBox1.Text:='стул'; дело в том, что ЧЕРЕЗ ИНДЕКСЫ он НЕ ВПИСЫВАЕТ ТЕКСТ, А ВЫБИРАЕТ СТРОЧКУ и это правильно, спасиб, мне как раз этого IndexOf и не хватало
0
08.05.2013, 17:59
Answers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
08.05.2013, 17:59

Как заблокировать кнопку "удалить строку" когда не выделена строка в ComboBox
Как заблокировать кнопку "удалить строку" когда не выделена строка в ComboBox

В каждом слове текста замените "а" на букву "е", если "а" стоит на четном месте, и заменить букву "б" на сочетание "ак",
В каждом слове текста замените "а" на букву "е", если "а" стоит на четном месте, и заменить букву...

Из слов "Работа", "крест", "тон" составить фразу "Кто не работает, тот не ест" и определить ее длину
Из слова "Работа","крест","тон" составить фразу:"Кто не работает, тот не ест" и определить ее длину.


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.
Рейтинг@Mail.ru