Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Общие вопросы > Combobox


Автор: dimkaspaun 25.8.2006, 11:14
помогите как сделать чтобы combobox показывал весь техт когда открывается поля с текстом а он не влазиет в него и не видно что дальше шири combobox не могу сделать и так длинный.

Автор: Pakshin A. S. 25.8.2006, 11:36
Компонент, реализующий Hint в выпадающем списке ComboBox:

Код

type
TVSComboBox = class(TCustomComboBox)
...
private
 FHint: THintWindow;
...
protected
 procedure WMCTLCOLORLISTBOX(var Message: TMessage); message WM_CTLCOLORLISTBOX;
...


Главное не забыть выполнить инициальзацию компонента в конструкторе:
Код

...
begin
inherited Create(AOwner);
FHint:=THintWindow.Create(Self);
...

Чтобы получить информацию об активной строке в выпадающем списке ComboBox, перезватите сообщение WM_CTLCOLORLISTBOX. В процедуре сообщения проанализируёте строку и, если её длинна больше ширины выпадающего списка, передайте "длинную строку" в FHint и активизируйте его:
Код

FHint.ActivateHint(TextRc, Items[ItemIndex]);

Если активная строка в выпадающем списке "короткая" - спрячьте FHint:
Код

FHint.ReleaseHandle;


Добавлено @ 11:37 
Эт с книжечки пример... Не тестил ни разу...

Автор: Yanis 25.8.2006, 11:38
Код
procedure TForm1.ComboBox1DropDown(Sender: TObject);
var
  i, max: Integer;
begin
  if ComboBox1.Items.Count = 0 then
    exit;

  max := ComboBox1.Canvas.TextWidth(ComboBox1.Items.Strings[0]);

  for i := 1 to ComboBox1.Items.Count - 1 do
    if ComboBox1.Canvas.TextWidth(ComboBox1.Items.Strings[i]) > max then
      max := ComboBox1.Canvas.TextWidth(ComboBox1.Items.Strings[i]);

  SendMessage(ComboBox1.Handle, CB_SETDROPPEDWIDTH,
              max + ComboBox1.Canvas.TextWidth(ComboBox1.Items.Strings[0][1]),
              0);
end;

Автор: dimkaspaun 25.8.2006, 11:58
по чему не работает не твой совет Yanis не твой совет Pakshin A. S

Автор: Yanis 25.8.2006, 12:13
dimkaspaun
Это "по чему" же? Показывай код, как применяешь, потому как у меня всё работает.

Автор: dimkaspaun 25.8.2006, 13:06
просто ошибок не выдаёт а как было так все и осталось а куда надо код вставлять в форму или в combobox.

Автор: Yanis 25.8.2006, 13:12
dimkaspaun
Я бы сказал куда, если бы мы с тобой пиво за одним столом пили smile Код который я привёл (причём это там написано) нужно вставить в событие ComboBox'а OnDropDown.

Автор: dimkaspaun 28.8.2006, 06:57
послушай Yanis а почему он не работает в DBCombobox.  а в COMBOX отлично работает.

Автор: bartram 28.8.2006, 07:29
Цитата(dimkaspaun @  28.8.2006,  06:57 Найти цитируемый пост)
послушай Yanis а почему он не работает в DBCombobox.  а в COMBOX отлично работает.

Потому что компоненты по сути разные

Автор: Yanis 28.8.2006, 09:14
Цитата(dimkaspaun @  28.8.2006,  07:57 Найти цитируемый пост)
послушай Yanis а почему он не работает в DBCombobox.  а в COMBOX отлично работает.

Для DB аналога ComboBox'а этот код тоже работает. Только что сам проверил....

Цитата(bartram @  28.8.2006,  08:29 Найти цитируемый пост)
Потому что компоненты по сути разные

Иожет по сути да, а вооще они дети TCustomComboBox'а.

Автор: dimkaspaun 28.8.2006, 10:36
Послушай Yanis блин если текст заносится в ITEMS т.е. сам берёш и набираеш и он там постоянно а у меня он заносится с таблицы в items каждый раз новый корочи вот так

Код

begin
with Form4.Table1 do
begin
close;
open;
while not EOF do
begin
Form4.DBComboBox1.items.add(FieldByName('CPU').AsString);
next;
end;
end;

 
может по этому не работает?   

Автор: dimkaspaun 28.8.2006, 11:03
ВСЕМ СПАСИБО. Я сделал чтобы за работало я тупа забил в ITEMS большое количество знаков и теперь он открывается очень длинный.

А кстати левая тема почему у всех на форуме есть картинки под именен а уменя нет?

Автор: Yanis 28.8.2006, 11:06
dimkaspaun
В каком событии ты делаешь SendMessage?

Автор: dimkaspaun 28.8.2006, 11:13
Цитата

В каком событии ты делаешь SendMessage?


Yanis ты сейчас с кем разговариваеш объясни ты очем.

Автор: Yanis 28.8.2006, 11:44
Цитата(dimkaspaun @  28.8.2006,  12:13 Найти цитируемый пост)
Yanis ты сейчас с кем разговариваеш

dimkaspaun

Цитата(dimkaspaun @  28.8.2006,  12:13 Найти цитируемый пост)
объясни ты очем. 

Да как уж тут объяснить то.... Ты когда на форме 2 раза кликаешь генериется событие OnFormCreate под названием FormCreate. А код, который я привёл нужно засунуть в OnDropDown компонента DBComboBox.

Добавлено @ 11:45 
Цитата(Yanis @  25.8.2006,  12:38 Найти цитируемый пост)
procedure TForm1.ComboBox1DropDown(Sender: TObject);


Автор: dimkaspaun 29.8.2006, 05:49
Ладно Yanis все работает спасибо за помощь!!!

Автор: Yanis 29.8.2006, 09:06
Цитата(dimkaspaun @  29.8.2006,  06:49 Найти цитируемый пост)
Ладно Yanis все работает спасибо за помощь!!! 

Работает то работает, но вот что то меня первое слово этого предложения настрожило. Если что то непонятно лучше спроси.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)