Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2006.04.02;
Скачать: [xml.tar.bz2];

Вниз

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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.48 MB
Время: 0.046 c
2-1142787079
elfebet
2006-03-19 19:51
2006.04.02
функция Аккермана


2-1142517746
PoetOfDelphi
2006-03-16 17:02
2006.04.02
SelectAl для DBGrid а с включённым dgMultiSelect


2-1142509639
Gentos
2006-03-16 14:47
2006.04.02
Delphi&Html


1-1141040367
serguar
2006-02-27 14:39
2006.04.02
отладка сервисов NT


2-1142886765
Luarv
2006-03-20 23:32
2006.04.02
Удалить элемент ФАЙЛА





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский