Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2006.04.02;
Скачать: CL | DM;

Вниз

VCL в библиотеке   Найти похожие ветки 

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

День добрый.
Столкнулся с проблеммой невозможности скрыть кнопку окна, для лучшего понимания приведу простой пример.
И так: создаю проект, на форму кладу кнопку, в событии кнопки выводу 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 10:23) [1]

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


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

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

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


> Application.Initialize;


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


> Application.Run;


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


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


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

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


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


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

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

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


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


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


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


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


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


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


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


 
Desdechado ©   (2006-03-16 11:05) [5]

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


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


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

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


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

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


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


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

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


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


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


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


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


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


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


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

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


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


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

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

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


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


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


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


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


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


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


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

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


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


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


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


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

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



Страницы: 1 вся ветка

Текущий архив: 2006.04.02;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.042 c
15-1141992054
ANB
2006-03-10 15:00
2006.04.02
Просьба к модераторам


2-1142599809
RomanH
2006-03-17 15:50
2006.04.02
Извлечение Jpeg из таблицы в Image


2-1142927779
XiAndr
2006-03-21 10:56
2006.04.02
TWebBrowser


5-1128672402
H010d Freeze
2005-10-07 12:06
2006.04.02
Проблемы с сохранением свойств субкомпонента


1-1141138844
RomanH
2006-02-28 18:00
2006.04.02
Изменение индекса в меню