![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Форма "сворачивается". [D7, XP]
AlexanderMS © (2006-07-11 18:33:00)Программа использует DLL, где хранится форма. Когда я даю команду показать эту форму как модальное окно, оно отображается как надо, поверх главного. Но на этой форме есть OpenDialog, и если его открыть, а затем закрыть, то главная форма скрывается из виду, сворачиваясь на панель задач. Скажите, пожалуйста, как сделать так, чтоб она не сворачивалась?
AlexanderMS (2006-07-12 16:53:00) [1]Большое спасибо!
Desdechado (2006-07-12 11:25:00) [2]Yegorchic © (12.07.06 09:34) [6]
Ну, у тебя форма не модальная.
Но направление верное.
function doTransform( App: HWND ): CARDINAL; stdcall;
var
hOldHandle: HWND;
begin
hOldHandle := Application.Handle;
Application.Handle := App;
result := ProcessData();
Application.Handle := hOldHandle;
end;
Это в DLL. ProcessData - это твоя функция создания, показа модально и равершения работы с формой в DLL.
Yegorchic (2006-07-12 09:36:00) [3]У меня там форма и закрывалась нормально и всё было хорошо...
Yegorchic (2006-07-12 09:34:00) [4]Кажется, надо в DLL'ке написать процедурку специальную:
procedure FreeForm;
begin
Form1.Free;
end;
Ну и в exports. А потом, когда форму надо уничтожить надо вызывать эту процедуру.
Вот пример загрузки и удаления формы (не моё, работает всё точно):
library Form;
uses
Classes,
Unit1 in 'Unit1.pas' {Form1};
exports
CreateMyForm,
DestroyMyForm;
end.
Это его Unit1:
unit Unit1;
interface
// раздел uses и определение класса Form1
procedure CreateMyForm(AppHandle: THandle); stdcall;
procedure DestroyMyForm; stdcall;
implementation
{$R *.DFM}
procedure CreateMyForm(AppHandle: THandle);
begin
Application.Handle := AppHandle;
Form1 := TForm1.Create(Application);
Form1.Show
end;
procedure DestroyMyForm;
begin
Form1.Free;
end;
end.
Это UnitCall вызывающего EXE-шника:
unit
UnitCall;
interface
// раздел uses и определение класса Form1
procedure CreateMyForm(AppHandle: THandle); stdcall; external 'Form.dll';
procedure DestroyMyForm; stdcall; external 'Form.dll';
implementation
{$R *.DFM}
procedure TForm1.Button1Click(Sender: TObject);
begin
CreateMyForm(Application.Handle);
end;
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
DestroyMyForm;
end;
end.
AlexanderMS (2006-07-12 08:11:00) [5]
> После openDialog.execute form.show - развернёться назад.
Как же я из DLL могу показать форму, которая не в DLL?
> Ну, и добавь к ней в проект и эту - модальную.
У меня она должна быть в DLL. Просто эта DLL как плагин к моей программе используется, а там формы внутри DLL лучше ставить.
tesseract (2006-07-11 20:21:00) [6]После openDialog.execute form.show - развернёться назад.
Leonid Troyanovsky (2006-07-11 19:07:00) [7]
> AlexanderMS © (11.07.06 19:00) [2]
> Она = главная форма.
Ну, и добавь к ней в проект и эту - модальную.
--
Regards, LVT.
AlexanderMS (2006-07-11 19:00:00) [8]
> Переместить оную форму в exe.
Не так сказал:
> Скажите, пожалуйста, как сделать так, чтоб она не сворачивалась?
Она = главная форма.
Leonid Troyanovsky (2006-07-11 18:41:00) [9]
> AlexanderMS © (11.07.06 18:33)
> из виду, сворачиваясь на панель задач. Скажите, пожалуйста,
> как сделать так, чтоб она не сворачивалась?
Переместить оную форму в exe.
--
Regards, LVT.