Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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
5-1124352966
Stanislav
2005-08-18 12:16
2006.02.12
В Наследнике TScrollBox периписать процедуру скроллинга


2-1137957807
Сайбель Алексей
2006-01-22 22:23
2006.02.12
RichEdit style fsBold


1-1136730616
Glex
2006-01-08 17:30
2006.02.12
Форма с прозрачностями в CLX?


2-1138017553
МегаПупс
2006-01-23 14:59
2006.02.12
Directory


2-1138324492
Лом
2006-01-27 04:14
2006.02.12
что за глюк !





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