Главная страница
    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.037 c
8-1069450256
BlaMyr
2003-11-22 00:30
2004.03.28
Как динамически создать TImage и затем обращаться к ней


14-1077816064
Palladin
2004-02-26 20:21
2004.03.28
Evolution of Ls


1-1078829595
Rauf
2004-03-09 13:53
2004.03.28
Wide аналог StrPos???


3-1077794897
mOOx_
2004-02-26 14:28
2004.03.28
который из IB не имеет зарезервироанного...


1-1078928524
vin
2004-03-10 17:22
2004.03.28
Частичная отрисовка канвы





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский