Этот плагин показывает, как загрузить форму и поместить ее в панель, подобной Outlook'у. Если в своих приложениях вы используете плагины, то вам необходимо использовать Nuca Plugin Framework. С исходными текстами
Источник: www.delphipages.com
Автор: Alexnaldo Santoshttp://www.geocities.com/nucainterface -= · VCL · Samples · =- [Перевел: Сергей Зинин]
Расширение к Indy (версия 8 и 9) для Borland Delphi 5, 6 и 7. IdISAPIRunner компонент позволяет выполнять ISAPI модули, использующие Indy TidHTTPServer. TidCGIRunner компонент позволяет выполнять CGI-скрипты, используя idHTTPServer. TidISAPIRunner2 компонент Кена Вилкокса подобен TidISAPIRunner компоненту с небольшими отличиями: 1 - Все ISAPI расширения загружаются единовременно 2 - Они остаются загруженными до тех пор, пока компонент не будет разрушен 3 - Добавлен метод unload, позволяющий выгрузить ISAPI без выгрузки сервера. Для работы требуется Indy. С исходными текстами
Как определить работает ли уже данное приложение или это первая его копия?
Для Delphi 1. Каждый экземпляр программы имеет ссылку на свою предыдущую копию - hPrevInst: hWnd. Ее можно проверить перед созданием приложения и при необходимости отреагировать соответствующим образом. Если запущена только одна копия, то эта ссылка равна нулю. Пример:
procedure TForm1.FormCreate(Sender: TObject); begin {Проверяем есть ли указатель на предыдущую копию приложения} IF hPrevInst <> 0 THENBEGIN {Если есть, то выдаем сообщение и выходим} MessageDlg('Программа уже запущена!', mtError, [mbOk], 0); Halt; END; {Иначе - ничего не делаем (не мешаем созданию формы)} end;
P.S. Для выхода необходимо использовать Halt, а не Close, как хотелось бы, так как форма еще не создана
и закрывать нечего. Есть и другой способ - по списку загруженных приложений
procedure TForm1.FormCreate(Sender: TObject); VAR Wnd : hWnd; buff : ARRAY[0.. 127] OF Char; Begin Wnd := GetWindow(Handle, gw_HWndFirst); WHILE Wnd <> 0 DOBEGIN IF (Wnd <> Application.Handle) AND (GetWindow(Wnd, gw_Owner) = 0) THENBEGIN GetWindowText (Wnd, buff, sizeof (buff )); IF StrPas (buff) = Application.Title THEN BEGIN MessageDlg('Приложение уже загружено', mtWarning, [mbOk], 0); Halt; END; END; Wnd := GetWindow (Wnd, gw_hWndNext); END; End;
Еще один интересный способ для Win32. Дело в том, что можно в памяти создавать временные
файлы. При перезагрузке они теряются, а так существуют. Кстати, этот метод можно и!
спользовать и для обмена информацией между вашими приложениями.
Пример:
program Project1; uses Windows, // Обязательно Forms, Unit1 in 'Unit1.pas' {Form1};
{$R *.RES} Const MemFileSize = 1024; MemFileName = 'one_inst_demo_memfile'; Var MemHnd : HWND; begin { Попытаемся создать файл в памяти } MemHnd := CreateFileMapping(HWND($FFFFFFFF), nil, PAGE_READWRITE, 0,
MemFileSize, &n!
bsp; MemFileName); { Если файл не существовал запускаем приложение } if GetLastError<>ERROR_ALREADY_EXISTS then begin Application.Initialize; Application.CreateForm(TForm1, Form1); Application.Run; end; CloseHandle(MemHnd); end.
Часто при работе у пользователя может быть открыто 5-20 окон и сообщение о том, что программа уже запущено приводит к тому, что он вынужден полчаса искать ранее запущенную копию. Выход из положения - найдя копию программы активировать ее, для чего в последнем примере перед HALT необходимо добавить строку : SetForegroundWindow(Wnd); Например так:
program Project0; uses Windows,
// !!! Forms, Unit0 in 'Unit0.pas' {Form1};!
var Handle1 : LongInt; Handle2 : LongInt;
{$R *.RES}
begin Application.Initialize; Handle1 := FindWindow('TForm1',nil); if handle1 = 0 then begin Application.CreateForm(TForm1, Form1); Application.Run; end else begin Handle2 := GetWindow(Handle1,GW_OWNER); //Чтоб заметили :) ShowWindow(Handle2,SW_HIDE); ShowWindow(Handle2,SW_RESTORE); SetForegroundWindow(Handle1); // Активизируем end; end.
Комментарий от "Vladimir" (damageinc@e-mail.ru) Лучше
всего использовать именованные мутексы. Главное, пр!
идумать уникальное имя для этого мутекса. Вот пример вполне работоспособной программы:
program My1; uses Forms, Windows, Dialogs, SysUtils,
var g_hAppMutex: THandle; Wnd : hWnd; buff: array [0..127] of Char; s:string; i:integer;
function OneInstance: boolean;
begin g_hAppMutex:=CreateMutex(nil,false,PChar('AnUniqueString'+IntToStr(GetDesktopWindow))); Result:=(WaitForSingleObject(g_hAppMutex,0)<>WAIT_TIMEOUT); end;
begin Application.Initialize; Application.Title := 'SmartDecoder'; Application.HelpFile := 'Decoder.hlp'; //создаём инстанс, если его ещё нету на текущем рабочем столе g_hAppMutex:=0; if OneInstance then begin
Application.CreateForm(TMainFrm, MainFrm); Application.R!
un; end; if LongBool(g_hAppMutex) then //если уже есть begin ReleaseMutex(g_hAppMutex); CloseHandle(g_hAppMutex); if ParamStr(1)='' then ShowMessage('Программа уже запущена на этом рабочем столе. Нажмите кнопку "OK" для передачи управления уже запущенной копии программы.'); Wnd:=GetWindow(GetTopWindow(0),gw_HWndFirst); while Wnd<>0 do begin //Если не собственное и не дочернее окно if (Wnd<>Application.Handle)and(GetWindow(Wnd,gw_Owner)=0) then begin
GetWindowText(Wnd,buff,sizeof(buff!
)); if Copy(StrPas(buff),1,12)='SmartDecoder' then if Wnd=GetWindowLong(Wnd,GWL_USERDATA) then begin ShowWindow(Wnd,SW_ShowNormal); SetForegroundWindow(Wnd); i:=1; while ParamStr(i)<>'' do begin s:=ParamStr(i);
PostMessage(Wnd,WM_OPEN_FILE,GlobalAddAtom(PChar(s)),0); &!
nbsp; inc(i); end; Application.Terminate; Exit; end; end; Wnd:=GetWindow(Wnd,gw_hWndNext); end; end; end.
Если программа уже запущена, управление будет передано существующей копии.
Пмогите с сортировкой.
Допустим так имеется две таблицы во второй Lookup поле выбирающее значение из первой, как сделать сортировку по этому ...
QuickReport=>>>Excel или .Txt
Как мне сохрангить отчет в нормальном формате.... который ДАЖЕ бухгалтер прочитать сможет????
Как поменять скорость COM порта?
Помогите пожалуйста разобраться. Все делаю по описанию в статьях и помощи: открываю устройство CreateFile(ComHandle ...
Невизуальные классы в Delphi
В этом обзоре мне хотелось бы осветить несколько классов Delphi, которым обычно в книгах и других обучающих материалах уделяется (если уделяется) весьма скромное внимание. Это так называемые невизуальные классы, не порожденные непосредственно от TComponent и не имеющие владельца. Следовательно, начинающий разработчик в палитре компонентов их не видит, в книжках о них не пишут, а help’ы ему читать неохота или он просто не знает английского...
Shareware : профессиональная разработка и продвижение программ
Рассматриваются особенности создания условно-бесплатных программ, приводятся рекомендации по разработке интерфейса и оформлению документации, обсуждаются теоретические и практические вопросы проектирования, рекламы, маркетинга и технической поддержки создаваемого программного продукта. Книга содержит примеры удачной разработки и реализации программ из мировой и российской практики. Множество иллюстраций дает возможность более наглядно представить объем и качество работы, необходимой для создания программ на профессиональном уровне.
Автор: Жарков С.
AnSo Delphi page Регулярные выражения (regular expressions) для дельфи с полными и бесплатными исходниками. На сайте есть описание (на русском), примеры (в т.ч. как извлекать информацию из html-страниц). Работа ...
» Оценка сайта: 2
Дорогие друзья! Мы рады представить вам новый совместный проект сайтов www.rsdn.ru, delphi.mastak.ru и www.optim.ru - профессиональный журнал для программистов RSDN Magazine.
Несомненно, ваше мнение о необходимости такого журнала, содержании рубрик и темах отдельных статей поможет сделать журнал более полезным и интересным. Высказать свое мнение, проголосовать или же подписаться вы можете на сайте. Без вашего участия, нам будет трудно сделать правильный журнал!
На сайте выложен анонс пилотного выпуска журнала, вступительное слово от редакции.
Для души
Хокку дня
На голой ветке Ворон сидит одиноко. Осенний вечер.
Афоризмы
Степенная осанка придает важный вид дуракам... (Буаст)
Фраза дня
Что может сделать женщина из ничего? Прическу, салатик и трагедию.
Дурацкие законы (информация предоставлена сайтом kurilka.com)
В Монтане (США) нельзя показывать фильмы со сценами преступлений. (Что же они смотрят?)
В Небраске (США) владельцам баров можно продавать пиво, только если в баре варится для посетителей суп.
И на закуску коротенький анекдот
Телефонный звонок. Мужчина снимает трубку. На том конце провода: - Алло! Это ты, любимый? - Я. А кто говорит?