Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Нужно сделать прокрутку в ListBox'e

1.8K
03 апреля 2006 года
Andreww
81 / / 02.01.2004
У меня на форме располагается ListBox в который я загружаю список файлов (картинок) с помощью OpenDialog, которые будут в дальнейшем обрабатываться.
Так как файлы как правило лежат глубоко в папках, то в листбоксе отображаются очень длинные строки - пути к этим файлам. В связи с этим пара вопросов:

1. Как сделать это окошко (ListBox) прокручиваемым по горизонтали - чтобы просмотреть пути полностью?
Я пробовал ScrollBox & ScrollBar, но не смог их правильно заюзать.

2. Есть ли идеи как сделать чтоб в ListBox отображался не путь полностью, а только имя файла, но ссылка на файл чтоб где-то сохранялась?

Благодарю за помощь.

Администрация, переместите это плиз в тему "Я начинающий" - хотел запостить туда, но видимо не туда ткнул :-(
246
04 апреля 2006 года
GIZMO
1.8K / / 30.07.2004
Цитата:
Originally posted by Andreww
У меня на форме располагается ListBox в который я загружаю список файлов (картинок) с помощью OpenDialog, которые будут в дальнейшем обрабатываться.
Так как файлы как правило лежат глубоко в папках, то в листбоксе отображаются очень длинные строки - пути к этим файлам. В связи с этим пара вопросов:

1. Как сделать это окошко (ListBox) прокручиваемым по горизонтали - чтобы просмотреть пути полностью?
Я пробовал ScrollBox & ScrollBar, но не смог их правильно заюзать.


 
Код:
ListBox1->Perform(LB_SETHORIZONTALEXTENT, ListBox1->Width, 0);


(C) Mr. Chandler:
Код:
// in header...
    THintWindow *hintWindow;
    bool HintActive;


// in source...
__fastcall TForm1::TForm1(TComponent* Owner)
    : TForm(Owner)
{
    hintWindow = new THintWindow(this);
    HintActive = false;
}

void __fastcall TForm1::ListBox1MouseMove(TObject *Sender, TShiftState Shift,
    int X, int Y)
{
    static int OldIndex = -1;
    int Index = ListBox1->ItemAtPos(Point(X, Y), true);

    if (Index != OldIndex && Index != -1)
    {
        AnsiString text = ListBox1->Items->Strings[Index];
        TPoint P = ListBox1->ClientToScreen(Point(X, Y));
        TRect R = Rect(P.x + 10, P.y + 20, P.x + 100, P.y + 40);
        hintWindow->ActivateHint(R, text);
     HintActive = true;
        OldIndex = Index;
    }

    else if (Index == -1 && HintActive)
    {
     hintWindow->ReleaseHandle();
        HintActive = false;
    }
}
1.8K
04 апреля 2006 года
Andreww
81 / / 02.01.2004
Второй кусок кода как я понял выводит всплывающую подсказку - как-то это не совсем хорошо....

А что делает первый код, который состоит из 1 строчки? Что-то я не понял даже куда его лепить...

Видимо с прокруткой в ЛистБоксе никто не сталкивался, жаль...
246
05 апреля 2006 года
GIZMO
1.8K / / 30.07.2004
Цитата:
Originally posted by Andreww

А что делает первый код, который состоит из 1 строчки? Что-то я не понял даже куда его лепить...


В конструктор формы напр.

Цитата:
Originally posted by Andreww


Видимо с прокруткой в ЛистБоксе никто не сталкивался, жаль...


Интернет завален ответами...

1.8K
07 апреля 2006 года
Andreww
81 / / 02.01.2004
Порылся по инету, нашел решение. Так что сам себе отвечаю, вдруг кому еще понадобится. Код Дельфинарийский, но легко переделывается в Билдеровский:

#10:How can I add the horizontal scrollbar into listbox?

If you want to add a horizontal scrollbar in TListBox
(which have a vertical scrollbar only by default),
you need send a LB_SETHORIZONTALEXTENT message:
SendMessage(ListBox1.Handle, LB_SETHORIZONTALEXTENT, FMaxItemWidth, 0);

For example, the next code shows how you can scroll a data
with maximum width of item strings:
Код:
procedure TForm1.FormCreate(Sender: TObject);
var i, intWidth, intMaxWidth: Integer;
begin
  intMaxWidth := 0;
  for i := 0 to ListBox1.Items.Count-1 do
  begin
    intWidth := ListBox1.Canvas.TextWidth(ListBox1.Items.Strings + 'x');
    if intMaxWidth < intWidth then
      intMaxWidth := intWidth;
  end;
  SendMessage(ListBox1.Handle, LB_SETHORIZONTALEXTENT, intMaxWidth, 0);
end;


На этом вопрос закрыт.
246
09 апреля 2006 года
GIZMO
1.8K / / 30.07.2004
Цитата:
Originally posted by Andreww
Порылся по инету, нашел решение. Так что сам себе отвечаю, вдруг кому еще понадобится. Код Дельфинарийский, но легко переделывается в Билдеровский:

#10:How can I add the horizontal scrollbar into listbox?

If you want to add a horizontal scrollbar in TListBox
(which have a vertical scrollbar only by default),
you need send a LB_SETHORIZONTALEXTENT message:
SendMessage(ListBox1.Handle, LB_SETHORIZONTALEXTENT, FMaxItemWidth, 0);



- Вы в баню?
- Не я в баню!

1.8K
10 апреля 2006 года
Andreww
81 / / 02.01.2004
Издеваетесь ;-)
Просто с примером понятнее...
246
10 апреля 2006 года
GIZMO
1.8K / / 30.07.2004
Цитата:
Originally posted by Andreww
Издеваетесь ;-)
Просто с примером понятнее...


Пошутил. Сорри:)

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог