Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.03.28;
Скачать: CL | DM;

Вниз

Длинные записи в ComboBox   Найти похожие ветки 

 
t_vic   (2004-03-01 17:51) [0]

Такая проблема - ComboBox содержит длинные записи, очень важно при выборе записи знать ее текст полностью. Вопрос: как осуществить такое с помощью Hint"ов? Или может есть другое решение?


 
alless ©   (2004-03-01 18:08) [1]

Poprobui ato:

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. В процедуре сообщения анализируйте - если длина строки больше ширины выпадающего списка – передайте "длинную" строку в ваш Hint и активируйте его:

--------------------------------------------------------------------------------
   FHint.ActivateHint(TextRC, Items[ItemIndex]);

где
TextRC – прямоугольник для строки подсказки
Items[ItemIndex] – "длинная" строка из выпадающего списка

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

--------------------------------------------------------------------------------
   FHint.ReleaseHandle;

Для получения подробной информации о классе THintWindow воспользуйтесь Help из Delphi.



 
alless ©   (2004-03-01 18:13) [2]

nu,kak polucilosi?


 
t_vic   (2004-03-01 18:15) [3]

Я уже пробовала этот вариант. дело в том, что у меня на ComboBoxe уже висит куча обработчиков событий. А что с ними делать то?

> Чтобы получить информацию об активной строке в выпадающем
> списке ComboBox перехватите сообщение WM_CTLCOLORLISTBOX.
> В процедуре сообщения анализируйте - если длина строки больше
> ширины выпадающего списка – передайте "длинную" строку в
> ваш Hint и активируйте его:
>
> --------------------------------------------------------------------------------
>    FHint.ActivateHint(TextRC, Items[ItemIndex]);

И я не понимаю какой параметр передать  в качестве TextRC?
Может есть какой-то более понятный пример, то буду очень признательна.


 
alless ©   (2004-03-01 18:21) [4]

TextRC – прямоугольник для строки подсказки


 
Ivolg ©   (2004-03-01 18:24) [5]

combobox1.Hint:=combobox1.Text;
application.HintHidePause:=10000;
application.HintPause:=100;


 
MBo ©   (2004-03-01 18:25) [6]

http://delphi.vitpc.com/treasury/combo.htm


 
t_vic   (2004-03-01 18:26) [7]


> TextRC – прямоугольник для строки подсказки

т.е. FHint.Canvas.Rect передать?


 
t_vic   (2004-03-01 18:28) [8]


> combobox1.Hint:=combobox1.Text;
> application.HintHidePause:=10000;
> application.HintPause:=100;

а на какое событие его вешать?


 
t_vic   (2004-03-01 18:41) [9]

MBo, спасибо за ссылку! Пойду попробую так...


 
Ivolg ©   (2004-03-01 19:07) [10]

//t_vic

procedure TForm1.ComboBox1Change(Sender: TObject);
begin
combobox1.Hint:=combobox1.Text;
application.HintHidePause:=10000;
application.HintPause:=100;
end;


 
t_vic   (2004-03-02 10:25) [11]

А если делать вот так:

type
TVSComboBox = class(TCustomComboBox)

private
FHint: THintWindow;

protected
procedure WMCTLCOLORLISTBOX(var Message: TMessage); message WM_CTLCOLORLISTBOX;
и не забудьте выполнить инициализацию в конструкторе вашего компонента:


то как для такого ComboBoxa правильно описать обработчик события OnChange????


 
Игорь Шевченко ©   (2004-03-02 11:55) [12]

t_vic   (02.03.04 10:25)


> то как для такого ComboBoxa правильно описать обработчик
> события OnChange????


Также, как для обычного - VSComboBox1.OnChange := ComboBoxOnChangeHandler;

и в форме сделать процедуру TForm1.ComboBoxOnChangeHandler (Sender : TObject)


 
pasha_golub ©   (2004-03-02 12:31) [13]

Игорь Шевченко ©   (02.03.04 11:55) [12]
А не сильно ли сложной является эта реализация? Мне вот недавно попался вариант через tooltips, вроде попроще.


 
Игорь Шевченко ©   (2004-03-02 13:53) [14]

pasha_golub ©   (02.03.04 12:31)

А чего там сложного ? (если ты имеешь в виду мою реализацию с Королевства)


 
pasha_golub ©   (2004-03-02 14:00) [15]

Игорь Шевченко ©   (02.03.04 13:53) [14]

Да эту имею. Не то что чложно для понимания, просто как-то много кода что-ли. А ведь мы знаем, что:

"число строк и их длина прямо пропорциональны размеру скомпилированной программы".

http://www1.xakep.ru/magazine/xa/033/064/1.asp :-))

Я к чему. Вот на днях тоже делал in-place подсказку. Сделал с помощью hint"ов и с помощью tooltips. Так вот второй метод мне почему-то больше по душе. Правада делал для TStringGrid.


 
t_vic   (2004-03-02 14:18) [16]


> А чего там сложного ? (если ты имеешь в виду мою реализацию
> с Королевства)

ну вроде ничего сложного нет, но если учесть что я с API раньше вообще не работала, то мне не очень понятно момент один:

если у меня было:

procedure TForm1.ComboBoxChange(Sender: TObject);
begin
......
//тут идет манипуляция со свойствами других объектов формы
end;


а теперь мы добавляем unit HSHintComboBox

и пишем

procedure TForm1.FormCreate(Sender: TObject);
begin
 FHSHintComboBox := THSHintComboBox.Create(Self);
 with FHSHintComboBox do begin
   Parent := Self;
   Items.Assign(ComboBox.Items);
   BoundsRect := ComboBox.BoundsRect;
   if NOT (ComboBox.Style in [csDropDown, csDropDownList]) then
     raise Exception.Create (
      "HSHintComboBox ïîääåðæèâàåò ñòèëü òîëüêî csDropDown è csDropDownList");
   Style := ComboBox.Style;
   DropDownCount := ComboBox.DropDownCount;
   TabOrder := ComboBox.TabOrder;
   TabStop := ComboBox.TabStop;
   OnListMouseMove := HSHintComboBoxListMouseMove;
 end;
 ComboBox.Free();
end;


теперь надо еще сюда дописать

FHSHintComboBox.OnChange := ComboBoxChange;


Я правильно поняла?


 
Andrey007   (2004-03-04 10:42) [17]

SendMessage(ComboBox1.Handle,352,aaa,0); - устанавливает ширину выпадающего списка TcomboBox"a равной aaa


 
t_vic   (2004-03-04 17:04) [18]

Andrey007, спасиба огромное!



Страницы: 1 вся ветка

Текущий архив: 2004.03.28;
Скачать: CL | DM;

Наверх




Память: 0.51 MB
Время: 0.051 c
14-1077924171
Cobalt
2004-02-28 02:22
2004.03.28
Закончился MMP


1-1078467939
TUser
2004-03-05 09:25
2004.03.28
TrackBar


3-1077723225
Domkrat
2004-02-25 18:33
2004.03.28
Работа с *.DBF


1-1078996562
vint45
2004-03-11 12:16
2004.03.28
Парсер DCU--файлов


3-1076950170
freshman
2004-02-16 19:49
2004.03.28
Как сделать цикл чтения БД