Модераторы: Poseidon, Snowy, bems, MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Горизонтальные полосы прокрутки в ListBox. 
:(
    Опции темы
NiJazz
  Дата 5.4.2004, 10:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Jazz coder
****


Профиль
Группа: Экс. модератор
Сообщений: 2286
Регистрация: 10.8.2003
Где: Москва

Репутация: 6
Всего: 23



Если число строк в ListBox становится больше его высоты, то автоматически появляется скроллер. Как сделать так, чтобы горизонтальный тоже появлялся в случае надобности?
PM MAIL   Вверх
p0s0l
Дата 5.4.2004, 14:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Г-н Посол
****


Профиль
Группа: Экс. модератор
Сообщений: 3668
Регистрация: 13.7.2003
Где: 58°38' с.ш. 4 9°41' в.д.

Репутация: 58
Всего: 112



Это сложно. Нужно будет подменять WndProc, самому отрисовывать итемы и т.д.
Вот, например, скроллбар появится, но ничего не делает:
Код
var
 OldWndProc : pointer;

function LBWndProc (hwnd1 : HWND; uMsg : cardinal; wP : WPARAM; lP : LPARAM) : LRESULT; stdcall;
begin
 if uMsg = WM_HSCROLL then
 begin
// < скроллирование >
   Result := 0;
 end  
 else
 Result := CallWindowProc(OldWndProc, hwnd1, uMsg, wP, lP);
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
 with ListBox1 do
 begin
   SetScrollRange (Handle, SB_HORZ, 0, ClientWidth, False);
   EnableScrollBar (Handle, SB_BOTH, ESB_ENABLE_BOTH);
   ShowScrollBar (Handle, SB_BOTH, true);
   OldWndProc := pointer(SetWindowLong(Handle, GWL_WNDPROC, integer(@LBWndProc)));
 end;
end;



--------------------
С уважением, г-н Посол.
PM   Вверх
Alex
Дата 5.4.2004, 15:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 4147
Регистрация: 25.3.2002
Где: Москва

Репутация: 80
Всего: 162



В Delphi компонент TListBox автоматически включает в себя вертикальный scrollbar. Полоска прокрутки появляется в том случае, если все элементы списка не помещаются в видимую область списка. Однако, list box не показывает горизонтального скролбара, когда ширина элементов превышает ширину списка. Конечно же существует способ добавить горизонтальную полосу прокрутки.

Добавьте следующий код в событие Вашей формы OnCreate.

Код
procedure TForm1.FormCreate(Sender: TObject);  
var  
 i, MaxWidth: integer;  
begin  
 MaxWidth := 0;  
 for i := 0 to LB1.Items.Count - 1 do  
 if MaxWidth < LB1.Canvas.TextWidth(LB1.Items.Strings[i]) then  
   MaxWidth := LB1.Canvas.TextWidth(LB1.Items.Strings[i]);  
 SendMessage(LB1.Handle, LB_SETHORIZONTALEXTENT, MaxWidth+2, 0);  
end;


Приведённый код определяет ширину в пикселях самой длинной строки списка. Затем он использует сообщение LB_SETHORIZONTALEXTENT, чтобы установить ширину горизонтального скролбара в пикселях. Два дополнительных пикселя добавленные к MaxWidth служат для стрелки в правом углу list box-а.


--------------------
Написать можно все - главное четко представлять, что ты хочешь получить в конце. 
PM Skype   Вверх
p0s0l
Дата 5.4.2004, 15:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Г-н Посол
****


Профиль
Группа: Экс. модератор
Сообщений: 3668
Регистрация: 13.7.2003
Где: 58°38' с.ш. 4 9°41' в.д.

Репутация: 58
Всего: 112



alex-co, а я замудрить опять хотел ... wink.gif




--------------------
С уважением, г-н Посол.
PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0609 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.