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

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

VCL в библиотеке


Александр Б. ©   (2006-03-16 09:58:00) 

День добрый.
Столкнулся с проблеммой невозможности скрыть кнопку окна, для лучшего понимания приведу простой пример.
И так: создаю проект, на форму кладу кнопку, в событии кнопки выводу showmessage, запускаю - мессадж выводится модельно, на панели задач - онна кнопка - приложения.
Изменяю dpr файл следующим образом

library Project1;
uses
 Forms,
 Unit1 in 'Unit1.pas' {Form1};
{$R *.res}
procedure x;
begin
 Application.Initialize;
 Application.CreateForm(TForm1, Form1);
 Application.Run;
end;
exports x;
end.

тоесть делаю из проекта библиотеку
делаю программу для запуска
program xx;
procedure x; external 'Project1.dll';
begin
 x;
end.

запускаю, жму кнопку на форме, и ... вижу на понели задач две(!) кнопки :(
Тоесть для showmessage создалась еще одна кнопка! и так для каждого окна в моей библиотеке создается новая кнопка.

Возможноли решить данную проблемму, если да, то как?


Александр Б.   (2006-03-16 13:17:00) [1]

несогласен, но спорить не буду.
в потрепаться...


Сергей М.   (2006-03-16 12:57:00) [2]


> всеголиш прочесть вопрос вимательно


Да нет) .. Всего лишь стоило максимально подробно изложить свои ИД .. Мол, я знать не знаю ни про какие окна в хост-приложении, и вообще хост-приложение в общем случае может не являться GUI-приложением и не создавать никаких окон.


Александр Б.   (2006-03-16 12:37:00) [3]


> Но если хост-приложение имеет главное окно


"если"
у меня нет такого окна...


> Очередь сообщений находится не в библиотеке, не в хост-приложении


Давайте не будем демогогию разводить, я думаю вы меня поняли


> Я не вижу смысла в дан.контексте создавать собственное окно
> (для объекта Application) и организовавать упомянутый цикл,
>  если таковые уже имеются в хост-приложении и их можно с
> легкостью задействовать передачей хэндла.


опять "если"
у меня этого цикла нет...

вот эти два если вы откдулато придумали  :) на основании этих если придумали какието решения... а стоило всеголиш прочесть вопрос вимательно :)


Сергей М.   (2006-03-16 11:35:00) [4]


> Александр Б.   (16.03.06 11:13) [6]


> я же просил прочитать, программа написана, не НА ДЕЛФИ,
> в хост приложении нет никаких обьектов апликейшен и скрин,
>  потомучто программа написана не на делфи


Ну а кто ж от тебя требует, чтобы эти объекты там, в хост-приложении, обязательно были ? По-моему никто ..

Но если хост-приложение имеет главное окно, то ничто не мешает при вызове эксп.ф-ции передать в нее параметром хэндл этого окна, который может быть назначен безо всяких проблем св-ву Application.Handle в теле эксп.ф-ции... Это вместо того чтобы плодить лишние верхнеуровневые окна вызовом Application.CreateHandle


> очередь сообщений находится в библиотеке


Очередь сообщений находится не в библиотеке, не в хост-приложении и не наЛуне, а в системе... И не одна она там, а несколько их для каждого существующего окна ...

В приложении же, будь то EXE или DLL, находится цикл ожидания/выборки/диспетчеризациисообщений ... Согласись, очередь и цикл - вещи, мягко говоря, не совсем одинаковые ...

Я не вижу смысла в дан.контексте создавать собственное окно (для объекта Application) и организовавать упомянутый цикл, если таковые уже имеются в хост-приложении и их можно с легкостью задействовать передачей хэндла.


Александр Б.   (2006-03-16 11:16:00) [5]


> Desdechado ©   (16.03.06 11:05) [5]
> Application.Handlе явдяется вполне законным виндовым хэндлом,
>  который может передаваться любой программой, а не только
> Дельфийской


Опять 25, люди откуда передаваться то? :))) ну вы блин даете...
Ладно тема закрыта, всем спасибо.
PS читайте внимательнее, по русски ведь пишу, с ошибками но по русски :)


Александр Б.   (2006-03-16 11:13:00) [6]


> Сергей М. ©   (16.03.06 11:04) [4]
>
> > Прочтите пожалуйста мое второе сообщение
>
> В нем идет речь о передаче объектов Application и Screen,
>  а не о передаче хендлов (что вовсе не возбраняется при
> данных условиях

Сергей, я же просил прочитать, программа написана, не НА ДЕЛФИ, в хост приложении нет никаких обьектов апликейшен и скрин, потомучто программа написана не на делфи.


> > Зачем? Оно так надо
>
> С какого перепугу ?
> Ты вообще представляешь себе, что, как, почему и при каких
> условиях происходит в методе Run() ?

Вы бы пример изучили, я ведь код привел, там ведь все понятна, очередь сообщений находится в библиотеке...


> > БЕЗ ПЕРЕДАЧИ .. BPL
>
> Никто не заставляет тебя передавать какие-либо BPL - библиотека,
>  будучи собранная без ран-тайм пакетов, в них как правило
> не нуждается.


Ну хоть за это спасибо :) если чесно то я просто конкретезировал условия задачи чтобы небыло ненужных телодвижений в неподхдящие мне стороны. :)

В любом случае Сергей спасибо за попытку помочь, хотя я рекомендовал бы в следующий раз быть внимательнее.
И так правильный ответ следующий, в экспортируемой функции надо было вызывать
 Application.CreateHandle;
вот так вот...


Desdechado   (2006-03-16 11:05:00) [7]

Application.Handlе явдяется вполне законным виндовым хэндлом, который может передаваться любой программой, а не только Дельфийской


Сергей М.   (2006-03-16 11:04:00) [8]


> Прочтите пожалуйста мое второе сообщение


В нем идет речь о передаче объектов Application и Screen, а не о передаче хендлов (что вовсе не возбраняется при данных условиях).


> Зачем? Оно так надо


С какого перепугу ?
Ты вообще представляешь себе, что, как, почему и при каких условиях происходит в методе Run() ?


> БЕЗ ПЕРЕДАЧИ .. BPL


Никто не заставляет тебя передавать какие-либо BPL - библиотека, будучи собранная без ран-тайм пакетов, в них как правило не нуждается.


Александр Б.   (2006-03-16 10:58:00) [9]


> Сергей М. ©   (16.03.06 10:29) [2]

Прочтите пожалуйста мое второе сообщение.


> > Application.Run;
>
> А это вообще убери.


Зачем? Оно так надо.

И ТАК ВОПРОС НЕ ЗАКРЫТ, БЕЗ ПЕРЕДАЧИ ХЕНДЛОВ и BPL РЕШИТЬ ПРОБЛЕММУ МОЖНО?

Просьба к модераторам переместить тему назад, с учетом второго моего уточнения.


Сергей М.   (2006-03-16 10:29:00) [10]

Что мешает передавать в ДЛЛ хэндл главного окна хост-приложения ?

см. справку
Handle property (TApplication)


> Application.Initialize;


Это следует делать в процедуре иниц-ции библиотеки, а не в теле эксп.ф-ции.


> Application.Run;


А это вообще убери.


Александр Б.   (2006-03-16 10:23:00) [11]

Хотел бы уточнить, что библиотека будет впоследствии грузиться не из delphi приложения, такчто вариант с передачей объектов application и screen не подходит, как и использование bpl. Если возможно, хотелось бы попробывать другое решение.


Наверх

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