Вниз
Скачать: CL | DM;

ListBox и прокрутка вниз.   Найти похожие ветки 

 
Gear   (2006-01-14 15:20) [0]

Здравствуйте!
Проблема:
в OnMeasureItem выставляю различные величины размера Item в зависимости от текста в каждом Item и т.д.
Делаю отрисовку каждого Item (DrawItem). Всё замечательно. При показе ListBox хочу чтобы список при выводе прокручен был до конца вниз. Делаю при показе вормы (OnShow) следующее:
ListBox1.Perform(WM_VSCROLL, Pred(SB_BOTTOM), 0);
Он прокручивается вниз, однако прокручивается ровно настолько насколько если бы Items были стандартным размером, а не тем, что я выставлял для каждого в  OnMeasureItem. Кто-нибудь знает как сделать правильно и при выводе список был прокручен доконца?


 
begin...end ©   (2006-01-14 15:47) [1]

> Gear   (14.01.06 15:20)

> ListBox1.Perform(WM_VSCROLL, Pred(SB_BOTTOM), 0);

Вообще-то, Pred(SB_BOTTOM) -- это SB_TOP.


 
begin...end ©   (2006-01-14 16:00) [2]

А с SB_BOTTOM у меня прокрутка сработала нормально -- ListBox прокрутился вниз до самого конца, несмотря на различные высоты элементов (проверял на Windows 2000).


 
Gear   (2006-01-14 16:04) [3]

Это не всё равно не помогло (


 
Gear   (2006-01-14 16:05) [4]

А можно код глянуть?


 
begin...end ©   (2006-01-14 16:13) [5]

> Gear   (14.01.06 16:04) [3]

Что не помогло? В [1] я имел в виду, что Pred(SB_BOTTOM) -- это SB_TOP, что означает прокрутку вверх, а Вы говорите, что список прокручивается вниз. Т.е. непонятно, зачем Pred().

> Gear   (14.01.06 16:05) [4]

На форме -- пустой ListBox со стилем lbOwnerDrawVariable. Обработчики:

procedure TForm1.ListBox1MeasureItem(Control: TWinControl; Index: Integer;
 var Height: Integer);
begin
 Height := 15 + Index
end;

procedure TForm1.ListBox1DrawItem(Control: TWinControl; Index: Integer;
 Rect: TRect; State: TOwnerDrawState);
begin
 with Control as TListBox do
   Canvas.TextOut(Rect.Left, Rect.Top, Items[Index])
end;

procedure TForm1.FormShow(Sender: TObject);
begin
 ListBox1.Perform(WM_VSCROLL, SB_BOTTOM, 0)
end;

procedure TForm1.FormCreate(Sender: TObject);
var
 I: integer;
begin
 for I := 1 to 50 do
   ListBox1.Items.Add(IntToStr(I))
end;



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

Скачать: CL | DM;



Память: 0.46 MB
Время: 0.033 c
2-1138312913
Goryn
2006-01-27 01:01
2006.02.12
Окна нет


1-1136917703
Imba4imba
2006-01-10 21:28
2006.02.12
BitMap и PixelFormat


6-1131098835
kazar
2005-11-04 13:07
2006.02.12
компоненты indy


15-1138080632
begin...end
2006-01-24 08:30
2006.02.12
С Днём рождения! 24 января


9-1113560515
Антон К.
2005-04-15 14:21
2006.02.12
Требуется музыкант/композитор...




   Наверх