Форум: "Основная";
Текущий архив: 2005.09.25;
Скачать: [xml.tar.bz2];
ВнизПлейлист в Delphi? Найти похожие ветки
← →
Shakal (2005-08-30 14:07) [0]Я уже читал про drag&drop в TListBox, но не хватает у меня мозгов коды дополнить на перемещение нескольких итемов. Замучился уже, больше 2-х месяцев сижу. Может, в инете плохо ищу? Не знаю, но не нашёл. Прошу помощи мастеров!
← →
-=S.S=- © (2005-08-30 14:24) [1]откуда куда перетаскивать надо ?
← →
Antonn © (2005-08-30 15:35) [2]-=S.S=- © (30.08.05 14:24) [1]
перемещать надо. одновременно несколько (выделенных через ctrl, например).
← →
Antonn © (2005-08-30 15:36) [3]Shakal (30.08.05 14:07)
что хранится в итемах(объект? или просто строка?)
← →
Shakal (2005-08-30 15:59) [4]Хранятся названия медиафайлов. Это те, которые отображаются визуально. А не отображаются полные адреса к этим файлам.
← →
Юрий Зотов © (2005-08-30 16:28) [5]http://www.yandex.ru/yandsearch?rpt=rad&text=Delphi+Drag+Drop+%F4%E0%E9%EB
И пример в папке ($Delphi)\Demos\RichEdit
← →
злобная танька (2005-08-30 19:15) [6]по-моему г-н Shakal имеет ввиду таскание файлов мышью по списку "аля winamp".. была тут тема такая не так давно.
← →
злобная танька (2005-08-30 19:29) [7]Shakal, наподобие как здеся ( http://delphimaster.net/view/1-1124262559/ ) в [11]?
← →
Shakal (2005-08-31 01:18) [8]злобная танька
Да, именно. Но, похоже, у г-на Найти, тоже проблема с перемещением нескольких строк, судя по его последнему писанию. Наверное, мы пока в тупике. Просвятите меня! Какой секрет перемещения? Пожалуйста!
← →
Antonn © (2005-08-31 09:10) [9]Shakal (31.08.05 1:18) [8]
нет никакого секрета, вполне возможно, что проще написать свой компонент(мне пришлось - получилось менее геморройно).
Не знаю, кто мне писмо писать, но еще раз скажу:
* если строка перемещается вверх, то нужно в цикле пробежать сверху вниз и все выделенные переместить вверх.
* если строка перемещается вниз, то нужно в цикле пробежаться снизу вверх и переместить вниз все выделенные.
Осталось определить, какие из них выделенные. При MultiSelect можно выделить несколько итемов, но при перетаскивании(код в OnMouseMove) все выделение слетает, в итоге не известно, что мы перетаскиваем, получается чехарда. Даже без кода, попробуйте при Мультиселекте проделать MouseMove, итемы будут выделяться(или наоборот), что совсем не нужно. Я, когда писал плейлист, использовал такую структуру:pPlayListItem = ^TPlayListItem;
TPlayListItem = Record
Filename : String;
Path : String;
Dura : String;
Dura_m:integer;
Select : boolean;
Track : boolean;
UnderAdd: boolean;
Item: pointer;
End;
Т.е. Select и указывал, что этот итем выделен. Можно подобное прицепить и к ListBox"у (только нужно следить что память не текла, вовремя убивать объекты при удалении), останется решить, как Select:=true делать. Можно при OnMouseDown, а на OnMouseUp снимать. Но все равно это фигня... Нужно еще отслеживать зажатие Ctrl,Shift.
Думаю ListBox не подходит. А что насчет других компонентов? на http://www.torry.net/ смотрел?
Вот то, что осталось от моей первой и последней попытки сделать из ListBox"а плейлист:unit LBPL;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms,StdCtrls,menus, Dialogs;
type
pPlayListItem = ^TPlayListItem;
TPlayListItem = Record
Filename : String;
Path : String;
Dura : String;
Dura_m:integer;
Select : boolean;
Track : boolean;
End;
TLBPlayLlist = class(TListBox)
private
IsMouseDown:boolean;
LastMovePos:integer;
procedure SetItemSelect(_Num:integer);
procedure SetItemsUnSelect;
procedure MoveSelected(_b:boolean);
protected
procedure MouseMove(Shift: TShiftState;x,y:integer);override;
procedure MouseDown(Button: TMouseButton;Shift: TShiftState;x,y:integer);override;
procedure MouseUp(Button: TMouseButton;Shift: TShiftState;x,y:integer);override;
public
procedure AddItemsss(_name,Path:string);
published
end;
implementation
procedure TLBPlayLlist.SetItemSelect(_Num:integer);
begin
if items.Objects[_Num]<>nil then
pPlayListitem(items.Objects[_Num]).Select:=true;
end;
procedure TLBPlayLlist.AddItemsss(_name,Path:string);
var PlayListItem : pPlayListItem;
begin
New(PlayListItem);
PlayListItem^.Filename:=_name;
PlayListItem^.Path:=Path;
PlayListItem^.Dura_m:=0;
PlayListItem^.Dura:="";
PlayListItem^.Track:=false;
PlayListItem^.Select:=false;
PlayListItem^.UnderAdd:=false;
PlayListItem^.Finded:=false;
items.AddObject(PlayListItem^.Filename, TObject(PlayListItem));
end;
procedure TLBPlayLlist.SetItemsUnSelect;
var i:integer;
begin
for i:=0 to items.Count-1 do
pPlayListitem(items.Objects[i]).Select:=false;
end;
procedure TLBPlayLlist.MoveSelected(_b:boolean);
var i: integer;
begin
if items.Count = 0 then exit;
if _b then begin
if not pPlayListItem(items.Objects[0])^.Select then
for i := 0 to items.Count - 1 do
if pPlayListItem(items.Objects[i])^.Select then items.Exchange(i - 1, i);
end
else begin
if not pPlayListItem(items.Objects[items.Count - 1])^.Select then
for i := items.Count - 1 downto 0 do
if pPlayListItem(items.Objects[i])^.Select then items.Exchange(i + 1, i);
end;
end;
procedure TLBPlayLlist.MouseDown( Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
if (Button = mbLeft) then IsMouseDown:=true;
SetItemSelect(itemindex);
inherited MouseDown(button,shift,x,y);
end;
procedure TLBPlayLlist.MouseMove(Shift: TShiftState; X,Y: Integer);
var row:integer;
begin
if IsMouseDown then begin
Row := itemindex;
if items.Count = 0 then exit;
if LastMovePos<>row then
for i := 1 to Abs(Row - LastMovePos) do
if (Row - LastMovePos) < 0 then MoveSelected(true) else MoveSelected(false);
end;
LastMovePos := Row;
end;
inherited MouseMove(Shift,x,y);
end;
procedure TLBPlayLlist.MouseUp( Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
if (IsMouseDown) then SetItemsUnSelect;
IsMouseDown:=false;
inherited MouseUp(Button,Shift, X, Y);
end;
end.
← →
Erik1 © (2005-08-31 11:08) [10]Возми готовый DbGridEh и немучайся, подключиш идуций с ним TMemoryDataSet и дело в шляпе.
← →
Shakal (2005-09-05 13:40) [11]Огромное спасибо за ответы, советы. Я всё же ещё буду пытаться совершенствовать, авось, получится.
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2005.09.25;
Скачать: [xml.tar.bz2];
Память: 0.48 MB
Время: 0.043 c