Форум: "Основная";
Текущий архив: 2006.04.16;
Скачать: [xml.tar.bz2];
ВнизTComboBox, высота выпадающего списка при изменении Items Найти похожие ветки
← →
API © (2006-03-13 13:27) [0]ComboBox.Style = csDropDown;
При вводе пользователем строки, список перезагружается - в зависимости от введенного пользователем значения (аналог - строка адреса в IE, где список содержит историю открытых URL, совпадающих с введенным значением). То есть, при вводе первого символа выпадает список, содержащий соответствующие значения. При вводе последующих символов - список перезагружается (дополнительно фильтруется). Естественно, меняется количество строк в Items и в выпавшем списке. И наступает ситуация, когда в списке может остаться 0-1-2 значения, но высота самого выпадающего списка остается той, что была при его выпадении.
Вопрос: Как изменить высоту уже выпавшего списка, в зависимости от количества строк в списке?
DropDownCount - не оказывает действия.
DroppedDown := false; DroppedDown := true; - помогает, но сопровождается мгновенным закрытием/открытием списка, что не есть хорошо.
Кроме того, наблюдается "нехорошее" поведение указателя мыши - он может или вообще исчезать, или "подвисать", переставая реагировать на низлежащие строку ввода(для выделения текста)/список (стрелка).
То есть, сопутствующий вопрос: что делать с указателем?
← →
Игорь Шевченко © (2006-03-13 14:14) [1]
> Как изменить высоту уже выпавшего списка, в зависимости
> от количества строк в списке?
SetWindowPos у ListHandle ComboBox"а ?
ListHandle можно взять например методом, описанным в http://www.delphikingdom.com/asp/viewitem.asp?catalogid=566
← →
API © (2006-03-13 15:19) [2][1] Игорь Шевченко © (13.03.06 14:14)
Спасибо большое!
Вот, если кому понадобится:unit RSComboBoxEx;
interface
uses
Windows, Messages, SysUtils, Classes, Controls, StdCtrls;
type
TRSComboBoxEx = class(TComboBox)
private
m_ListHandle: cardinal;
procedure
protected
procedure SetItems(const a_Items: TStrings); override;
procedure WndProc(var Message: TMessage); override;
end;
procedure Register;
implementation
procedure Register;
begin
RegisterComponents("RS", [TRSComboBoxEx]);
end;
procedure TRSComboBoxEx.SetItems(const a_Items: TStrings);
var
iCount: integer;
begin
inherited SetItems(a_Items);
if DroppedDown then
begin
if (a_Items.Count < DropDownCount) then
if (a_Items.Count = 0) then
iCount := 1
else
iCount := a_Items.Count - 1
else
iCount := DropDownCount;
SetWindowPos(m_ListHandle, 0, 0, 0, Width, ItemHeight * iCount +
Height + 2, SWP_NOMOVE or SWP_NOZORDER or SWP_NOACTIVATE);
end;
end;
procedure TRSComboBoxEx.WndProc(var Message: TMessage);
begin
if (Message.Msg = WM_CTLCOLORLISTBOX) and (FListHandle = 0) then
m_ListHandle := HWND(Message.LParam);
inherited;
end;
end.
Решение не универсальное.
А с курсором все та же беда... исчезает.
← →
API © (2006-03-13 15:24) [3]М-да.
m_ListHandle можно убрать и WndProc - тоже.
У TCustomCombo поле FListHandle объявлено в секции protected.
← →
Игорь Шевченко © (2006-03-13 15:40) [4]
> У TCustomCombo поле FListHandle объявлено в секции protected.
Это смотря для каких версий Delphi...
> Кроме того, наблюдается "нехорошее" поведение указателя
> мыши - он может или вообще исчезать, или "подвисать", переставая
> реагировать на низлежащие строку ввода(для выделения текста)/список
> (стрелка).
После каких именно действий наблюдается такая беда ?
← →
API © (2006-03-13 16:52) [5]После каких именно действий наблюдается такая беда ?
Как только вводится первый символ и выпадает список - указатель мыши исчезает или "зависает". Не видно его только на формах приложения, в других приложениях - виден. После того, как список свернется - курсор появляется вновь.
У меня возникает подозрение, что это как-то связано с изменением Items (загрузкой нового списка) в тот момент, когда список открыт.
Почему? Теряюсь в догадках.
← →
Игорь Шевченко © (2006-03-13 17:15) [6]API © (13.03.06 16:52) [5]
А, я очень извиняюсь, ComboBoxEx нельзя использовать ? Ведь в адресной строке IE именно он...
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2006.04.16;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.046 c