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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 02.05.2010, 15:13   #1
pain_maker
Новичок
Джуниор
 
Регистрация: 02.05.2010
Сообщений: 4
По умолчанию Хранение формы в dll

Появилась идея хранить форму программы в dll чтобы можно было заменой этой dll обновлять програму. Но где-то чего-то видимо не хватает и, при запуске программы, форма появляется и сразу исчезает.. и программа закрывается. ни каких сообщений нет.

Может кто занимался таким вопросом?

вот код программы:

Код:
program Programm;

uses
  Forms,
  Windows;\\\\\

{$R *.res}

procedure CreateMainForm(AppHandle: THandle); stdcall; external 'MainForm.dll';
//procedure DestroyMainForm; stdcall; external 'MainForm.dll';

begin
//Application.Initialize;
CreateMainForm(Application.Handle);
//Application.ShowMainForm:=true;
//Application.Run;

end.

Код DLL:

Код:
library MainForm;

uses
  SysUtils,
  Classes,
  MainFormUnit in 'MainFormUnit.pas' {MyMainForm};

{$R *.res}

exports

CreateMainForm;
//DestroyMainForm;

begin
end.

Код 'MainFormUnit.pas':

Код:
unit MainFormUnit;

interface

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

type
  TMyMainForm = class(TForm)
    Memo1: TMemo;
    Button1: TButton;
    Button2: TButton;
  private
    { Private declarations }
  public
    { Public declarations }
  end;

procedure CreateMainForm(AppHandle: THandle); stdcall;
//procedure DestroyMainForm; stdcall;

var
  MyMainForm: TMyMainForm;

implementation

{$R *.dfm}

procedure CreateMainForm(AppHandle: THandle);
begin
  Application.Handle := AppHandle;
  MyMainForm := TMyMainForm.Create(Application);
  MyMainForm.Show
end;

{procedure DestroyMainForm;
begin
  MyMainForm.Free;
end;}

end.
Еще в тему вопрос: какая зависимость у LoadLibrary?

Последний раз редактировалось pain_maker; 02.05.2010 в 16:29.
pain_maker вне форума Ответить с цитированием
Старый 02.05.2010, 15:49   #2
JTG
я получил эту роль
Старожил
 
Аватар для JTG
 
Регистрация: 25.05.2007
Сообщений: 3,694
По умолчанию

MyMainForm.ShowModal;

Кроме того, у DLL и EXE будут свои экземпляры "стандартных" объектов, поэтому при подключении библиотеки нужно передавать не AppHandle, а весь Application, Screen, Clipboard и т.п.

А вообще для таких целей используют Other -> ActiveX -> Active Form, так безопаснее.
пыщь

Последний раз редактировалось JTG; 02.05.2010 в 15:57.
JTG вне форума Ответить с цитированием
Старый 02.05.2010, 15:51   #3
Человек_Борща
Старожил
 
Аватар для Человек_Борща
 
Регистрация: 30.12.2009
Сообщений: 11,426
По умолчанию

код корректно оформи..
Человек_Борща вне форума Ответить с цитированием
Старый 02.05.2010, 16:17   #4
pain_maker
Новичок
Джуниор
 
Регистрация: 02.05.2010
Сообщений: 4
По умолчанию

JTG
Модальная форма - не вариант.
Active Form - не пользовал, но посмотрю, Спасибо!

Человек_Борща
А что не так в оформлении??

нашел: loadlibrary зависит от Windows.

По основному вопросу кто-нибудь подскажет?

Еще, как вариант, хранить фрейм в DLL, который растянуть на всю форму. Как его тогда подгрузить на форму??

Последний раз редактировалось Stilet; 03.05.2010 в 15:52.
pain_maker вне форума Ответить с цитированием
Старый 03.05.2010, 15:14   #5
DimOn4Ik
Форумчанин
 
Регистрация: 10.10.2009
Сообщений: 206
По умолчанию

а можно в DLLхранить вкладку PageControl ?
DimOn4Ik вне форума Ответить с цитированием
Старый 03.05.2010, 15:25   #6
pain_maker
Новичок
Джуниор
 
Регистрация: 02.05.2010
Сообщений: 4
По умолчанию

Цитата:
Сообщение от DimOn4Ik Посмотреть сообщение
а можно в DLLхранить вкладку PageControl ?
можно. Можно хранить любой объект. Вопрос как его подгрузить на форму..
___________________________________ _________________________
Окей. Разобрался, для тех кому интересно выкладываю:
Код программы:

Код:
program StoreFormInDLL;

uses
  Windows; {для пользования фунции LoadLibrary}

{$R *.res}

begin
  LoadLibrary('FormInDLL.dll')
end.
Код DLL:
Код:
library FormInDLL;

uses
  Forms,
  SysUtils,
  Classes,
  Unit1 in 'Unit1.pas' {Form1};

{$R *.res}

begin
Application.Initialize;
Application.CreateForm(TForm1, Form1);
Application.Run;
end.
Собственно вот) В Unit1'е храним форму. Теперь можно дорабатывать форму как нам угодно и заменять dll в папке с программой.

Последний раз редактировалось pain_maker; 04.05.2010 в 15:07.
pain_maker вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Хранение картинок bmp в DLL библиотеке T-dayne Общие вопросы Delphi 3 09.04.2014 21:14
DLL и формы Horus92 Общие вопросы Delphi 2 31.12.2009 20:01
Обращение из формы в dll к элементу главной формы (delphi) a_n_n_a Помощь студентам 3 10.05.2009 04:00
DLL b свойства формы ??? spamer Общие вопросы Delphi 10 09.02.2009 21:01
DLL и формы Andrei Isaev Компоненты Delphi 1 18.11.2008 18:25