Форум: "Прочее";
Текущий архив: 2009.04.19;
Скачать: [xml.tar.bz2];
ВнизПосоветуйте компонент типа Плейлиста Найти похожие ветки
← →
DevilDevil (2009-02-16 09:32) [0]Здравствуйте, уважаемые форумчане.
Появилась необходимость организовать список по принципу плейлиста. С перемежением элементов, автоматическим скроллингом листа, переименованием элементов.
Текущая "реализация" основана на TListView... но мне она не нравится. Перемещение приходится реализовывать через Drag&Drop, скроллинг осуществлять вручную(не реализовано), как-то перерисовывать канву... Перерисовывается всё стрёмно... И лень с этим париться и время очень поджимает.
Помогите, пожалуйста. Наверняка сталкивался кто с таким вопросом, дайте линк на компонент.
Заранее спасибо
← →
clickmaker © (2009-02-16 12:03) [1]> Перемещение приходится реализовывать через Drag&Drop
а кто мешает по-другому сделать?
> скроллинг осуществлять вручную
а не вручную - это как?
← →
DevilDevil © (2009-02-16 13:42) [2]>а кто мешает по-другому сделать?
можно и подругому.
У меня даже есть опыт создания компонент в принципе и таблиц с перемещаемыми строками/столбцами в частности. Только нет требуемого времени (и желания)... в то время, как готовое должно существовать.
Вопрос открыт.
← →
clickmaker © (2009-02-16 13:48) [3]> Перерисовывается всё стрёмно
а что именно там должно перерисовываться?
← →
DevilDevil © (2009-02-16 13:55) [4]> clickmaker © (16.02.09 13:48) [3]
Александр, при всём уважении... вы теряете время: и своё и моё.
Необходим компонентик типа TListBox(TListView), обладающий возможностью перемещения элементов мышью.
← →
clickmaker © (2009-02-16 13:59) [5]на torry.ru смотрел?
честно говоря, не понимаю, какие трудности с перемещением... совсем не обязательно делать это через drag-drop
Но я бы делал именно так. Хотя бы потому, что файл извне можно перетащить в любую позицию
← →
DevilDevil © (2009-02-16 14:27) [6]на torry искал - ничего не нашёл; может слишком плохо искал.
>Хотя бы потому, что файл извне можно перетащить в любую позицию
ааа, нет, такой возможности не надо. Просто перемещение элементов внутри списка. И, желательно, с возможностью переименования.
>честно говоря, не понимаю, какие трудности с перемещением...
2 сложности. Во-первых, нужно прорисовывать предполагаемое место, куда "упадёт" перемещаемый элемент. В TListView это делается некрасиво, с какими-то "артефактами". Писать свою перерисовку - это как писать свой компонент; а времени нет.
Вторая сложность - скроллинг. Когда хватаешь элемент и тащешь его к верхнему/нижнему краю, компонент должен автоматически скроллироваться. Этот момент сложно запрограммировать. Если хотите, можете описать ваше решение - я опишу предстоящие проблемы
← →
antonn © (2009-02-16 22:56) [7]
> clickmaker © (16.02.09 13:59) [5]
>
> на torry.ru смотрел?
> честно говоря, не понимаю, какие трудности с перемещением.
> .. совсем не обязательно делать это через drag-drop
> Но я бы делал именно так.
D&d подразумевает не "реалтайм" перемещение? Пользователю нравится когда все плавно и, главное, получается сразу, потому плейлистов больше "как у винампа", здесь d&d не подходит. Переместить один элемент наверное не трудно, переместить массив выделеных элементов - наверное труднее. Плюс у ПЛ нужно выделять текущий проигрываемый трек и светить время справа (как минимум требуется от нормального ПЛ). Это не сложно, но время.
← →
DevilDevil © (2009-02-17 08:51) [8]Необходимости в проигрывании музыки, отображении времени и перемещении нескольких пунктов - нет. Есть список, необходимо перемещать (по одному) его элементы.
← →
test © (2009-02-17 08:54) [9]DevilDevil © (17.02.09 08:51) [8]
А ВинАмп чем не угодил?
← →
DevilDevil © (2009-02-17 09:05) [10]>test © (17.02.09 08:54) [9]
прочитайте хотя бы пару постов ветки. И вообще почаще так делайте.
← →
Эстет (2009-02-17 09:09) [11]
> DevilDevil © (16.02.09 14:27) [6]
Какие сложности-то? Вот когда-то делал:procedure Tfrm_Stickers.lb_BusinessDataDragDrop(Sender, Source: TObject; X, Y: Integer);
var
NuPos: Integer;
begin
with Sender as TRzEditListBox do begin
if SelectedItem() = "" then Exit;
NuPos := ItemAtPos(Point(X, Y), False);
if NuPos >= Items.Count - 1 then
NuPos := Items.Count - 1;
Items.Move(ItemIndex, NuPos);
ItemIndex := NuPos;
end;
end;
procedure Tfrm_Stickers.lb_BusinessDataDragOver(Sender, Source: TObject; X, Y: Integer;
State: TDragState; var Accept: Boolean);
var
NewIt: Integer;
begin
Accept := (TRzEditListBox(Sender).ItemAtPos(Point(X, Y), False) >= 0);
if Accept then begin
with Sender as TRzEditListBox do begin
HideEditor(False);
NewIt := ItemAtPos(Point(X, Y), True);
if NewIt = -1 then
Exit;
if NewIt <> CurrentItemInDrag then begin
CurrentItemInDrag := NewIt;
lb_BusinessDataDragDrop(Sender, Source, X, Y);
end;
if y > Height - ItemHeight then begin
TopIndex := TopIndex + 1;
end
else begin
if y < ItemHeight then begin
TopIndex := TopIndex - 1;
end;
end;
end;
end;
end;
← →
DevilDevil © (2009-02-17 09:13) [12]а где скролинг ?
P.S. не подкините линк на Rz-компоненты ?
← →
Эстет (2009-02-17 09:24) [13]
> DevilDevil © (17.02.09 09:13) [12]
> а где скролинг ?
Вот.if y > Height - ItemHeight then begin
TopIndex := TopIndex + 1;
end
else begin
if y < ItemHeight then begin
TopIndex := TopIndex - 1;
end;
end;
> DevilDevil © (17.02.09 09:13) [12]
> не подкините линк на Rz-компоненты ?
Ну, ты батенька... Тебе мало в рот положить, тебе еще и разжевать надо.
← →
Эстет (2009-02-17 09:47) [14]Rz-компоненты - Raize Components - www.raize.com/DevTools/RzComps/
← →
DevilDevil © (2009-02-17 13:15) [15]> Эстет
ОЧЕНЬ большое спасибо! То, что нужно!
Страницы: 1 вся ветка
Форум: "Прочее";
Текущий архив: 2009.04.19;
Скачать: [xml.tar.bz2];
Память: 0.49 MB
Время: 0.044 c