Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2002.07.22;
Скачать: [xml.tar.bz2];

Вниз

Передать параметр первой копии программы   Найти похожие ветки 

 
tsarevep   (2002-07-10 02:41) [0]

Здравствуйте всем!
Ребят поможите, а то зациклился совсем.
Вообщем програма SDI интерфейс, с возможностью открытия нескольких документов. Повторный экземпляр программы недопстим и не должен быть нужен. Когда с програмной строки запускаю на открытие документ, то все прекрасно открывается, но если программа уже запущена, естественно ParamStr идёт для второй копии. И просто закрывается второй экземпляр.
Подскажите плиз как передать этот параметр первой копии программы.
С уважением.


 
tsarevep   (2002-07-10 10:10) [1]

Ну разве никто этим не занимался?
С уважением.


 
Fiend   (2002-07-10 10:13) [2]

я делал так:
при загрузке экземпляра искал окно предидущего инстанса. Затем посылал ему по хэндлу сообщение с параметрами. Если нада могу вырезать текст


 
tsarevep   (2002-07-10 10:49) [3]

Конечно б надо!
Спасибо заранее.


 
Fiend   (2002-07-10 10:57) [4]

const WM_MESSAGETOSERVER = WM_USER+1;

type
TMainForm = class(TForm)
private
{ Private declarations }
procedure MESSAGETOSERVER(var Message: TMessage); message WM_MESSAGETOSERVER;
public
{ Public declarations }
end;

procedure TMainForm.MESSAGETOSERVER(var Message: TMessage);
begin
//Это обработчик пользовательского события
case Message.WParam of
1 : pmShutDownServerClick(nil);
2 : pmStopServerClick(nil);
3 : StartServer;
end;
end;

А это функция которая ищет окно прдидущего инстанса, если находит возвращает его хэндл, если нет то 0

function FindHwnd: hWnd;
VAR Wnd : hWnd;
buff: ARRAY [0..127] OF Char;
begin
Result:=0;
Wnd := MainForm.Handle;
WHILE Wnd <> 0 DO
BEGIN
{


 
handra   (2002-07-10 11:09) [5]

Вот только параметры в виде строки с помощью SendMessage не передать, придется задуматься над использованием DDE.


 
tsarevep   (2002-07-10 12:56) [6]

Огромное спасибо!
Но поиск окна по Application.Title не подходит, так как он постоянно изменяется. Да и просто лежит компонента на форме которая не даёт второй запуск. Но у нее есть событие OnAlreadyExist в котором и можно передать ParamStr только не доходит как. Вот нужно как то засунуть в эту процедуру что то вроде.

if параметр then
не знаю чего
else
halt;// тоже не обязательно сама убьёт

Ну а DDE может и не плохо было бы только у меня 8 книжек и только в двух написано про то как связать свою прогу через DDE c Exсel, а зачем мне Excel. В остальных вобще этот протокол упущен.
C уважением.


 
I am   (2002-07-11 02:26) [7]

Я это делал через FileMapping. При запуске приложения оно проверяет наличие файла отображаемого в память. Если его нет значит оно его создает и пишет туда свой хэндл, а если есть, то считывает из него хэндл уже запущенного приложения и посылает ему свои параметры через WM_COPYDATA.

CreateFileMapping
MapViewOfFile


 
Юрий Зотов   (2002-07-11 02:32) [8]

Практически готовое решение (и даже не одно) см. здесь:
http://www.delphikingdom.com/helloworld/samples_win.htm


 
tsarevep   (2002-07-11 08:20) [9]

Приогромнейшее спасибо всем!
То Юрий Зотов © - Да не практически, а готовое, даже названия переменных с моими совпали и поэтому только {Copy - Paste).
Прогнал я ее по всем статьям. Единственная ошибка почему то если сделать Edit With MYPROGRAMM больше 34 файлов Windows говорит "Отказано в доступе указанному пути или файлу". Хотя редко у кого ума хватает сразу 35 файлов отправить в какую нибудь прогу, но все равно неприятно. Если вам не трудно напишите почему это происходит.
Особая вам благодарность.
С уважением.



Страницы: 1 вся ветка

Форум: "Основная";
Текущий архив: 2002.07.22;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.46 MB
Время: 0.005 c
14-70861
Teas
2002-06-23 20:11
2002.07.22
TForm


14-70886
LEgO-2
2002-06-12 22:17
2002.07.22
У кого нить имеется описание ф-ии CopyFileEx???


7-70941
Snake2000
2002-05-01 21:33
2002.07.22
Геймпад Sega Genesis и PC


1-70749
Turalyon
2002-07-09 14:08
2002.07.22
Делаем CGI приложение


3-70655
TVU
2002-07-01 16:33
2002.07.22
Как прекратить выполнение сохраненой процедуры в MSSQL 7.0





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский