Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Снова о DLL


NGPOL ©   (2006-08-30 20:26:00) 

В DLL есть форма, процедура, в которой она Create и Show. Форма несет на себе кнопки, тулбары и т.д., она должна быть внутри Application.MainForm. Когда я вызываю процедуру из проекта, т.е. из MainForm, она где-то создается(проверял), но Show не происходит... Помогите, плз!!!


ANB   (2006-09-01 13:23:00) [1]


> надо всего навего передать в DLL прямую ссылку на application
> приложения.

угу. и кроме этого прочитать статью по ссылке. В противном случае могут быть проблемы.


Barloggg   (2006-09-01 13:17:00) [2]

ну вы все намеками да намеками.
как можно найти что-нибудь если не знать где искать?

форма должна создаваться на чем-то.
У обычного приложение это что-то есть. и называется application.
у DLL этого чего-то нет.
вот и весь смысл последних нескольких топиков.

а решение простое. надо всего навего передать в DLL прямую ссылку на application приложения.и уже на этой ссылке создать форму. и будет счастье.


medved_68   (2006-09-01 10:32:00) [3]


> Имхо, он очень удивится! :-) Вот только кому он пойдёт морду
> бить?

Как кому??? Мне конечно!!! Только сначала пусть проверит свой код frControls
> Код же работает, если его перенести в вызывающую программу(но
> только не в обработчик frMain.OnCreate).

Мало ли куда он что запихивает наобум, так и комп может куда подальше послать и удивляться тут нечему!!! Кода то он не выложил, а гадать??? Не телепатор ремонтировать я точно к нему не пойду :)))
З.Ы.
>Буду пытаться создать компоненты динамически, что-ли?
if not Assigned(frControls) then frControls:= TfrControls.Create(AOwner);
???????? Да уж.....
Может лучше все таки сначала почитать что нибудь??? :(((
Вариант то я тебе дал рабочий, у меня то работает  и без проблем. :)))


ANB   (2006-09-01 09:37:00) [4]


> frControls.Parent:= Application.MainForm;

Интересно, откуда DLL узнала Application приложения ?

И что собой представляет TfrControls ? От чего унаследована ? Если от фрейма, то показать ее саму по себе будет затруднительно.

Совет - перенеси код из DLL в основную программу. Проверь работу там. Потом вынеси обратно в DLL (лучше в BPL). Собери приложение с флажком "собирать с рантайм пакетами". И попробуй еще раз.
Так же прочитай статью http://www.softwarer.ru/packages.html


NGPOL   (2006-09-01 09:25:00) [5]

Хм! Не работает... :( Морду, конечно, никому не собираюсь бить. Мы же сюда по взаимному согласию заходим... Модальная форма таким образом создается и работает. Я проверил в Evaluete/Modify -
Assigned(frControls) = True;
frControls.Parent.Name = 'frMain';
даже frControls.Visible = True !
Код же работает, если его перенести в вызывающую программу(но только не в обработчик frMain.OnCreate). Спасибо всем! Буду пытаться создать компоненты динамически, что-ли?


Германн   (2006-09-01 02:11:00) [6]


> medved_68 ©   (31.08.06 19:28) [10]
>
>
> > frControls.Parent:= Application.MainForm;
>
> NGPOL Понятно почему не хочет :))) Как ты думаешь, а кто
> родитель формы??? Я даже предполагаю, что ты скажешь!!!
> А я скажу нет, не он!!! Удивляйся сколько хочешь
> if not Assigned(frControls) then frControls:= TfrControls.
> Create(AOwner);
> frControls.Parent:= Application.MainForm;
> frControls.Show;
> А теперь исправь вот так:
> frControls:= TfrControls.Create(nil);
> frControls.Show
> Все остальное выкини и удивляйся на здоровье. :))))

Имхо, он очень удивится! :-) Вот только кому он пойдёт морду бить?


NGPOL   (2006-08-31 19:40:00) [7]

Пасиба! Щас проверю!
А насчет медицины - хочешь пообсуждать - пиши на мыло! За 20-ть лет работы у меня есть всякие мнения. Еще раз спасибо!!!


