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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 20.08.2008, 00:51   #1
Roof
Форумчанин
 
Аватар для Roof
 
Регистрация: 01.02.2007
Сообщений: 785
По умолчанию потеря параметров при вызове формы из dll...

Работаю в Делфи 7. Столкнулся с небольшой проблемой. Форму загружаю в dll и потом ее вызываю из основного приложения. Так вот. На форме, которая находится в dll использую компонент TransBtn. Устанавливаю значение TransparentButton1.FrameStyle:= fsExplorer. (в инспекторе или при form1.Create - неважно). Если эту форму не загружать в dll, а компилировать отдельно, то fsExplorer работает как надо (это легко заметить, если отдельно компилировать эту форму). Но при вызове из dll свойство fsExplorer теряется! Значение как-будто само устанавливается в fsNone! Как мне это свойство не терять?
Исходник программы прилагается. Архив с компонентом тоже. Два архива всего .
Mainn.dpr - проект основного приложения.
libr.dpr - проект библиотеки.
Unit1.pas - модуль с формой, которую загружаю в dll.
Вложения
Тип файла: rar dll parametrs.rar (11.1 Кб, 12 просмотров)
Тип файла: rar transbtn.rar (44.6 Кб, 15 просмотров)
Изо всей благодати
В руках крепко сжатых
Я донесу только капли
Roof вне форума Ответить с цитированием
Старый 20.08.2008, 12:29   #2
alexBlack
Участник клуба
 
Регистрация: 12.10.2007
Сообщений: 1,204
По умолчанию

Со свойством все в порядке. "Ошибка" связана с особенностями реализации событий CM_MOUSEENTER/CM_MOUSELEAVE в Delphi - они просто не вызываются (скорее всего из-за двух копий объектов Application - в приложении и в dll).

Кстати, в D10 механизм их формирования изменен и все прекрасно работает.

Вариант решения. Изменить метод MouseMove компонента (он там есть)

Код:
procedure TTransparentButton.MouseMove(Shift: TShiftState; X, Y: Integer);
var R:TRect;
    P:TPoint;
begin
   P := point(X, Y);
   R := ClientRect;
   inflateRect(R, -3, -3);
   FInsideButton := PtInRect(R, P);
   if (FrameStyle = fsExplorer) then Repaint;

   // ниже как и было 
   inherited MouseMove(Shift,X,Y);
   // ....
методы Enter/Leave можно убрать (или оставить, на Ваше усмотрение).

При таком подходе рамка кнопки будет появлять с запаздыванием (на 3 пиксела).

Последний раз редактировалось alexBlack; 20.08.2008 в 12:33.
alexBlack вне форума Ответить с цитированием
Старый 20.08.2008, 14:49   #3
Roof
Форумчанин
 
Аватар для Roof
 
Регистрация: 01.02.2007
Сообщений: 785
По умолчанию

ругается на строчку
Код:
FInsideButton := PtInRect(R, P);
пишет мне [Error] Undeclared identifier: 'FInsideButton'
Изо всей благодати
В руках крепко сжатых
Я донесу только капли
Roof вне форума Ответить с цитированием
Старый 20.08.2008, 15:34   #4
alexBlack
Участник клуба
 
Регистрация: 12.10.2007
Сообщений: 1,204
По умолчанию

Странно. Вот же описание:

Код:
unit TransBtn;
...
type
  TTransparentButton = class(TGraphicControl)
  private
    ...
    FInsideButton:     Boolean;
    ...
Прикрепил исправленный модуль
Вложения
Тип файла: rar TransBtn.rar (6.2 Кб, 10 просмотров)
alexBlack вне форума Ответить с цитированием
Старый 22.08.2008, 22:08   #5
Roof
Форумчанин
 
Аватар для Roof
 
Регистрация: 01.02.2007
Сообщений: 785
По умолчанию

спасибо тебе . Вообще я просто решил не заморачиваться и перекинул проект на 2007 делфи - там, как ты и говорил, все работает хорошо. Кнопики как надо отображаются. Спасибо))) А с исправленным модулем еще разберусь
Изо всей благодати
В руках крепко сжатых
Я донесу только капли
Roof вне форума Ответить с цитированием
Ответ


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

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Connection timed out при вызове IdSMTP1.Connect(10000); dimon000 Работа с сетью в Delphi 3 11.01.2008 22:49
адрес не активной ячейки при вызове функции skachkovgd Microsoft Office Excel 4 06.12.2007 09:50
Потеря данных в Grid chingiz БД в Delphi 8 29.07.2007 00:17
Потеря переменной при выходи из процедуры Kaz Помощь студентам 3 07.06.2007 03:24