Нужно сделать прокрутку в ListBox'e
Так как файлы как правило лежат глубоко в папках, то в листбоксе отображаются очень длинные строки - пути к этим файлам. В связи с этим пара вопросов:
1. Как сделать это окошко (ListBox) прокручиваемым по горизонтали - чтобы просмотреть пути полностью?
Я пробовал ScrollBox & ScrollBar, но не смог их правильно заюзать.
2. Есть ли идеи как сделать чтоб в ListBox отображался не путь полностью, а только имя файла, но ссылка на файл чтоб где-то сохранялась?
Благодарю за помощь.
Администрация, переместите это плиз в тему "Я начинающий" - хотел запостить туда, но видимо не туда ткнул :-(
Цитата:
Originally posted by Andreww
У меня на форме располагается ListBox в который я загружаю список файлов (картинок) с помощью OpenDialog, которые будут в дальнейшем обрабатываться.
Так как файлы как правило лежат глубоко в папках, то в листбоксе отображаются очень длинные строки - пути к этим файлам. В связи с этим пара вопросов:
1. Как сделать это окошко (ListBox) прокручиваемым по горизонтали - чтобы просмотреть пути полностью?
Я пробовал ScrollBox & ScrollBar, но не смог их правильно заюзать.
У меня на форме располагается 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;
}
}
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 строчки? Что-то я не понял даже куда его лепить...
Видимо с прокруткой в ЛистБоксе никто не сталкивался, жаль...
Цитата:
Originally posted by Andreww
А что делает первый код, который состоит из 1 строчки? Что-то я не понял даже куда его лепить...
А что делает первый код, который состоит из 1 строчки? Что-то я не понял даже куда его лепить...
В конструктор формы напр.
Цитата:
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);
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;
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;
На этом вопрос закрыт.
Цитата:
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);
Порылся по инету, нашел решение. Так что сам себе отвечаю, вдруг кому еще понадобится. Код Дельфинарийский, но легко переделывается в Билдеровский:
#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);
- Вы в баню?
- Не я в баню!
Просто с примером понятнее...
Цитата:
Originally posted by Andreww
Издеваетесь ;-)
Просто с примером понятнее...
Издеваетесь ;-)
Просто с примером понятнее...
Пошутил. Сорри:)