Форум: "Основная";
Текущий архив: 2004.10.03;
Скачать: [xml.tar.bz2];
ВнизКак узнать, что MDI форма активна, если она вызывается из DLL. Найти похожие ветки
← →
46_55_41_44 © (2004-09-13 17:31) [0]Как узнать, что MDI форма активна, если она вызывается из DLL.
Как понимаете Метод ActiveMDIChild не подходит!!!
← →
46_55_41_44 © (2004-09-14 08:50) [1]ааааааааууууууу...
кто-нибудь :)
← →
Digitman © (2004-09-14 08:53) [2]
> Как понимаете Метод ActiveMDIChild не подходит
это почему же ?
← →
46_55_41_44 © (2004-09-14 13:49) [3]Потому, что МейнФорм не воспринимает формы созданные в ДЛЛ как Чайлд формыыыы... :)
← →
Digitman © (2004-09-14 13:54) [4]
> МейнФорм не воспринимает формы созданные в ДЛЛ как Чайлд
> формы
как это "не воспринимает" ?
ГДЕ это написано, в какой документации ?
← →
Юрий Зотов © (2004-09-14 14:48) [5]Попробуйте в DLL переопределить Screen и Application на то же самое, но из Exe.
← →
Digitman © (2004-09-14 14:52) [6]
> Юрий Зотов
Развращаешь ведь, Юрий !)
Ломаешь путь головы автора к логике, размышлениям ..
← →
46_55_41_44 © (2004-09-15 08:54) [7]Я делаю в самом ДЛЛ
İnitialization
Old_Screen := Screen;
Old_Application := Application;
Finalization
Screen := Old_Screen;
Application := Old_Application;
вы предлагаете сделать это из ЕХЕ???
← →
Digitman © (2004-09-15 09:07) [8]
> 46_55_41_44 © (15.09.04 08:54) [7]
> Я делаю в самом ДЛЛ
> İnitialization
> Old_Screen := Screen;
> Old_Application := Application;
> Finalization
> Screen := Old_Screen;
> Application := Old_Application;
при инициализации ДЛЛ делать это совершенно бестолково
самый простой вариант (без доп.выкрутасов) - собрать проекты хост-приложения и ДЛЛ с опцией использования ран-тайм пакетов
если же хочется повыкрутасничать, то здесь масса вариантов
вот один из них :
var
Old_Screen: TScreen;
Old_Application: TApplication;
..
//после загрузки DLL, но перед первым обращением к прочим ее ф-циям в хост-приложении следует однократно вызвать эту ф-цию, передав ей параметрами ссылки на объекты Screen и Application
function InitDLL(App: TApplication; Scr: TScreen): Boolean;
begin
Result := not Assigned(Old_Application) and not Assigned(Old_Screen);
if not Result then
begin
Old_Application := App;
Old_Screen := Scr;
Result := True;
end;
end;
..
Finalization
if Assigned(Old_Screen) then
Screen := Old_Screen;
if Assigned(Old_Application) then
Application := Old_Application;
← →
46_55_41_44 © (2004-09-15 14:35) [9]Отходим от темы....
на вопрос по существу можешь ответить???
← →
Юрий Зотов © (2004-09-15 16:55) [10]> 46_55_41_44 © (15.09.04 14:35) [9]
А разве этот ответ не по теме, или не по существу?
Ну, запоминаете Вы при инициализации Screen и Application, а при финализации их восстанавливаете - а что изменилось-то? Ничего абсолютно. Где же изменение Application и Screen? Нет его.
var
Old_Application: TApplication;
Old_Screen: TScreen;
procedure InitDLL(App: TApplication; Scr: TScreen);
begin
if Old_Application = nil then
begin
Old_Application := Application;
Old_Screen := Screen;
Application := App;
Screen := Scr
end
end;
procedure RestoreDLL;
begin
if Old_Application <> nil then
begin
Application := Old_Application;
Screen := Old_Screen;
end
end;
Поместите этот код в DLL и экспортируйте обе функции. В EXE перед работой с DLL вызовите InitDLL(Application, Screen), а после - RestoreDLL.
← →
46_55_41_44 © (2004-09-16 11:04) [11]Если я задаю вопрос о том, как можно узнать, что созданная из ДЛЛ форма активна, то это по крайней мере должно означать, что я вызвал эту саму форму из ДЛЛ... Что в своб очередь означает, что я делаю все описанное [10]... по своему...
Ответьте мне на вопрос... Как можно узнать, что форма активна???? МДИЧайлд форма!!! Прежде чем предланать ActiveMDiChild попробуйте сами сначала... Увидите, что ничего это не дает!!!
Очень прошу ответить по существу вопроса!!!!!!!!!1
А не о том, правильно ли я присваиваю Application и Screen. Если бы делал не правильно, то ничего бы не работало... Все нормально работает!!! Просто главная форма не восепринимает созданную из ДЛЛ форму как МДИЧайлд!!! Вотттт
← →
Mim1 © (2004-09-16 15:44) [12]
> Если бы делал не правильно, то ничего бы не работало...
LMD !!!!
Уже ответили, и не раз.
← →
Digitman © (2004-09-16 15:59) [13]
> 46_55_41_44 © (16.09.04 11:04) [11]
видимо ты, братец, изрядно туп ..
тебе чуть ли не открытым текстом намекают, что проблемы с якобы "неработоспособностью" метода ActiveMDIChild, вызываемого в данном контексте, вызваны именно неверным твоим алгоритмом назначения переменных Screen и Application при "инициализации" твоей ДЛЛ ! Ты же, даже не вникунув в суть проблемы, продолжаешь гнуть палку в ту же сторону ..
← →
KSergey © (2004-09-16 16:21) [14]2 46_55_41_44 ©
"Я все делаю правильно, но программа работает не правильно."
> [4] Digitman © (14.09.04 13:54)
Если здесь говорилось о том же, о чем позже растолковал Юрий - я бы никогда не допер... Ну нельзя же такие совсем уж туманные намеки давать ;)
← →
Digitman © (2004-09-16 16:48) [15]
> KSergey © (16.09.04 16:21) [14]
> нельзя же такие совсем уж туманные намеки давать
намек существует для человека живого ума ... ищущего, творческого ума ...
грош цена намеку, сделанного в адрес "батонокидателя" ...
получив сей намек заглянуть в исх.тексты VCL для него - это выше предела человеческих возможностей ... здесь я бессилен(
← →
46_55_51_44 (2004-09-17 16:18) [16]Slushay yesli perexodit" na oskorbleniya, to ya toje mogu napisat"s shto o tebe dumayu... I uveryayu tebe malo ne pokajetsa...
*************
Prishli mne primer programmki, shtobi ona vosprinimala formu sozdannuyu iz DLL kak svoy MDIChild. To yest" rabotala ActiveMDIChild i vse takoye... I tak: V exe-shnike tol"ko odna MDIForm, a v DLL MDIChild-i... i Napisav skajem MainForm.ActiveMDIChild.BringtoFront libo shto-to yeshe mi poluchim ojidayemiy rezul"tat!!!
***********
I daje yesli vse shto ti govorish pro moye znaniye VCL pravda eto yeshye ne dayet tebe pravo perexodit" na oskorbleniya!!
Eto vsego-lish pokazivayet shto u tebya net samouvajeniya. Chelovek ne uvajayushiy drugix sam togo ne zaslujivayet!!! Pomoemu odna iz tseley etogo sayta v tom, shtobi pomogat" lyudam,a ne xait" ix.
← →
46_55_51_44 (2004-09-17 16:21) [17]Yesli prishlesh.. Ya tebe zdes skaju spasibo...
Shto ya absolutno ne znayu VCL...
i vse takoye.. uveryayu tebya moye samolubiye ot etogo ne postradayet!!!
da kstati pardon za latinisu.. Prosto eto komp inostra, a u nego net Ru... Vobshem pomoyemu vse ponyatno!!!
← →
46_55_51_44 (2004-09-17 16:22) [18]f_aslanov@hotmail.com prisilay...
← →
Digitman © (2004-09-17 16:31) [19]
> 46_55_51_44
свое "самолюбие" тешь сам
а примеры кода, устраняющие ситуацию с якобы неработоспособностью ActiveMDIChild в твоем случае, тебе уже даны в [7] и [9] .. равно как дана и альтернативная рекомендация - просто собрать оба проекта с опцией использования ран-тайм-пакетов
← →
46_55_51_44 (2004-09-17 17:00) [20]Vse shto mne nado bilo sdelat" ya uje sdelal...
Chestnoye slovo!!!
I ne takim sposobom kakim ti govoril.. Build with Run-Time packages ya delat" ne xotel potomu shto ne oxota potom s soboy bpl taskat".
i vse je... Prosto radi interesa... sdelay, yesli ne trudno, i prishli... Tam je raboti minut na 15 maksimum...
Jdu...
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2004.10.03;
Скачать: [xml.tar.bz2];
Память: 0.5 MB
Время: 0.046 c