информационная безопасность
без паники и всерьез
 подробно о проектеRambler's Top100
Атака на InternetВсе любят медГде водятся OGRы
BugTraq.Ru
Русский BugTraq
 Анализ криптографических сетевых... 
 Модель надежности двухузлового... 
 Специальные марковские модели надежности... 
 На GitHub пугают ложными предупреждениями... 
 Атака на пользователей больших... 
 Notepad++ полгода раздавал зараженные... 
главная обзор RSN блог библиотека закон бред форум dnet о проекте
bugtraq.ru / форум / programming
Имя Пароль
ФОРУМ
если вы видите этот текст, отключите в настройках форума использование JavaScript
регистрация





Легенда:
  новое сообщение
  закрытая нитка
  новое сообщение
  в закрытой нитке
  старое сообщение
  • Напоминаю, что масса вопросов по функционированию форума снимается после прочтения его описания.
  • Новичкам также крайне полезно ознакомиться с данным документом.
[Pascal] А как? 12.06.03 15:55  Число просмотров: 1435
Автор: Fighter <Vladimir> Статус: Elderman
<"чистая" ссылка>
<programming>
[Pascal] Кто знает как к TListBox прицепить горизонтальный скролбар или заставить TListBox переносить строки если они в нем не помещаются? 12.06.03 13:28  
Автор: Fighter <Vladimir> Статус: Elderman
<"чистая" ссылка>
[pascal] надо послать ему сообщение (точно не помню что-то типа lb_sethorextent) 12.06.03 14:21  
Автор: HandleX <Александр М.> Статус: The Elderman
<"чистая" ссылка>
[Pascal] А как? 12.06.03 15:55  
Автор: Fighter <Vladimir> Статус: Elderman
<"чистая" ссылка>
[Win32] SendMessage() 12.06.03 16:12  
Автор: HandleX <Александр М.> Статус: The Elderman
Отредактировано 12.06.03 16:26  Количество правок: 1
<"чистая" ссылка>
[Pascal] Я нашел другую штуку 12.06.03 16:37  
Автор: 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
[Pascal] 2 HandleX. Я знаю ;-) 19.06.03 16:37  
Автор: Fighter <Vladimir> Статус: Elderman
<"чистая" ссылка>
> Win32Check(GetTextExtentPoint32(Canvas.Handle, PChar(TempStr), Length(TempStr), aSize));
Вот именно об этом я и спрашивал! Огромное спасибо!
1




Rambler's Top100
Рейтинг@Mail.ru


  Copyright © 2001-2026 Dmitry Leonov   Page build time: 1 s   Design: Vadim Derkach