Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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.007 c
14-28292
Snap
2002-11-19 18:58
2002.12.09
Импорть


1-28090
yuray76
2002-11-27 15:38
2002.12.09
Help


14-28237
stone
2002-11-18 09:36
2002.12.09
On-Line переводчик


1-27942
Xmen
2002-11-29 11:16
2002.12.09
Помогите справится с ListBox ом!


14-28261
herosofnn
2002-11-18 10:29
2002.12.09
Об этике !!!!





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский