Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 23.02.2008, 00:02   #1
SunKnight
Участник клуба Подтвердите свой е-майл
 
Аватар для SunKnight
 
Регистрация: 14.12.2007
Сообщений: 1,434
Вопрос Проблема оформления

Делаю свой курсачь, создание БД. Но вначале разработки столкнулся с проблемой удобного интерфейса.

У меня в проекте есть главная форма MAIN , а формы с таблицами и запросами находятся в ДЛЛ.
Как сделать так чтобы при вызове формы из ДЛЛ, главная форма удочеряла вызванную форму, т.е. принцип как у MDI проекта, только вызывается один экземпляр формы, а не множество.
Проповедую design patterns, верую в MVC, доверяю eXtrime programming.
SunKnight вне форума Ответить с цитированием
Старый 24.02.2008, 02:28   #2
Баламут
Баламучу слегка...
Участник клуба
 
Аватар для Баламут
 
Регистрация: 01.11.2006
Сообщений: 1,585
По умолчанию

Тут вся фишка в том, что нужно объяснить форме в dll, кому она собственно принадлежит...

Код dll'ки
Код:
library Project1;


uses
  Forms,
  SysUtils,
  Classes,
  dllForm in 'dllForm.pas' {frmDLL};

{$R *.res}

function CreateChild(App: TApplication): TForm; stdcall;
begin
Application := App;
frmDLL := TfrmDll.Create(App);
Result := frmDll;
end;

exports CreateChild;

begin
end.
А вот код основной программы..
Код:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, ComCtrls, ToolWin;

type
 TCreatePlug = function(App: TApplication): TForm; stdcall;

type
  TForm1 = class(TForm)
    ToolBar1: TToolBar;
    ToolButton1: TToolButton;
    procedure ToolButton1Click(Sender: TObject);
  private
    DH: THandle;
    CreatePlugin: TCreatePlug;

    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.ToolButton1Click(Sender: TObject);
begin
DH := LoadLibrary('Project1.dll');
@CreatePlugin := GetProcAddress(DH, 'CreateChild');
CreatePlugin(Application);
end;

end.
В самой dll нужно еще предусмотреть фунцию, которая будет правильно уничтожать форму. Application-то мы подменили, а потому нужно вернуть на место.
Вложения
Тип файла: rar Forum.rar (13.2 Кб, 12 просмотров)

Последний раз редактировалось Баламут; 24.02.2008 в 02:31.
Баламут вне форума Ответить с цитированием
Старый 24.02.2008, 22:54   #3
SunKnight
Участник клуба Подтвердите свой е-майл
 
Аватар для SunKnight
 
Регистрация: 14.12.2007
Сообщений: 1,434
По умолчанию

Спасибо очень помогло, только все же как правильно уничтожить форму?
Проповедую design patterns, верую в MVC, доверяю eXtrime programming.
SunKnight вне форума Ответить с цитированием
Старый 25.02.2008, 01:11   #4
SunKnight
Участник клуба Подтвердите свой е-майл
 
Аватар для SunKnight
 
Регистрация: 14.12.2007
Сообщений: 1,434
По умолчанию

все нашел!!!
кому интересно:
Код:
//ДЛЛ
var
  Form2: TForm2;
  OldApp:TApplication;
  procedure Init; stdcall;
  procedure Terminate;stdcall;
  procedure Run(app:TApplication);stdcall;
implementation

{$R *.dfm}
//---------
procedure Init; stdcall;//инициализация
begin
OldApp:=Application;//запоминаем старый аплик
form2:=nil;//делает нулевой ссылку на форму плагина.
end;
//---------
procedure Terminate;stdcall;//выгрузка формы
begin
  Form2:=nil;
  Application:=OldApp;
  Form2.Free;
end;
//----------
procedure Run(app:TApplication);stdcall;//запуск формы
begin
        Application := App;
        if form2=nil then Form2 := TForm2.Create(application);
end;

procedure TForm2.FormClose(Sender: TObject; var Action: TCloseAction);
begin
Form2.Free;
form2:=nil;
end;
Проповедую design patterns, верую в MVC, доверяю eXtrime programming.
SunKnight вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Стили оформления кода Altera Свободное общение 2 30.08.2008 17:23
Получить стиль оформления Windows AlexandrSid Общие вопросы Delphi 8 02.07.2008 15:52
Какой стиль оформления форума вы юзаете !?? merax О форуме и сайтах клуба 13 24.01.2008 05:50