medved_68   (2006-08-31 19:28:00) [8]


> frControls.Parent:= Application.MainForm;

NGPOLПонятно почему не хочет :))) Как ты думаешь, а кто родитель формы??? Я даже предполагаю, что ты скажешь!!! А я скажу нет, не он!!! Удивляйся сколько хочешь
if not Assigned(frControls) then frControls:= TfrControls.Create(AOwner);
frControls.Parent:= Application.MainForm;
frControls.Show;

А теперь исправь вот так:
frControls:= TfrControls.Create(nil);
frControls.Show
Все остальное выкини и удивляйся на здоровье. :))))
> вот. А чудес на самом деле не бывает :))

В самую точку ты в медицине тоже наобумдействуешь??? :)))


NGPOL   (2006-08-31 17:31:00) [9]

Причем InitDB- процедура создания модуля данных срабатывает. Работает и процедура создания и показа модальной формы - для заполнения таблицы. А вот показать frControls - нехочет...


NGPOL   (2006-08-31 17:13:00) [10]

Это код в DLL'ке
procedure InitControl(MainForm : TForm); stdcall;
begin
if not Assigned(frControls) then frControls:= TfrControls.Create(AOwner);
frControls.Parent:= Application.MainForm;
frControls.Show;
end;
это код в вызывающей проге:

procedure TfrMain.FormCreate(Sender: TObject);
begin
InitDB(Application);
InitControl(frMain);
frMain.Caption:= frMain.Caption + ' - ' + GetCaption;
end;
вот. А чудес на самом деле не бывает :))


Сергей М.   (2006-08-31 14:21:00) [11]


> NGPOL ©   (31.08.06 11:45) [3]
> Ну не сумел


Слово-то - не воробей)..


> забашлять медицинскими услугами


Бред сивой кобылы)


medved_68   (2006-08-31 14:11:00) [12]


> При загрузке проги, она(прога) находит ДЛЛ-ку, и, как мне
> хотелось бы, создает и показывает ControlPanel.

А точно создает и показывает??? Или это тебе бы так хотелось. Ведь для того чтобы форма показалась на экране одного Create мало!!! Нужен еще и Show для вновь созданной формы. Чудеса бывают только у вас - медиков :)))


Desdechado   (2006-08-31 11:50:00) [13]

Ну, пройдись отладчиком и увидь, где и что не происходит. Берешь проект с DLL, прописываешь для него host application и запускаешь. И шагаешь в отладчике по своим функциям.

PS а код так и зажал, партизан


Yegorchic   (2006-08-31 11:48:00) [14]

А код создания формы?


NGPOL   (2006-08-31 11:45:00) [15]

Да ладно вам! Ну не сумел с первого раза проблему рассказать - торопился очень! Форма, назовем ее ControlPanel, несущая на себе всякие компоненты, описана в ДЛЛ. При загрузке проги, она(прога) находит ДЛЛ-ку, и, как мне хотелось бы, создает и показывает ControlPanel. Вот этого-то и не происходит - не показывает. Я в тоске. А телепатам я могу забашлять медицинскими услугами :)), т.к. я врач. Но лучше  - я к Вам!!! Помогите, плз...


medved_68   (2006-08-30 21:26:00) [16]


> В DLL есть форма, процедура, в которой она Create и Show.
>  Форма несет на себе кнопки, тулбары и т.д., она должна
> быть внутри Application.MainForm.

Не ну ты в натуре определись где она у тебя конкретно в ДЛЛ или в Application.MainForm. А то братва прям кипятком писает споря....Так нельзя, братан, телепаторы нынче дороги, а ты прикинь у скольких он погорел....Кто башлять будет, в натурЕ?????


Desdechado   (2006-08-30 21:02:00) [17]

>  она должна быть внутри Application.MainForm
Это как?

> я вызываю процедуру из проекта
Код.

>  она где-то создается(проверял)
Я торчу!!!


Наверх

Титульная страница Поиск, карта сайта Написать письмо