Форум: "Основная";
Текущий архив: 2002.12.09;
Скачать: [xml.tar.bz2];
ВнизВОПРОС ПО n-файлам Найти похожие ветки
← →
[BAD]Angel (2002-11-27 15:15) [0]Уважаемые мастера!
Пример:
Если в проводнике (Explorer) выделить n-ое кол-во mp3 файлов, шелкнуть правой кнопкой мыши выбрать соответствующий пункт, то они добавятся в WinAmp (PlayList)...
Как это реализовать в проекте?
← →
[BAD]Angel (2002-11-27 15:37) [1]мда... :-(((( видать не судьба мне узнать ответ на этот вопрос!
← →
Smithson (2002-11-27 15:42) [2]Ishell чего-то там не помню. Короче, смотри расширения оболочки и интерфейсы. Если эти термины незнакомы, то стоит поискать готовые компненты, но лично я сумневаюсь в их существовании.
← →
[BAD]Angel (2002-11-27 15:51) [3]Можно и без расширения оболочки!
В реестре прописываешь строку project1.exe "%1", после чего в проект поступает ParamStr(1) имя и путь к выделенному файлу... Но если файлов много, то запустится много копий проекта... Что и есть проблемой!!!
Так вот надо узнато когда придет последний файл... и выдать, например, сообщение.
← →
down (2002-11-27 15:55) [4]В Demos есть пример ShellExt, посмотри.
← →
[BAD]Angel (2002-11-27 16:01) [5]смотрел... не то!
Говорю же расширение оболочки мне не нужно......
← →
[BAD]Angel (2002-11-27 16:20) [6]идеи кончились? жалко! :-(
← →
[BAD]Angel (2002-11-28 13:27) [7]...
← →
_Nicola_ (2002-11-28 15:10) [8]В FAQе есть ответ на подобный вопрос. Надо обрабатывать в программе ParamStr(1). А от новых запусков принимать только строки запуска. Так вот, вся сложность в том, чтобы передать эту строку в проект. В ответе на этот вопрос это делается, через GlobalAddAtom и посылку сообщений. Мне тоже это надо, но что-нибудь попроще.
← →
[BAD]Angel (2002-11-29 12:47) [9]Это все я сдела... но я не могу отследить, когда придет последний файл... В этом-то и сложность.
← →
RV (2002-11-29 12:54) [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 13:01) [11]Про Drag"n"Drop я знаю. Но мне нужно именно через контекстное меню... Не обязательно конечно таким алгоритмом... можете предложить другой! :-)
← →
[BAD]Angel (2002-11-29 13:26) [12]ПОМОГИТЕЕЕеееее!!!! :(
← →
_Nicola_ (2002-11-29 14:27) [13]Блин, объясни четче, в чем проблема. Ты не знаешь как в контекстное меню пункт добавить?
← →
[BAD]Angel (2002-11-30 12:28) [14]_Nicola_: Я уже задолбался объяснять! :-)
Добавления пункта в конт. меню:
В реестре есть ключ: HKEY_CLASSES_ROOT\*\shell сюда добавляем следующее: \МОЙ ПРОЕКТ\command
command = "путь к проекту\имя проекта.exe "%l""
Все... пункт добавлен!
После чего выделяешь файлы, нажимаеш пункт меню и... ТУТ ПРОБЛЕМА
сколько выделено файлов, столько копий моего проекта запускается с параметром "%l", т.е. ParamStr(1) = путь и имя выделенного файла...
НУ ТАК ВОТ: КАК ОПРЕДЕЛИТЬ ЧТО ПРИШЕЛ ПОСЛЕДНИЙ ФАЙЛ ИЗ ВЫДЕЛЕННЫХ?????
← →
AlexT1000 (2002-11-30 13:08) [15]извини. мне просто интересно.
а в экзешник при таких раскладах приходит только одно имя файла?
т.е чуму равно ParamCount
мож это надо в DDE смотреть?!
← →
[BAD]Angel (2002-11-30 13:14) [16]в экзешник приходят два параметра
ParamStr(0)=путь и имя проекта
ParamStr(1)=путь и имя выделенного файла
а ParamCount соотв. равен 2.
← →
AlexT1000 (2002-11-30 13:42) [17]поставь блокировку на запуск твоего приложения.
т.е .чтобы запускалась только одна копия его. (код ищи в факах)
и ты будешь получать файл (можешь его записывать в какойто свой временой файл и посылать общее сообщение для системы типа ПЕРЕЧИТАТЬ ПЛАЙЛИСТ (создай его сам)) копия твоего приложения его получит и перечитает этот лист.
← →
[BAD]Angel (2002-11-30 14:21) [18]а поточнее можно... у меня еже мозги плавятся :-(
Я бы хотел конкретно на примере! (кодом)
← →
AlexT1000 (2002-11-30 16:36) [19]кодом нельзя. работы много.
типа
код в 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 и т.д и т.п
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2002.12.09;
Скачать: [xml.tar.bz2];
Память: 0.48 MB
Время: 0.01 c