![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
лаги с paramcount [D7, XP]
vasja123 © (2011-05-18 18:53:00)Привет мастерам!! помогите с лагом! пытаюсь открыть несколько файлов своей прогой.
procedure TForm1.FormCreate(Sender: TObject);
var i:integer;
begin
for i:=1 to paramcount do
begin
ShowMessage(Paramstr(i));
...
end;
end;
сколько я бы не открывал файлов своей прогой paramstr все равно возвращает 1. не подскажете ккакой нибудь способ чтобы можно было в цикле прогнать от 1 до кол-ва открытых файлов. заранее спасибо
vasja123 (2011-05-22 18:52:00) [1]
Virgo_Style © (22.05.11 10:28) [29]
точно))
> Юрий Зотов © (22.05.11 11:05) [30]
Полезная ссылка. Спасибо мастера очень помогли)))
Юрий Зотов (2011-05-22 11:05:00) [2]http://www.delphikingdom.com/asp/viewitem.asp?catalogid=904
Virgo_Style (2011-05-22 10:28:00) [3]
> как получатель будет знать что ему будут передавать n отправителей
А какая получателю разница?
Германн (2011-05-22 03:14:00) [4]
> кароче я сделаю так:
>
Троешеник - он всегда троешник.
vasja123 (2011-05-22 02:54:00) [5]кароче я сделаю так:
Как передать строку другому приложению?
получатель:
procedure ReceiveMessage (var Msg: TMessage); message WM_COPYDATA;
..
procedure TFormReceive.ReceiveMessage;
var
pcd : PCopyDataStruct;
begin
pcd := PCopyDataStruct(Msg.LParam);
Caption := PChar(pcd.lpData);
end;
отправитель:
procedure TFormXXX.Button1Click(Sender: TObject);
var
cd : TCopyDataStruct;
begin
cd.cbData := Length(Edit1.Text)+1;
cd.lpData := PChar(Edit1.Text);
SendMessage ( FindWindow('TFormReceive', nil),
WM_COPYDATA,
0,
LParam(@cd));
end;
только вот не понятно как получатель будет знать что ему будут передавать n отправителей((( QAZ твое кунг-фу наверно самое мощьное но я пока еще новичок
QAZ (2011-05-19 11:38:00) [6]
> DiamondShark © (19.05.11 11:30) [25]
аяяй какую неправду глаголиш
ты тоже не постиг дзена ;)
DiamondShark (2011-05-19 11:30:00) [7]
> vasja123 (18.05.11 21:46) [23]
Ты русская языка мама не училь?
Для нескольких выделенных файлов проводник и по "Ентеру" и по контекстному меню "Открыть" запускает по одной копии приложения, передавая по одному имени в командной строке.
Тебе надо, используя какой-либо приём определения запуска нескольких копий твоего приложения (см. гугл), определить факт запуска нескольких копий и найти копию процесса, запущенную первой, потом, используя какие-либо приёмы межпроцессного взаимодействия (см. гугл), передать параметры из повторно запущенных копий в первую запущенную копию.
QAZ (2011-05-19 10:58:00) [8]
> можешь поподробнее
это очень сильное кунг-фу и чтобы постичь его, ты должен сам пройти путь воина, я лишь могу указать путь...
истина в том ,что, например дельфи может открыть любое кол-во .pas файлов без создания доп. процессов и прочей туфты
vasja123 (2011-05-18 21:46:00) [9]QAZ можешь поподробнее
vasja123 (2011-05-18 21:46:00) [10]QAZ можешь поподробнее
QAZ (2011-05-18 21:38:00) [11]
> Эксплореру пофигу на твои желания, он запускает, как и было
> сказано, по экземпляру программы на каждый файл.
> Это задача программы, при запуске, найти уже запущенный
> её экземпляр и передать ему имя файла, а самой закрыться.
> Ну и соответственно программа должна уметь принимать имена
> файлов из вне.
аяяй какую неправду глаголиш
данная фишка доступна наверно с win3.1
vasja123 (2011-05-18 20:58:00) [12]странно у мя и блокнот 1 раз запускается
Andy BitOff (2011-05-18 20:52:00) [13]Не надо заниматься глупостями
http://tinyurl.com/6zqyxa9
Плохиш (2011-05-18 20:50:00) [14]
> vasja123 (18.05.11 20:35) [14]
>
> доказательства такие: если прогу просто так запускать несколько
> раз то она будет открываться, а если выделить несколько
> файлов и открыть через эту прогу то она откроется только
> 1 раз
>
Ошибка в программе. Нотепад и графический редактор открываются положенное число раз.
vasja123 (2011-05-18 20:49:00) [15]только тут непонятно что писать вместо Хендел проводникаи Индекс элемента в проводнике
подскажите плиз
vasja123 (2011-05-18 20:47:00) [16]а что если правда попробывать узнать какие файлы были выделены в той папке где открыт первый файл. но как это сделать. должна же быть функция. только вот я не могу ее нигде найти в гугле и тп
я кое что нашел может это поможет
if not(SendMessage(Хендел проводника, LVM_GETITEMSTATE, Индекс элемента в проводнике, LVIS_SELECTED) = 0) then
//Элемент выделен
Andy BitOff (2011-05-18 20:43:00) [17]> vasja123 (18.05.11 20:35) [14]
> доказательства такие: если прогу просто так запускать несколько
> раз то она будет открываться, а если выделить несколько
> файлов и открыть через эту прогу то она откроется только
> 1 раз
Не верю, ибо у меня открывает как и положено по копии на каждый переданный файл.
> это не удобно. представь чтобы в винампе такое было.
А мне-то... Удобно, не удобно...
vasja123 (2011-05-18 20:35:00) [18]доказательства такие: если прогу просто так запускать несколько раз то она будет открываться, а если выделить несколько файлов и открыть через эту прогу то она откроется только 1 раз
>Andy BitOff
> Помести ярлык своей программы в папку SendTo. Выбери в проводнике
> несколько файлов и по РМБ через меню Отправить - (ярлык
> твоей программы). Тогда получишь список всех выбранных файлов
> через строку параметров. Но тут тоже тонкость, файлов не
> должно быть много, точнее не файлов, ограничение длины ком.
> строки.
это не удобно. представь чтобы в винампе такое было.
Andy BitOff (2011-05-18 20:19:00) [19]> vasja123 (18.05.11 20:11) [10]
> дело в том что прога все равно запускается только 1 раз(((
Если приведенный код и есть вся программа, то это утверждение не может быть верным.
Andy BitOff (2011-05-18 20:17:00) [20]> vasja123 (18.05.11 20:11) [10]
Помести ярлык своей программы в папку SendTo. Выбери в проводнике несколько файлов и по РМБ через меню Отправить - (ярлык твоей программы). Тогда получишь список всех выбранных файлов через строку параметров. Но тут тоже тонкость, файлов не должно быть много, точнее не файлов, ограничение длины ком.строки.