Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2004.03.28;
Скачать: [xml.tar.bz2];

Вниз

Длинные записи в 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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.49 MB
Время: 0.061 c
7-1073040090
Tahion2
2004-01-02 13:41
2004.03.28
Как узнать устаовлен ли Service Pack 1 в Windows XP?


1-1078483150
Well
2004-03-05 13:39
2004.03.28
как создать Слайд шоу


6-1073904178
Alibaba
2004-01-12 13:42
2004.03.28
Получить email


1-1079000130
Zeus_Chess
2004-03-11 13:15
2004.03.28
РАБОТА С ФАЙЛАМИ В stl - ФОРМАТЕ


1-1078761140
sergeii
2004-03-08 18:52
2004.03.28
Fast report





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский