powered by simpleCommunicator - 2.0.49     © 2025 Programmizd 02
Форумы / C++ [игнор отключен] [закрыт для гостей] / Как изменить количество строк отображения в ComboBox
14 сообщений из 14, страница 1 из 1
Как изменить количество строк отображения в ComboBox
    #40054476
Sergey_rb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Версия языка Embedded C++
Операционная система WinCe 7.0

Всем доброго дня!
Выпадающий список Combobox отображает только 2 строки.
Как увеличить количество отображаемых строк?
...
Рейтинг: 0 / 0
Как изменить количество строк отображения в ComboBox
    #40054576
ъъъъъ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Sergey_rb,

В Win32 комбобоксу можно послать сообщение CB_SETMINVISIBLE, этим определить минимальное число отображаемых строк.
Посмотри, может и в твоем API такое есть.
...
Рейтинг: 0 / 0
Как изменить количество строк отображения в ComboBox
    #40054579
Sergey_rb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Это я уже пробовал, пишет, что не знает такого

Код: plaintext
1.
2.
3.
ctrl->SendMessage(CB_SETMINVISIBLE, 5, 0);

error C2065: 'CB_SETMINVISIBLE' : undeclared identifier
...
Рейтинг: 0 / 0
Как изменить количество строк отображения в ComboBox
    #40054590
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Как изменить количество строк отображения в ComboBox
    #40054620
Sergey_rb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov,

Попробовал.
Компилируется, но ничего не меняется

Код: plaintext
1.
comp->SendMessage(CB_SETDROPPEDWIDTH, 50, 0);
...
Рейтинг: 0 / 0
Как изменить количество строк отображения в ComboBox
    #40054673
АСУ ТПшник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А что должно поменяться ?
This message is sent by an application to set the maximum allowable width, in pixels, of the list box of a combo box with the CBS_DROPDOWN or CBS_DROPDOWNLIST style.

Вот что надо если я правильно понимаю.
CB_SETITEMHEIGHT (Windows CE 5.0)
This message is sent by an application to set the height of list items or the selection field in a combo box.
...
Рейтинг: 0 / 0
Как изменить количество строк отображения в ComboBox
    #40054677
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вряд ли он хочет два очень высоких пункта, скорее три мелких.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Как изменить количество строк отображения в ComboBox
    #40055095
АСУ ТПшник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Действительно... Height of items. Ну тады ой.
...
Рейтинг: 0 / 0
Как изменить количество строк отображения в ComboBox
    #40055815
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Sergey_rb
Версия языка Embedded C++
Операционная система WinCe 7.0

Всем доброго дня!
Выпадающий список Combobox отображает только 2 строки.
Как увеличить количество отображаемых строк?



Всё очень просто.
В ресурсе есть размеры комбобокса.
Высота комбобокса определяет его размер по вертикали в развёрнутом состоянии (если это конечно комбо со стилем dropdown)
В свёрнутом состоянии высота комбобокса задаётся высотой шрифта диалога, а не размером прямоугольника окна.

Да, если комбобокс создаётся программно, то соотв. это будет высота RECT заданного при создании окна.
Ну и надо учитывать, что в ресурсе все размеры в диалоговых единицах, а в программе -- соотв. в пикселях
...
Рейтинг: 0 / 0
Как изменить количество строк отображения в ComboBox
    #40056114
Sergey_rb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MasterZiv,

Ресурсы есть, но высоты в них нет.
Там ничего нет, кроме нескольких галочек, одинаковых для всех компонент.
...
Рейтинг: 0 / 0
Как изменить количество строк отображения в ComboBox
    #40056238
Пётр Седов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Sergey_rb, не знаю как сейчас, но раньше в Visual Studio было так. В редакторе диалога, click-аем на стрелочку combo box-а. Появляется рамка, чтобы задать размер combo box-а вместе с выпадающим списком. Click-аем на стрелочку ещё раз -- эта рамка пропадает.
...
Рейтинг: 0 / 0
Как изменить количество строк отображения в ComboBox
    #40056688
Sergey_rb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Пётр Седов
Sergey_rb, не знаю как сейчас, но раньше в Visual Studio было так. В редакторе диалога, click-аем на стрелочку combo box-а. Появляется рамка, чтобы задать размер combo box-а вместе с выпадающим списком. Click-аем на стрелочку ещё раз -- эта рамка пропадает.


Огромное спасибо!
Помогло.
...
Рейтинг: 0 / 0
Как изменить количество строк отображения в ComboBox
    #40056771
Пётр Седов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Sergey_rb, ещё можно посмотреть, как это сделано в Lazarus (бесплатный аналог Delphi). Там за это отвечает свойство DropDownCount:
https://github.com/alrieckert/lazarus/blob/master/lcl/interfaces/win32/win32listslh.inc
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
  TWin32ComboBoxStringList = class(TWin32ListStringList)
  private
    FDropDownCount: Integer;
    procedure SetDropDownCount(const AValue: integer);
  protected
    function GetComboHeight: integer;
    ...
    procedure UpdateComboHeight;
  public
    ...
    property ComboHeight: integer read GetComboHeight;
    property DropDownCount: integer read FDropDownCount write SetDropDownCount;
  end;

https://github.com/alrieckert/lazarus/blob/master/lcl/interfaces/win32/win32listsl.inc
Код: pascal
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.
procedure TWin32ComboBoxStringList.SetDropDownCount(const AValue: integer);
begin
  FDropDownCount := AValue;
  UpdateComboHeight;
end;

function TWin32ComboBoxStringList.GetComboHeight: integer;
var
  R: TRect;
begin
  if TCustomComboBox(FSender).Style = csSimple then
  begin
    // combobox workaround:
    // if style = csSimple follow the LCL height.
    Result := FSender.Height;
  end else
  begin
    Windows.GetClientRect(FWin32List, @R);
    if Count = 0 then
      Result := R.Bottom + Windows.SendMessage(FWin32List, CB_GETITEMHEIGHT, 0, 0) + 2
    else
      Result := R.Bottom + FDropDownCount * Windows.SendMessage(FWin32List, CB_GETITEMHEIGHT, 0, 0) + 2;
  end;
end;

procedure TWin32ComboBoxStringList.UpdateComboHeight;
var
  Width, Height: integer;
begin
  Width := FSender.Width;
  Height := ComboHeight;
  SetWindowPos(FSender.Handle, 0, 0, 0, Width, Height, SWP_NOZORDER or SWP_NOACTIVATE or SWP_NOMOVE);
end;

Прибавки «+ 2» выглядят костыльно, но лучшего способа в WinAPI видимо нет. У Lazarus есть отдельный код и для Windows CE:
https://github.com/alrieckert/lazarus/blob/master/lcl/interfaces/wince/wincelistsl.inc
Там всё аналогично, тоже с прибавками «+ 2».
...
Рейтинг: 0 / 0
Как изменить количество строк отображения в ComboBox
    #40057488
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Sergey_rb
MasterZiv,

Ресурсы есть, но высоты в них нет.
Там ничего нет, кроме нескольких галочек, одинаковых для всех компонент.


Высота задаётся в редакторе диалога. Ну или в .rc файле текстом.
...
Рейтинг: 0 / 0
14 сообщений из 14, страница 1 из 1
Форумы / C++ [игнор отключен] [закрыт для гостей] / Как изменить количество строк отображения в ComboBox
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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