Гость
Форумы / C++ [игнор отключен] [закрыт для гостей] / Как изменить количество строк отображения в ComboBox / 14 сообщений из 14, страница 1 из 1
17.03.2021, 11:13
    #40054476
Sergey_rb
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как изменить количество строк отображения в ComboBox
Версия языка Embedded C++
Операционная система WinCe 7.0

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

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

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

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

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

Код: plaintext
1.
comp->SendMessage(CB_SETDROPPEDWIDTH, 50, 0);
...
Рейтинг: 0 / 0
17.03.2021, 17:24
    #40054673
АСУ ТПшник
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как изменить количество строк отображения в ComboBox
А что должно поменяться ?
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
17.03.2021, 17:29
    #40054677
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как изменить количество строк отображения в ComboBox
Вряд ли он хочет два очень высоких пункта, скорее три мелких.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
19.03.2021, 08:25
    #40055095
АСУ ТПшник
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как изменить количество строк отображения в ComboBox
Действительно... Height of items. Ну тады ой.
...
Рейтинг: 0 / 0
22.03.2021, 12:24
    #40055815
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как изменить количество строк отображения в ComboBox
Sergey_rb
Версия языка Embedded C++
Операционная система WinCe 7.0

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



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

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

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


Огромное спасибо!
Помогло.
...
Рейтинг: 0 / 0
25.03.2021, 03:33
    #40056771
Пётр Седов
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как изменить количество строк отображения в ComboBox
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
28.03.2021, 00:32
    #40057488
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как изменить количество строк отображения в ComboBox
Sergey_rb
MasterZiv,

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


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


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