|
#1
|
||||
|
||||
ListBox, PlayList
У меня несколько вопросов:
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. THE CRACKER IS OUT THERE |
#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; THE CRACKER IS OUT THERE Последний раз редактировалось 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; THE CRACKER IS OUT THERE |
#8
|
||||
|
||||
О.Г.Р.О.М.Н.О.Е. СПАСИБО !!!!!!!!!!!!
Кому я должен - всем прощаю!!!! |