Модераторы: Poseidon, Snowy, bems, MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> ширина строк в ListBox 
:(
    Опции темы
offline
Дата 14.3.2005, 23:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 474
Регистрация: 7.2.2005

Репутация: нет
Всего: 7



Подскажите, что и как делать
У меня есть ListBox в котором есть строки превышающие ширину ListBox. Как сделать, чтобы когда курсор мыши находится над любой строкой выполнялось следующее. Если строка умещается в ширину, то ничего не происходит, а если строка длиннее чем ширина ListBox, то она как бы всплывает поверх ListBox и вся читаема.

PM MAIL   Вверх
offline
Дата 14.3.2005, 23:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 474
Регистрация: 7.2.2005

Репутация: нет
Всего: 7



данные строки могу взять так smile

Код

procedure TForm1.ListBox1MouseMove(Sender: TObject; Shift: TShiftState; X,
  Y: Integer);
begin
 label1.Caption := ListBox1.Items.ValueFromIndex[( y div ListBox1.ItemHeight)];
end;


Осталась проверка ее длины и вывод поверх ListBox
PM MAIL   Вверх
offline
Дата 15.3.2005, 00:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 474
Регистрация: 7.2.2005

Репутация: нет
Всего: 7



длину текста можно определить

Canvas.TextWidth(label1.Caption);

А вот као это все вывести поверх ListBox1 smile

PM MAIL   Вверх
-=Ustas=-
Дата 15.3.2005, 00:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Ustix IT Group
****


Профиль
Группа: Участник Клуба
Сообщений: 2222
Регистрация: 21.1.2005
Где: Краснодар

Репутация: нет
Всего: 69



Попробуй на MouseMove и OnShowHint:
Код

private
    { Private declarations }
    FHintRow : Integer; // Номер строки в списке, на которую указывает мышь
public
    { Public declarations }
    // Обработчик подсказок
    procedure OnShowHint(var HintStr: string; var CanShow: Boolean; var HintInfo: THintInfo);


procedure TMainForm.OnShowHint(var HintStr: string; var CanShow: Boolean; var HintInfo: THintInfo);
var 
    Pos: TPoint;
begin
    with HintInfo do
        if HintControl is TListBox then    // Проверка на нужный объект
            with HintControl as TListBox do
                 begin
                  Pos.X := 0;
                  Pos.Y := ListBox1.Tag;
                  HintPos := ListBox1.ClientToScreen(Pos);
                  HintStr := ListBox1.Hint;
            end;
end;

procedure TMainForm.ListBox1MouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);
var 
    MousePos: TPoint;
    ItemPos: TRect;
    RowWidth, ItemNum: Integer;
    FHint: String;
begin
    MousePos.X := X;
    MousePos.Y := Y;
    ItemNum := ListBox1.ItemAtPos(MousePos, True); // Определение номера строки в списке

    if (ItemNum <> FHintRow) then  // Проверка на перемещение мыши на другую строку
        begin
            FHintRow := ItemNum;
                if ItemNum <> -1 then      // Проверка на наличие элементов в списке
               begin
                     ItemPos := ListBox1.ItemRect(ItemNum);
                     Application.CancelHint; // Снять текущую подсказку
                     ListBox1.Tag := ItemPos.Top; // Запоминаем позицию строки по вертикали
                     FHint := ListBox1.Items[ItemNum];
                     // Проверка на ширину строки  
                     RowWidth := ListBox1.Canvas.TextWidth(FHint );
                     if (RowWidth > ListBox1.ClientWidth) then 
                         FHint := FHint + '|'
                       else FHint := '';

                     ListBox1.Hint := FHint;
               end
       else 
           begin 
                        ListBox1.Hint := '';
                       Application.CancelHint;
                       ListBox1.Tag := -1; 
                    end;
        end;
end;

Вроде бы так.


--------------------
В искаженном мире все догмы одинаково произвольны, включая догму о произвольности догм.
-----
PM WWW ICQ Skype   Вверх
offline
Дата 15.3.2005, 00:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 474
Регистрация: 7.2.2005

Репутация: нет
Всего: 7



>Ustas_007

спасибо за помощь, осталось разобраться

smile
smile
PM MAIL   Вверх
Alex
Дата 15.3.2005, 01:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 4147
Регистрация: 25.3.2002
Где: Москва

Репутация: 80
Всего: 162





--------------------
Написать можно все - главное четко представлять, что ты хочешь получить в конце. 
PM Skype   Вверх
SPrograMMer
Дата 15.3.2005, 02:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Спамер :)
**


Профиль
Группа: Участник
Сообщений: 442
Регистрация: 5.11.2004
Где: Краснодар

Репутация: 2
Всего: 6



Вот тут кое-что, правда для ComboBox`а, а для ListBox`а - немного переделок.

Присоединённый файл ( Кол-во скачиваний: 7 )
Присоединённый файл  HintComboBox.zip


--------------------
животное = зверь
законченный гентушник
PM MAIL ICQ Jabber   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.1007 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.