Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > Мультимедиа
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 16.07.2007, 23:54
Аватар для <<D>>
<<D>> <<D>> вне форума
Активный
 
Регистрация: 06.05.2007
Адрес: ГДЕ ТО В СОЛНЕЧНОЙ СИСТЕМЕ
Сообщения: 207
Репутация: 15
По умолчанию 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  
Старый 17.07.2007, 12:27
AlexSku AlexSku вне форума
Специалист
 
Регистрация: 07.05.2007
Адрес: Москва
Сообщения: 884
Репутация: 21699
По умолчанию

Код:
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  
Старый 17.07.2007, 12:38
AlexSku AlexSku вне форума
Специалист
 
Регистрация: 07.05.2007
Адрес: Москва
Сообщения: 884
Репутация: 21699
По умолчанию

Как надо перемещать строки в ListBox'е - мышью (drag&drop) или выделить элемент и нажимать на стрелочки (напр., TUpDown)?
Ответить с цитированием
  #4  
Старый 18.07.2007, 00:12
Аватар для <<D>>
<<D>> <<D>> вне форума
Активный
 
Регистрация: 06.05.2007
Адрес: ГДЕ ТО В СОЛНЕЧНОЙ СИСТЕМЕ
Сообщения: 207
Репутация: 15
По умолчанию

Имеется ввиду Drag&Drop
__________________
Кому я должен - всем прощаю!!!!

Последний раз редактировалось <<D>>, 18.07.2007 в 00:47.
Ответить с цитированием
  #5  
Старый 18.07.2007, 03:40
Аватар для 4kusNick
4kusNick 4kusNick вне форума
Местный
 
Регистрация: 06.09.2006
Адрес: Россия, Санкт-Петербург
Сообщения: 444
Репутация: 550
По умолчанию

Изменение позиций элементов 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  
Старый 18.07.2007, 03:49
Аватар для 4kusNick
4kusNick 4kusNick вне форума
Местный
 
Регистрация: 06.09.2006
Адрес: Россия, Санкт-Петербург
Сообщения: 444
Репутация: 550
По умолчанию

Как принимать "перетаскиваемые" файлы.

При получении программой файлов, окну посылается сообщение 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  
Старый 18.07.2007, 04:09
Аватар для 4kusNick
4kusNick 4kusNick вне форума
Местный
 
Регистрация: 06.09.2006
Адрес: Россия, Санкт-Петербург
Сообщения: 444
Репутация: 550
По умолчанию

И ответ на последний вопрос:

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  
Старый 18.07.2007, 11:38
Аватар для <<D>>
<<D>> <<D>> вне форума
Активный
 
Регистрация: 06.05.2007
Адрес: ГДЕ ТО В СОЛНЕЧНОЙ СИСТЕМЕ
Сообщения: 207
Репутация: 15
По умолчанию

О.Г.Р.О.М.Н.О.Е. СПАСИБО !!!!!!!!!!!!
__________________
Кому я должен - всем прощаю!!!!
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 14:36.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter