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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 01.02.2010, 02:13   #1
spamer
Software Developer
Старожил
 
Аватар для spamer
 
Регистрация: 19.12.2008
Сообщений: 2,070
По умолчанию События/Сообщения для формы в dll

Всем привет. Возник вопрос.
Есть процедура в dll и в ней вот такое :
Код:
var
  HintForm : TForm;
  ActiveHWND : HWND;
...

  HintForm := TForm.Create(nil);
  with HintForm do
    begin
      BorderStyle := bsNone;

      if _Width >= 0 then Width   := _Width;
      if _Height >= 0 then Height := _Height;

      Color := _FormColor;
      AlphaBlend := True;
      AlphaBlendValue := _FormAlphaColor;
    end;

...

  ActiveHWND := GetActiveWindow;
  ShowWindow(HintForm.Handle,SW_SHOWNOACTIVATE);
  SetActiveWindow(ActiveHWND);

...
Код не полный, только та часть, по которой есть вопрос.
Собственно, как мне для формы HintForm создать событие OnClick, или же отловить сообщение когда нажата ЛКМ по этой форме? Ведь класса нет у этой формы, вот поэтому я и не могу понять
Кто может подскажите, пожалуйста.
Будь проще и люди к тебе потянутся

Последний раз редактировалось mihali4; 01.02.2010 в 02:21.
spamer вне форума Ответить с цитированием
Старый 01.02.2010, 02:26   #2
mihali4
*
Старожил
 
Регистрация: 22.11.2006
Сообщений: 9,201
По умолчанию

Цитата:
Ведь класса нет у этой формы
var
HintForm : TForm;
Простите... А TForm вы уже за класс не считаете ?
Переросли ?
mihali4 вне форума Ответить с цитированием
Старый 01.02.2010, 08:18   #3
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,792
По умолчанию

Цитата:
spamer
Все очень просто. Создаешь форму, в ней как обычно все события описываешь как надо а в ДЛЛ пишешь что-то типа:
Код:
uses
  Unit2,
  SysUtils,
  Classes;

var f:TForm2;

procedure aga;begin f:=TForm2.Create(nil);f.show; end;
procedure ugu;begin f.Close; f.Free; f:=nil; end;

exports aga,ugu;
begin
end.
Form2 это та форма, которая попадет в ДЛЛ.
А далее вызывай ее ка хочешь.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 01.02.2010, 10:55   #4
psycho-coder
Участник клуба
 
Аватар для psycho-coder
 
Регистрация: 06.04.2009
Сообщений: 1,524
По умолчанию

Код:
procedure HintFormClick(Sender: TObject);
begin
...
end;
...
  HintForm := TForm.Create(nil);
  with HintForm do
    begin
      BorderStyle := bsNone;

      if _Width >= 0 then Width   := _Width;
      if _Height >= 0 then Height := _Height;
      OnClick = HintFormClick;
      Color := _FormColor;
      AlphaBlend := True;
      AlphaBlendValue := _FormAlphaColor;
    end;
psycho-coder вне форума Ответить с цитированием
Старый 01.02.2010, 12:06   #5
spamer
Software Developer
Старожил
 
Аватар для spamer
 
Регистрация: 19.12.2008
Сообщений: 2,070
По умолчанию

Цитата:
Простите... А TForm вы уже за класс не считаете ?
Переросли ?
Вы наверное не правильно поняли, я имел ввиду, что нету модуля с классом формы. Т.е. я же форму не создаю через Файл = Нью = Форм.

Stilet, но ведь я же создаю форму немного по другому, у меня нету модуля с классом данной формы.

psycho-coder, ваш код попробую и отпишусь. Хотя я вот почти также был писал, только Sender: TObject непередавал с процедуру и у меня ошибка вываливалась.

Тему прошу не закрывать, если кто то еще может чего то предложить - буду только рад выслушать
Будь проще и люди к тебе потянутся
spamer вне форума Ответить с цитированием
Старый 01.02.2010, 12:13   #6
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,792
По умолчанию

Цитата:
spamer
А что мешает его сделать и использовать в ДЛЛ?
Это же удобно, и модульность поддерживается хорошо.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 01.02.2010, 16:45   #7
spamer
Software Developer
Старожил
 
Аватар для spamer
 
Регистрация: 19.12.2008
Сообщений: 2,070
По умолчанию

psycho-coder, как я и думал, ваш вариант не сработал...
Не совместимость типов:
Цитата:
Incompatible types: 'method pointer and regular procedure'
Цитата:
А что мешает его сделать и использовать в ДЛЛ?
Это же удобно, и модульность поддерживается хорошо.
Та оно то вроде и удобно, но... как бы сказать...не особо подходит.
А неужели нельзя больше никак приделать событие к моему варианту формы?
Будь проще и люди к тебе потянутся

Последний раз редактировалось spamer; 01.02.2010 в 17:00.
spamer вне форума Ответить с цитированием
Старый 01.02.2010, 17:03   #8
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,792
По умолчанию

Цитата:
А неужели нельзя
Скажем так можно, но я в свое время от такого отказался:
во-первых наткнулся на грабли с ресурсами - для TForm вроде как полюбому должен быть файл с ресурсами
во-вторых - куча кода в одном файле просто неудобна для отладки.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 01.02.2010, 18:02   #9
spamer
Software Developer
Старожил
 
Аватар для spamer
 
Регистрация: 19.12.2008
Сообщений: 2,070
По умолчанию

Stilet, все ясно, спасибо за пояснение. Тогда создам форму (с модулем) и буду юзать такой вариант, как вы предложили.
з.ы. а у вас случайно примера не осталось ваших наработок для вот того варианта реализации - просто в целях изучения. Если найдете, выложите пожалуйста сюда.
з.з.ы вдруг чего - еще задам вопросы...
Будь проще и люди к тебе потянутся
spamer вне форума Ответить с цитированием
Старый 01.02.2010, 19:09   #10
mihali4
*
Старожил
 
Регистрация: 22.11.2006
Сообщений: 9,201
По умолчанию

Ну-у-у...
Я вам могу дать старый примерчик для DLL:
Код:
begin
FZastav:=TFZastav.Create(Application);
Application.ProcessMessages;
FZastav.Show;
Application.ProcessMessages;
FZastav.Update;
Application.ProcessMessages;
if FormatDateTime('hh:nn:ss',Now)<'09:10:00' then
begin
MyIni:=TIniFile.Create('C:\BIL.INI');
MyIni.WriteBool('Razdel','Reindex',True);
MyIni.Free;
SetLog('Реиндексация включена');
end;
ExitProc:=@LibExit;
MyExit:=ExitProc;
Application.CreateForm(TFDM1, FDM1);
if DM1.haverror then
begin
FZastav.Free;
LibExit;
end else
begin
Formmain:=TFormmain.Create(Application);
Formmain.Hide;
Formmain.showfn:=0;
FZastav.Free;
end;
end.
Может, сгодится...
mihali4 вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
сообщения с формы сайта segail PHP 1 06.01.2010 21:47
Обращение из формы в dll к элементу главной формы (delphi) a_n_n_a Помощь студентам 3 10.05.2009 04:00
События формы Shouldercannon Общие вопросы Delphi 10 13.01.2009 01:32
TabSheet как родитель для формы из DLL - Проблема Leser Общие вопросы Delphi 2 11.01.2009 20:40
Передача сообщения из программы в свою Dll SergeySK Общие вопросы Delphi 3 01.11.2007 14:42