Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

ВОПРОС ПО n-файлам [D5, WinME]


[BAD]Angel ©   (2002-11-27 15:15:00) 

Уважаемые мастера!
Пример:
Если в проводнике (Explorer) выделить n-ое кол-во mp3 файлов, шелкнуть правой кнопкой мыши выбрать соответствующий пункт, то они добавятся в WinAmp (PlayList)...

Как это реализовать в проекте?


AlexT1000   (2002-11-30 16:36:00) [1]

кодом нельзя. работы много.

типа

код в DPR

AddToMyTempFile(ParamStr(1));

if isMyAppRun then begin
Handle := FindMyWindowHandle;
SendMessage(Handle,MyMessage,0,0);
Exit;
end;

isMyAppRun - функция определения того загружена уже твоя прога или нет

FindMyWindowHandle - функция поиска окна в виндах
см. FindWindow
на получение этого сообщения нужно поставить обработчик

procedure MyMess(Var Message :TMessage); message MYMESSAGE;


procedure MyMess(Var Message :TMessage);
begin
ReadListFromMyTempFile;
end;

см. RegisterWindowMessage и т.д и т.п


[BAD]Angel   (2002-11-30 14:21:00) [2]

а поточнее можно... у меня еже мозги плавятся :-(
Я бы хотел конкретно на примере! (кодом)


AlexT1000   (2002-11-30 13:42:00) [3]

поставь блокировку на запуск твоего приложения.
т.е .чтобы запускалась только одна копия его. (код ищи в факах)

и ты будешь получать файл (можешь его записывать в какойто свой временой файл и посылать общее сообщение для системы типа ПЕРЕЧИТАТЬ ПЛАЙЛИСТ (создай его сам)) копия твоего приложения его получит и перечитает этот лист.


[BAD]Angel   (2002-11-30 13:14:00) [4]

в экзешник приходят два параметра

ParamStr(0)=путь и имя проекта
ParamStr(1)=путь и имя выделенного файла

а ParamCount соотв. равен 2.


AlexT1000   (2002-11-30 13:08:00) [5]

извини. мне просто интересно.

а в экзешник при таких раскладах приходит только одно имя файла?

т.е чуму равно ParamCount

мож это надо в DDE смотреть?!


[BAD]Angel   (2002-11-30 12:28:00) [6]

_Nicola_: Я уже задолбался объяснять! :-)

Добавления пункта в конт. меню:
В реестре есть ключ: HKEY_CLASSES_ROOT\*\shell сюда добавляем следующее: \МОЙ ПРОЕКТ\command

command = "путь к проекту\имя проекта.exe "%l""

Все... пункт добавлен!

После чего выделяешь файлы, нажимаеш пункт меню и... ТУТ ПРОБЛЕМА
сколько выделено файлов, столько копий моего проекта запускается с параметром "%l", т.е. ParamStr(1) = путь и имя выделенного файла...

НУ ТАК ВОТ: КАК ОПРЕДЕЛИТЬ ЧТО ПРИШЕЛ ПОСЛЕДНИЙ ФАЙЛ ИЗ ВЫДЕЛЕННЫХ?????


_Nicola_   (2002-11-29 14:27:00) [7]

Блин, объясни четче, в чем проблема. Ты не знаешь как в контекстное меню пункт добавить?


[BAD]Angel   (2002-11-29 13:26:00) [8]

ПОМОГИТЕЕЕеееее!!!! :(


[BAD]Angel   (2002-11-29 13:01:00) [9]

Про Drag"n"Drop я знаю. Но мне нужно именно через контекстное меню... Не обязательно конечно таким алгоритмом... можете предложить другой! :-)


RV   (2002-11-29 12:54:00) [10]

из раслылки этого сайта

{ На эту форму можно бросить файл (например из проводника) и
он будет открыт }unit Unit1;interfaceuses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,StdCtrls, ShellAPI {обязательно!};type TForm1 = class(TForm) Memo1: TMemo; FileNameLabel: TLabel; procedure FormCreate(Sender: TObject); procedure FormDestroy(Sender: TObject); protected {Это и есть самая главная процедура} procedure WMDropFiles(var Msg: TMessage); message wm_DropFiles; end;var Form1: TForm1;implementation{$R *.DFM}procedure TForm1.WMDropFiles(var Msg: TMessage);var Filename: array[0 .. 256] of Char; Count : integer;begin { Получаем количество файлов (просто пример) } nCount := DragQueryFile( msg.WParam, $FFFFFFFF, acFileName, cnMaxFileNameLen); { Получаем имя первого файла } DragQueryFile( THandle(Msg.WParam), 0, { это номер файла } Filename,SizeOf(Filename) ) ; { Открываем его } with FileNameLabel do begin Caption := LowerCase(StrPas(FileName)); Memo1.Lines.LoadfromFile(Caption); end; { Отдаем сообщение о завершении процесса } DragFinish(THandle(Msg.WParam));end;procedure TForm1.FormCreate(Sender: TObject);begin { Говорим Windows, что на нас можно бросать файлы } DragAcceptFiles(Handle, True); end;procedure TForm1.FormDestroy(Sender: TObject);begin { Закрываем за собой дверь золотым ключиком} DragAcceptFiles(Handle, False); end;end.


[BAD]Angel   (2002-11-29 12:47:00) [11]

Это все я сдела... но я не могу отследить, когда придет последний файл... В этом-то и сложность.


_Nicola_   (2002-11-28 15:10:00) [12]

В FAQе есть ответ на подобный вопрос. Надо обрабатывать в программе ParamStr(1). А от новых запусков принимать только строки запуска. Так вот, вся сложность в том, чтобы передать эту строку в проект. В ответе на этот вопрос это делается, через GlobalAddAtom и посылку сообщений. Мне тоже это надо, но что-нибудь попроще.


[BAD]Angel   (2002-11-28 13:27:00) [13]

...


[BAD]Angel   (2002-11-27 16:20:00) [14]

идеи кончились? жалко! :-(


[BAD]Angel   (2002-11-27 16:01:00) [15]

смотрел... не то!
Говорю же расширение оболочки мне не нужно......


down   (2002-11-27 15:55:00) [16]

В Demos есть пример ShellExt, посмотри.


[BAD]Angel   (2002-11-27 15:51:00) [17]

Можно и без расширения оболочки!
В реестре прописываешь строку project1.exe "%1", после чего в проект поступает ParamStr(1) имя и путь к выделенному файлу... Но если файлов много, то запустится много копий проекта... Что и есть проблемой!!!

Так вот надо узнато когда придет последний файл... и выдать, например, сообщение.


Smithson   (2002-11-27 15:42:00) [18]

Ishell чего-то там не помню. Короче, смотри расширения оболочки и интерфейсы. Если эти термины незнакомы, то стоит поискать готовые компненты, но лично я сумневаюсь в их существовании.


[BAD]Angel   (2002-11-27 15:37:00) [19]

мда... :-(((( видать не судьба мне узнать ответ на этот вопрос!


Наверх

Титульная страница Поиск, карта сайта Написать письмо