Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / C++ Новый топик    Ответить
 Как изменить количество строк отображения в ComboBox  [new]
Sergey_rb
Member

Откуда:
Сообщений: 969
Версия языка Embedded C++
Операционная система WinCe 7.0

Всем доброго дня!
Выпадающий список Combobox отображает только 2 строки.
Как увеличить количество отображаемых строк?
17 мар 21, 11:13    [22296058]     Ответить | Цитировать Сообщить модератору
 Re: Как изменить количество строк отображения в ComboBox  [new]
ъъъъъ
Member

Откуда:
Сообщений: 1966
Sergey_rb,

В Win32 комбобоксу можно послать сообщение CB_SETMINVISIBLE, этим определить минимальное число отображаемых строк.
Посмотри, может и в твоем API такое есть.
17 мар 21, 14:28    [22296232]     Ответить | Цитировать Сообщить модератору
 Re: Как изменить количество строк отображения в ComboBox  [new]
Sergey_rb
Member

Откуда:
Сообщений: 969
Это я уже пробовал, пишет, что не знает такого

ctrl->SendMessage(CB_SETMINVISIBLE, 5, 0);

error C2065: 'CB_SETMINVISIBLE' : undeclared identifier
17 мар 21, 14:36    [22296237]     Ответить | Цитировать Сообщить модератору
 Re: Как изменить количество строк отображения в ComboBox  [new]
Dimitry Sibiryakov
Member

Откуда:
Сообщений: 52921

Попробуй
https://docs.microsoft.com/en-us/previous-versions/windows/embedded/ms908062(v=msdn.10)

Posted via ActualForum NNTP Server 1.5

17 мар 21, 14:54    [22296259]     Ответить | Цитировать Сообщить модератору
 Re: Как изменить количество строк отображения в ComboBox  [new]
Sergey_rb
Member

Откуда:
Сообщений: 969
Dimitry Sibiryakov,

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

comp->SendMessage(CB_SETDROPPEDWIDTH, 50, 0);
17 мар 21, 15:30    [22296299]     Ответить | Цитировать Сообщить модератору
 Re: Как изменить количество строк отображения в ComboBox  [new]
АСУ ТПшник
Member

Откуда:
Сообщений: 1370
А что должно поменяться ?
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.

Сообщение было отредактировано: 17 мар 21, 17:18
17 мар 21, 17:24    [22296398]     Ответить | Цитировать Сообщить модератору
 Re: Как изменить количество строк отображения в ComboBox  [new]
Dimitry Sibiryakov
Member

Откуда:
Сообщений: 52921

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

Posted via ActualForum NNTP Server 1.5

17 мар 21, 17:29    [22296404]     Ответить | Цитировать Сообщить модератору
 Re: Как изменить количество строк отображения в ComboBox  [new]
АСУ ТПшник
Member

Откуда:
Сообщений: 1370
Действительно... Height of items. Ну тады ой.
19 мар 21, 08:25    [22297093]     Ответить | Цитировать Сообщить модератору
 Re: Как изменить количество строк отображения в ComboBox  [new]
MasterZiv
Member

Откуда: Питер
Сообщений: 34688
Sergey_rb
Версия языка Embedded C++
Операционная система WinCe 7.0

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



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

Да, если комбобокс создаётся программно, то соотв. это будет высота RECT заданного при создании окна.
Ну и надо учитывать, что в ресурсе все размеры в диалоговых единицах, а в программе -- соотв. в пикселях

Сообщение было отредактировано: 22 мар 21, 12:19
22 мар 21, 12:24    [22298163]     Ответить | Цитировать Сообщить модератору
 Re: Как изменить количество строк отображения в ComboBox  [new]
Sergey_rb
Member

Откуда:
Сообщений: 969
MasterZiv,

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

К сообщению приложен файл. Размер - 5Kb
23 мар 21, 09:28    [22298581]     Ответить | Цитировать Сообщить модератору
 Re: Как изменить количество строк отображения в ComboBox  [new]
Пётр Седов
Member

Откуда: Санкт-Петербург
Сообщений: 700
Sergey_rb, не знаю как сейчас, но раньше в Visual Studio было так. В редакторе диалога, click-аем на стрелочку combo box-а. Появляется рамка, чтобы задать размер combo box-а вместе с выпадающим списком. Click-аем на стрелочку ещё раз -- эта рамка пропадает.
23 мар 21, 14:09    [22298798]     Ответить | Цитировать Сообщить модератору
 Re: Как изменить количество строк отображения в ComboBox  [new]
Sergey_rb
Member

Откуда:
Сообщений: 969
Пётр Седов
Sergey_rb, не знаю как сейчас, но раньше в Visual Studio было так. В редакторе диалога, click-аем на стрелочку combo box-а. Появляется рамка, чтобы задать размер combo box-а вместе с выпадающим списком. Click-аем на стрелочку ещё раз -- эта рамка пропадает.


Огромное спасибо!
Помогло.
24 мар 21, 16:25    [22299494]     Ответить | Цитировать Сообщить модератору
 Re: Как изменить количество строк отображения в ComboBox  [new]
Пётр Седов
Member

Откуда: Санкт-Петербург
Сообщений: 700
Sergey_rb, ещё можно посмотреть, как это сделано в Lazarus (бесплатный аналог Delphi). Там за это отвечает свойство DropDownCount:
https://github.com/alrieckert/lazarus/blob/master/lcl/interfaces/win32/win32listslh.inc
  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
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».
25 мар 21, 03:33    [22299645]     Ответить | Цитировать Сообщить модератору
 Re: Как изменить количество строк отображения в ComboBox  [new]
MasterZiv
Member

Откуда: Питер
Сообщений: 34688
Sergey_rb
MasterZiv,

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


Высота задаётся в редакторе диалога. Ну или в .rc файле текстом.
28 мар 21, 00:32    [22300959]     Ответить | Цитировать Сообщить модератору
Все форумы / C++ Ответить