Текущий архив: 2003.07.07;
Скачать: CL | DM;
Вниз
Чем вызвана ошибка Cannot assign a TFont to a TFont... Найти похожие ветки
← →
Voyager_XX (2003-06-23 19:55) [0]Дело в следующем.....
программа грузит длл с формой, форма вызывается, при наведении курсора на элементы у которых есть хинт, через некоторое время, приблизительно когда должен бы появиться хинт, выдается экзепшн
Cannot assign a TFont to a TFont. Мастера нужна помощь....где грабли...
← →
Palladin (2003-06-23 19:57) [1]TFont в dll, он понимаешь совсем другой, не такой как TFont в приложении...
← →
Voyager_XX (2003-06-23 20:05) [2]я понимаю, но убрал все что может быть завязано на TFont,
форма пустая на ней кнопка с хинтом....наводишь на кноку и приехали....(это я уже новую длл слепил полностью пустую),
ни передаю ни присваиваю нигде ....все по умолчанию...все свойства компанент и форм...
у формы в длл ParentFont - false....?
← →
reonid (2003-06-23 20:12) [3]constructor THintWindow.Create(AOwner: TComponent);
begin
inherited Create(AOwner);
Color := $80FFFF;
Canvas.Font := Screen.HintFont;
Canvas.Brush.Style := bsClear;
end;
← →
reonid (2003-06-23 20:18) [4]Хотя нет, это не должно влиять
← →
Юрий Зотов (2003-06-23 21:28) [5]Попробуйте перед вызовом формы переменные Screen и Application из DLL переопределить на соответствующие значения из Exe.
← →
Voyager_XX (2003-06-24 10:08) [6]возможно я это и делаю.....
вызов идет по типу такой...
procedure InitPlugin(App, Scr: integer); StdCall;
var DA: TApplication; DS: TScreen;
begin
DS := Screen;
Screen := TScreen(Scr);
DA := Application;
Application := TApplication(App);
end;
может что не так...?
← →
Юрий Федоров (2003-06-24 10:48) [7]Попробуйте присваивать не сами Application, Screen, а их Handle"ы
← →
Voyager_XX (2003-06-24 10:54) [8]а как вот такой вариант ....
Я правил для этого graphics.pas
procedure TFont.Assign(Source: TPersistent);
begin
было
if Source is TFont then
стало
if (Source is TFont) or (Source.ClassName = "TFont") then
// пример от Михаила
попробовал работает...в чем загвоздка....
сейчас поиграюсь с Handle...
но вопрос остается что правильнее...
← →
Voyager_XX (2003-06-24 11:05) [9]сделал так
DS := Screen;
Screen := TScreen(Scr) ;
DA := Application;
Application . Handle := TApplication(App). Handle ;
присваивается handle....
идет вызов
Result := integer(TfrmMDI_dll.Create(Application));
и вылетает ошибка....
Cannot create form. No MDI form currently active. :((
вот как...
← →
Юрий Федоров (2003-06-24 11:13) [10]С исправлением graphics.pas
ты погорячился, верни взад :-)
А при вызове InitPlugin ты Handle"ы передаешь или сами объекты?
← →
Voyager_XX (2003-06-24 11:26) [11]были следующие попытки вызова
procedure InitPlugin(App : TApplication; Scr : TScreen ); StdCall; и
procedure InitPlugin(App, Scr: integer); StdCall;
и из головной формы вызывалось :
InitPlugin( (Application), (Screen) ); и
InitPlugin( integer(Application), integer (Screen) );
← →
Юрий Федоров (2003-06-24 11:52) [12]>>и из головной формы вызывалось :
>> InitPlugin( (Application), (Screen) ); и
>> InitPlugin( integer(Application), integer (Screen) );
Это одно и то же.
Попробуй
InitPlugin(Application.Handle, Screen.Handle);
← →
Voyager_XX (2003-06-24 12:06) [13]нда ....
тока я у Screen - Handle получить не могу....
сделал так:
procedure InitPlugin( App : HWND ; Scr : TScreen ); StdCall;
begin
DS := Screen;
Screen := TScreen(Scr) ;
DA := Application;
Application . Handle := (App) ;
идет вызов
Result := integer(TfrmMDI_dll.Create(Application));
и вылетает ошибка....
Cannot create form. No MDI form currently active. :((
вот как...
← →
Юрий Федоров (2003-06-24 12:15) [14]Со Screen.Handle я погорячился :-)
Тут очень часто задается вопрос "создание MDI Child форм в DLL", поищи
Страницы: 1 вся ветка
Текущий архив: 2003.07.07;
Скачать: CL | DM;
Память: 0.47 MB
Время: 0.006 c