![]() |
|
|
|
|
#1
|
||||
|
||||
|
У меня несколько вопросов:
1) Как удалить несколько строк с одного ListBox'a,если они выделенные в другом ListBox'e? {Пример} Я пробовал вот так: var i:integer; Begin for i:=0 to pl1.count do begin if pl1.selected[i] then pl2.Items.Delete(i); end; end; //Но удаляет только несколько, а остальные не хочт. 2) Как переместить строки в ListBox'e. 3) Как можно перетаскивать файлы в Playlist? Кто знает ПОМОГИТЕ. 4) Как привязать определенные типы файлов к своей программе, например mp3, wav. |
|
#2
|
|||
|
|||
|
Код:
var i:integer;
begin
for i:=pl1.count-1 downto 0 do
begin
if pl1.selected[i] then pl2.Items.Delete(i);
end;
end;Последний раз редактировалось AlexSku, 17.07.2007 в 12:32. |
|
#3
|
|||
|
|||
|
Как надо перемещать строки в ListBox'е - мышью (drag&drop) или выделить элемент и нажимать на стрелочки (напр., TUpDown)?
|
|
#4
|
||||
|
||||
|
Имеется ввиду Drag&Drop
Последний раз редактировалось <<D>>, 18.07.2007 в 00:47. |
|
#5
|
||||
|
||||
|
Изменение позиций элементов ListBox с помощью Drag and Drop
Код:
procedure TForm1.ListBox1DragDrop(Sender, Source: TObject; X, Y: Integer);
begin
with (Sender as TListBox) do
Items.Move(ItemIndex,ItemAtPos(Point(x,y),True));
end;
procedure TForm1.ListBox1DragOver(Sender, Source: TObject; X, Y: Integer;
State: TDragState; var Accept: Boolean);
begin
Accept := (Sender=Source);
end;
Не забудьте в ListBox присвоить свойству DragMode значение dmAutomatic. |
|
#6
|
||||
|
||||
|
Как принимать "перетаскиваемые" файлы.
При получении программой файлов, окну посылается сообщение WM_DROPFILES. При помощи функции DragQueryFile можно определить количество и имена файлов. При помощи функции DragQueryPoint можно определить координату мыши в тот момент, когда пользователь "отпустил" файлы. Эта программа открывает все "перетащенные" в нее файлы. Причем, если пользователь перетащил файлы в PageControl1, то в PageControl1 эти файлы и откроются. Код:
...
public
procedure WMDropFiles(var Msg: TWMDropFiles); message WM_DROPFILES;
end;
var
Form1: TForm1;
implementation
{$R *.DFM}
uses ShellAPI, stdctrls;
procedure TForm1.WMDropFiles(var Msg: TWMDropFiles);
var
HF: THandle;
s: array [0..1023] of char;
i, FileCount: integer;
p: TPoint;
ts: TTabSheet;
memo: TMemo;
begin
HF := Msg.Drop;
FileCount := DragQueryFile(HF, $FFFFFFFF, nil, 0);
for i := 0 to FileCount - 1 do
begin
DragQueryFile(HF, i, s, sizeof(s));
ts := TTabSheet.Create(nil);
DragQueryPoint(HF, p);
if PtInRect(PageControl1.BoundsRect, p) then
ts.PageControl := PageControl1
else
ts.PageControl := PageControl2;
ts.Caption := ExtractFileName(s);
memo := TMemo.Create(nil);
memo.Parent := ts;
memo.Align := alClient;
memo.Lines.LoadFromFile(s);
end;
DragFinish(HF);
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
PageControl1.Align := alLeft;
PageControl2.Align := alClient;
DragAcceptFiles(Form1.Handle, true);
end;
procedure TForm1.FormDestroy(Sender: TObject);
begin
DragAcceptFiles(Form1.Handle, false);
end;В догонку: Подключаем модуль ShellAPI в области uses По созданию окна [событие OnCreate] пишем такой код: Код:
DragAcceptFiles(Handle, true); Когда вы перетаскиваете файл на своё приложение и отпускаете кнопку мыши, Windows посылает этому окну сообщение wm_DropFiles. Сообщение сопровождается именем файла. Обработчик этого сообщения нужно включить в раздел protected класса формы. Вставьте следующий код: Код:
protected procedure WMDropFiles (var Msg: TMessage); message wm_DropFiles; Код:
procedure TForm1.WMDropFiles(var Msg: TMessage); var FileName: array[0..256] of char; begin DragQueryFile(THandle(Msg.WParam), 0, FileName, SizeOf(Filename)); Memo1.Lines.LoadFromFile(FileName); DragFinish(THandle(Msg.WParam)); end; или так: Код:
procedure TForm1.WMDROPFILES(var Msg: TMessage);
var
i, amount, size: integer;
Filename: PChar;
begin
inherited;
Amount := DragQueryFile(Msg.WParam, $FFFFFFFF, Filename, 255);
for i := 0 to (Amount - 1) do
begin
size := DragQueryFile(Msg.WParam, i, nil, 0) + 1;
Filename := StrAlloc(size);
DragQueryFile(Msg.WParam, i, Filename, size);
listbox1.items.add(StrPas(Filename));
StrDispose(Filename);
end;
DragFinish(Msg.WParam);
end;Последний раз редактировалось 4kusNick, 18.07.2007 в 03:52. |
|
#7
|
||||
|
||||
|
И ответ на последний вопрос:
1. Добавление пункта в меню проводника. Код:
uses Registry;
...
var
Reg: Tregistry;
begin
// добавление пункта в меню проводника
Reg := TRegistry.Create;
try
Reg.RootKey := HKEY_CLASSES_ROOT;
// в след. строке можно вместо * указать какой-нибудь определенный тип
if Reg.OpenKey('\*\shell\Моя прога\command', True) then
begin
Reg.WriteString('','"' + ParamStr(0) + '" "%1"');
Reg.CloseKey;
end;
finally
Reg.Free;
end;
// отмена
Reg := TRegistry.Create;
try
Reg.RootKey := HKEY_CLASSES_ROOT;
Reg.DeleteKey('\*\shell\Моя прога\');
finally
Reg.Free;
end;
end;2. Зарегистрировать свое разрешение. Код:
uses Registry;
{©Drkb v.3(2007): www.drkb.ru, ®Vit (Vitaly Nevzorov) - nevzorov@yahoo.com}
procedure RegisterFileType(FileType,FileTypeName, Description,ExecCommand:string);
begin
if (FileType='') or (FileTypeName='') or (ExecCommand='') then exit;
if FileType[1]<>'.' then FileType:='.'+FileType;
if Description='' then Description:=FileTypeName;
with Treginifile.create do
try
rootkey := hkey_classes_root;
writestring(FileType,'',FileTypeName);
writestring(FileTypeName,'',Description);
writestring(FileTypeName+'\shell\open\command','',ExecCommand+' "%1"');
finally
free;
end;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
RegisterFileType('txt','TxtFile', 'Plain text','notepad.exe');
end;Еще один пример: Сначала, естественно, объявляем в uses модуль Registry. Код:
uses Registry; Код:
public
{ Public declarations }
procedure RegisterFileType(ext: string; FileName: string);Код:
procedure TForm1.RegisterFileType(ext: string; FileName: string);
var
reg: TRegistry;
begin
reg:=TRegistry.Create;
with reg do
begin
RootKey:=HKEY_CLASSES_ROOT;
OpenKey('.'+ext,True);
WriteString('',ext+'file');
CloseKey;
CreateKey(ext+'file');
OpenKey(ext+'file\DefaultIcon',True);
WriteString('',FileName+',0');
CloseKey;
OpenKey(ext+'file\shell\open\command',True);
WriteString('',FileName+' "%1"');
CloseKey;
Free;
end;
end;Ну а по нажатию какого-нибудь батона регистрируем! Код:
procedure TForm1.Button1Click(Sender: TObject);
begin
RegisterFileType('DelphiWorld', Application.ExeName);
end; |