Форум: "Основная";
Текущий архив: 2006.02.12;
Скачать: [xml.tar.bz2];
Вниз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 вся ветка
Форум: "Основная";
Текущий архив: 2006.02.12;
Скачать: [xml.tar.bz2];
Память: 0.45 MB
Время: 0.036 c