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

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

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

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 27.03.2013, 02:23   #1
Azizas
 
Регистрация: 23.12.2011
Сообщений: 4
Сообщение Form in Dll

Есть некая библиотека ,которая погружается в АП браузера и фильтрует запросы .Когда обнаружен запрос на запрещенный сайт должна выводится форма ,которая оповещает пользователя ,что ресурс запрещен администратором .
Проблема в том,что когда форма создается браузер закрывается
Код создания и завершения формы.
Код:
unit WDForm;

interface

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

type
  TForm1 = class(TForm)
    SpeedButton1: TSpeedButton;
    procedure SpeedButton1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

  procedure CreateMyForm; 
  
implementation

{$R *.dfm}
{

procedure CreateMyForm;
begin
if not Assigned(Form1) then
begin
Form1:=TForm1.Create(nil);
end;
Form1.Show;
end;

procedure TForm1.SpeedButton1Click(Sender: TObject);
begin
Form1.Close;
end;

procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
Action:=caFree;
end;

end.
В чем соль?

Последний раз редактировалось Azizas; 27.03.2013 в 17:16. Причина: Изменение исходного кода
Azizas вне форума Ответить с цитированием
Старый 27.03.2013, 09:33   #2
3D Hunter
Сумрачная тень
Форумчанин
 
Аватар для 3D Hunter
 
Регистрация: 05.03.2009
Сообщений: 689
По умолчанию

убери пременную формы из модуля, в обработчике onClose вставь строку action:=caFree; ну и перепеши конструктор, т.к. непонятно зачем там параметр AppHandle, если не используется в процедуре. измени тип параметра с thandle на tobject. кажется, у конструктора формы параметр таого типа, если память не изменяет. и уж тогда лучше так писать в твоей процедуре:
with tform1.create(AppHandle) do showmodal;
при закрытии форма самоуничтожится и почистит за собой память. все должно быть проще
"ковыряю изнутри" (с)
3D Hunter вне форума Ответить с цитированием
Старый 27.03.2013, 10:38   #3
Кольша
Далеко не
Участник клуба
 
Аватар для Кольша
 
Регистрация: 11.08.2011
Сообщений: 1,512
По умолчанию

Можно увидеть как ты отслеживаешь?
Кольша вне форума Ответить с цитированием
Старый 27.03.2013, 17:21   #4
Azizas
 
Регистрация: 23.12.2011
Сообщений: 4
По умолчанию

Цитата:
Сообщение от 3D Hunter Посмотреть сообщение
убери пременную формы из модуля, в обработчике onClose вставь строку action:=caFree; ну и перепеши конструктор, т.к. непонятно зачем там параметр AppHandle, если не используется в процедуре. измени тип параметра с thandle на tobject. кажется, у конструктора формы параметр таого типа, если память не изменяет. и уж тогда лучше так писать в твоей процедуре:
with tform1.create(AppHandle) do showmodal;
при закрытии форма самоуничтожится и почистит за собой память. все должно быть проще
Лишний параметр ,забыл удалить вместе с закомментированными участками кода. Первоначально код выглядел вот так:
Код:
procedure CreateMyForm(AppHandle:THandle);
begin
if not Assigned(Form1) then
begin
Application.Handle:=AppHandle;
Form1:=TForm1.Create(Application);
end;
Form1.Show;
end;
Но я посчитал ,что передача в длл хендла основного приложения будет излишней.
Azizas вне форума Ответить с цитированием
Старый 27.03.2013, 19:47   #5
3D Hunter
Сумрачная тень
Форумчанин
 
Аватар для 3D Hunter
 
Регистрация: 05.03.2009
Сообщений: 689
По умолчанию

да здесь параметр вообще не нужен вы не в длл передаете, вы из длл вызываете метод в контексте приложения. разницу улавливаете? поэтому объект application как минимум будет доступен в качестве родителя для созданной формы. только чтобы длл понимала что такое application, в uses нужно добавить модуль forms, а вашу экспортируемую процедуру оформить так:
procedure CreateMyForm(AOwner: TObject);
begin
with tform1.create(AOwner) do ShowModal;
end;
"ковыряю изнутри" (с)
3D Hunter вне форума Ответить с цитированием
Старый 07.08.2013, 16:45   #6
Кольша
Далеко не
Участник клуба
 
Аватар для Кольша
 
Регистрация: 11.08.2011
Сообщений: 1,512
По умолчанию

Уважаемый AlexGorVlad, из за вас у меня "засрана" вся почта, и личный кабинет.
Если вы не прекратите, я не поленюсь, и "засру" вашу "сраную" биржу вместе с партнеркой.
С уважением Кольша.
Кольша вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
C# & DLL: как указать, что загружать DLL нужно из ЗАДАННОЙ папки "D:\My\Path\a.dll" ? AntyDES C# (си шарп) 11 10.10.2012 20:00
Можно ли подключить к web form windows form? Manonia Windows Forms 0 20.10.2010 05:28
Form в DLL Шульц Общие вопросы Delphi 5 05.05.2010 10:59
Form.Show в Form.Create UnD)eaD)Snake Общие вопросы Delphi 6 07.09.2007 11:13