[pascal] надо послать ему сообщение (точно не помню что-то типа lb_sethorextent)12.06.03 14:21 Число просмотров: 1381 Автор: HandleX <Александр М.> Статус: The Elderman
[Pascal] Кто знает как к TListBox прицепить горизонтальный скролбар или заставить TListBox переносить строки если они в нем не помещаются?12.06.03 13:28 Автор: Fighter <Vladimir> Статус: Elderman
ListBox1.Perform(LB_SETHORIZONTALEXTENT,1620,0);
0 - длжно быть
1620 - на сколько пикселов можно прокручивать (число взято от балды)
Воззникает другой вопрос: а как узнать длину строки в пикселах?
[Pascal] Ты крут. Это почти одно и тоже ;-)15.06.03 22:46 Автор: HandleX <Александр М.> Статус: The Elderman
> ListBox1.Perform(LB_SETHORIZONTALEXTENT,1620,0); Метод Perform отправляет сообщение в оконную процедуру напрямую, не вставляя её в очередь...
> 0 - длжно быть > 1620 - на сколько пикселов можно прокручивать (число взято > от балды) > Воззникает другой вопрос: а как узнать длину строки в > пикселах? Тебе нужно найти самую длинную строку и посчитать её длину в пикселах (можно ещё прибавит 4-8 пикселов для надёжности).
Procedure SetLBHorExtent(lb: TListBox);
Var
J, aMax: Integer;
TempStr: String;
aSize: TSize;
MaxSize: Integer;
Begin
aMax := lb.Items.Count - 1;
If aMax = -1 Then Exit;
MaxSize := 0;
For J := 0 To aMax Do
Begin
TempStr := lb.Items[J];
Win32Check(GetTextExtentPoint32(Canvas.Handle, PChar(TempStr), Length(TempStr), aSize));
If aSize.cx > MaxSize Then
MaxSize := aSize.cx;
End;
If MaxSize = 0 Then Exit;
Inc(MaxSize, 8);
SendMessage(lb.Handle, LB_SETHORIZONTALEXTENT, MaxSize, 0);
End;
---
Внимание! Это работает правильно, если ListBox.ParentFont = True