информационная безопасность
без паники и всерьез
 подробно о проектеRambler's Top100
За кого нас держат?Где водятся OGRыSpanning Tree Protocol: недокументированное применение
BugTraq.Ru
Русский BugTraq
 Анализ криптографических сетевых... 
 Модель надежности двухузлового... 
 Специальные марковские модели надежности... 
 Очередное исследование 19 миллиардов... 
 Оптимизация ввода-вывода как инструмент... 
 Зловреды выбирают Lisp и Delphi 
главная обзор RSN блог библиотека закон бред форум dnet о проекте
bugtraq.ru / форум / programming
Имя Пароль
если вы видите этот текст, отключите в настройках форума использование JavaScript
ФОРУМ
все доски
FAQ
IRC
новые сообщения
site updates
guestbook
beginners
sysadmin
programming
operating systems
theory
web building
software
hardware
networking
law
hacking
gadgets
job
dnet
humor
miscellaneous
scrap
регистрация





Легенда:
  новое сообщение
  закрытая нитка
  новое сообщение
  в закрытой нитке
  старое сообщение
[pascal] надо послать ему сообщение (точно не помню что-то типа lb_sethorextent) 12.06.03 14:21  Число просмотров: 1381
Автор: HandleX <Александр М.> Статус: The 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-2025 Dmitry Leonov   Page build time: 0 s   Design: Vadim Derkach