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

Вниз

Если в пакете есть форма, то гл. форма не показывается на TaskBar   Найти похожие ветки 

 
Kolan ©   (2007-07-08 14:46) [0]

Здравствуйте,
 Есть форма(пусть будет главная). Она динамически(LoadPackage) загружает пакеты(*.bpl). Среди пакетов есть пакет с формой и таким кодом:
initialization
 Form1 := TForm1.Create(Application);
 Form1.Show;


Так вот если этот пакет загружается, то гл. форма не отображается на ТаскБаре Windows. Если её свернуть, развернуть — то она появляется(прям как D2006 при установленом D2007).

Вопросы:
 1. Почему так происходит?
 2. Как исправить?


 
Юрий Зотов ©   (2007-07-08 15:31) [1]

Попробуйте владельцем формы из пакета сделать НЕ Application, а, например, nil, или Application.MainForm.


 
Kolan ©   (2007-07-08 15:37) [2]

initialization
 Form1 := TForm1.Create(nil);
 Form1.Show;
finlization
 Form1.Free;

Никакого эффекта.

initialization
 Form1 := TForm1.Create(Application.MainForm);
 Form1.Show;

Никакого эффекта + круто вешает все при выхоже из приложения.


 
Kolan ©   (2007-07-08 15:40) [3]

Если сделать так:


 
Kolan ©   (2007-07-08 15:40) [4]

Если сделать так:
{initialization
 Form1 := TForm1.Create(Application);
 Form1.Show;  }

То все нормально появляется.


 
Юрий Зотов ©   (2007-07-08 15:43) [5]

> Kolan ©   (08.07.07 15:40) [4]

Откуда (из какого места кода) вызывается LoadPackage?


 
Kolan ©   (2007-07-08 15:45) [6]

Гл. форма:

procedure TCustomColleagueMainForm.FormCreate(Sender: TObject);
begin
 ReportMemoryLeaksOnShutdown := True;
 LoadColleaguesLoader;
 MenuLoader := TMenuInsertColleague.Create(MainMenu1);
 Application.ProcessMessages;
end;


В LoadColleaguesLoader; загружаются пакеты. Если надо подробнее при веду всю цепочку&#133


 
Юрий Зотов ©   (2007-07-08 15:48) [7]

И код DPR дайте глянуть


 
Kolan ©   (2007-07-08 16:55) [8]

> И код DPR дайте глянуть


Гл. форма:
program KPluginMainForm;

uses
 Forms,
 KPluginMainFormUnit in "KPluginMainFormUnit.pas" {CustomColleagueMainForm},
 KColleaguesInitializator in "KColleaguesInitializator.pas",
 KMainMenuColleague in "KMainMenuColleague.pas";

{$R *.res}

begin
 Application.Initialize;
 
 Application.CreateForm(TCustomColleagueMainForm, CustomColleagueMainForm);

 Application.Run;

end.


Пакет с формой:

package KTestColleagueSender;

{$R *.res}
{$ALIGN 8}
{$ASSERTIONS ON}
{$BOOLEVAL OFF}
{$DEBUGINFO ON}
{$EXTENDEDSYNTAX ON}
{$IMPORTEDDATA ON}
{$IOCHECKS ON}
{$LOCALSYMBOLS ON}
{$LONGSTRINGS ON}
{$OPENSTRINGS ON}
{$OPTIMIZATION ON}
{$OVERFLOWCHECKS OFF}
{$RANGECHECKS OFF}
{$REFERENCEINFO ON}
{$SAFEDIVIDE OFF}
{$STACKFRAMES OFF}
{$TYPEDADDRESS OFF}
{$VARSTRINGCHECKS ON}
{$WRITEABLECONST OFF}
{$MINENUMSIZE 1}
{$IMAGEBASE $400000}
{$RUNONLY}
{$IMPLICITBUILD OFF}

requires
 rtl,
 KMediator,
 vcl,
 KFrameworkCommands;

contains
 KTestColleagueSenderForm in "KTestColleagueSenderForm.pas" {Form1};

end.


ЗЫ
 Извените что долго, в клиенте страница не обновлялась оказывается :(


 
Юрий Зотов ©   (2007-07-08 17:26) [9]

> Kolan ©   (08.07.07 16:55) [8]

1. Зачем в DPR вот эти 2 строчки:

uses
 ...
KColleaguesInitializator in "KColleaguesInitializator.pas",
KMainMenuColleague in "KMainMenuColleague.pas";

Попробуйте их убрать.

2. Перекрывались ли в главной форме конструктор, CreateParams, CreateWnd и WndProc. Если да - давайте код.


 
Kolan ©   (2007-07-08 17:42) [10]

> Зачем в DPR вот эти 2 строчки:

Компилятор видимо добавил. Я не ковырял DPR.

Попробуйте их убрать.

Убрал — тоже самое, нет в таск баре. Я их наззад верну, зачем то их же добалили.


> Перекрывались ли в главной форме конструктор, CreateParams,
> CreateWnd и WndProc. Если да — давайте код.

Нет, нет. :

TCustomColleagueMainForm = class(TForm)
   BitBtn1: TBitBtn;
   MainMenu1: TMainMenu;
   N1: TMenuItem;
   asdsads: TMenuItem;
   BitBtn2: TBitBtn;
   BitBtn3: TBitBtn;
   BitBtn4: TBitBtn;
   BitBtn5: TBitBtn;
   XPManifest1: TXPManifest;
   procedure BitBtn6Click(Sender: TObject);
   procedure BitBtn5Click(Sender: TObject);
   procedure BitBtn4Click(Sender: TObject);
   procedure BitBtn3Click(Sender: TObject);
   procedure BitBtn2Click(Sender: TObject);
   procedure FormDestroy(Sender: TObject);
   procedure BitBtn1Click(Sender: TObject);
   procedure FormCreate(Sender: TObject);
 private
   { Private declarations }
 public
   { Public declarations }
   MenuLoader: TMenuInsertColleague;
   FEdit: TEdit;
   procedure MyEditKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);

 end;


 
Юрий Зотов ©   (2007-07-08 17:55) [11]

> Kolan ©   (08.07.07 17:42) [10]

А без загрузки пакет - все ок?


 
Kolan ©   (2007-07-08 18:14) [12]

> [11] Юрий Зотов ©   (08.07.07 17:55)
> > Kolan ©   (08.07.07 17:42) [10]
>
> А без загрузки пакет — все ок?

В смысле если его вообще не загружать?
-Да, удаляю его из папки — все отлично&#133


 
Kolan ©   (2007-07-08 18:15) [13]


> —Да, удаляю его из папки — все отлично…

Кладу назад, опять не показывается :(.


 
Юрий Зотов ©   (2007-07-08 18:17) [14]

Пробуем дальше. Уберите в пакете строчку Form1.Show. Если все станет ОК, то причина, видимо, в том, что эта форма показывается раньше главной.


 
Kolan ©   (2007-07-08 18:30) [15]

> Уберите в пакете строчку Form1.Show.

Да — нормально.

А с Form1.ShowModal; Сначала показывается форма из пакета и все. Как только её закрышаешь появляется главная и на таск баре тоже появляется.

Варианты лечения? У меня есть, но он связан с конкретной программой&#133


 
Юрий Зотов ©   (2007-07-08 19:05) [16]

> Kolan ©   (08.07.07 18:30) [15]

> Варианты лечения?

Вытекают из причины. Form1.Show (или ShowModal, если нужен модальный показ) надо вызывать не при загрузке пакета, а уже ПОСЛЕ того, как на экране появится главная форма. То есть, из какого-то метода ГЛАВНОЙ формы (например, из ее обработчика OnShow).


 
Kolan ©   (2007-07-08 19:14) [17]

> То есть, из какого-то метода ГЛАВНОЙ формы (например, из
> ее обработчика OnShow).

Ну ясно, я так и предпологал. Сделаю так. Гл. форма просто как-бы будет говорить пакету: «Уже можно паказывать формы», а пакет пусть хочет показывает, хочет нет — его проблеммы&#133


 
Kolan ©   (2007-07-08 19:14) [18]

Благодарю за помощь. :)


 
Юрий Зотов ©   (2007-07-08 19:19) [19]

> Kolan ©   (08.07.07 19:14) [17]

Можно и так. Это зависит от логики организации взамодействия программы и плагина. Один вариант - плагин предоставляет необходимые ресурсы, а управляет ими программа. Другой вариант - программа только грузит плагин, а далее он выполняет свою задачу самостоятельно.


 
engine ©   (2007-07-08 19:26) [20]

> [19] Юрий Зотов ©   (08.07.07 19:19)
> Другой вариант - программа только грузит плагин, а далее
> он выполняет свою задачу самостоятельно.

Тогда в его случае, пакеты грузить не в обработчике OnCreate, а в OnShow например


 
Kolan ©   (2007-07-08 21:40) [21]

> Юрий Зотов ©   (08.07.07 19:19)

Ясно — буду думать.


 
Kolan ©   (2007-07-08 21:52) [22]

Сделал самым простым способом. Думаю он не плох:

procedure TCustomColleagueMainForm.FormShow(Sender: TObject);
begin
 if FIsCreation then
 begin
   LoadColleaguesLoader;
   MenuLoader := TMenuInsertColleague.Create(MainMenu1);
   FIsCreation := False;
 end;
end;


Зато каждому «пакету» не нужно знать о проблемах создания&#133



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

Форум: "Начинающим";
Текущий архив: 2007.08.05;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.51 MB
Время: 0.042 c
2-1183796262
Kolan
2007-07-07 12:17
2007.08.05
Логика дин. добавления пунктов меню.


11-1166375143
Vladimir Kladov
2006-12-17 20:05
2007.08.05
Версия 2.49


2-1184119709
Biggelow
2007-07-11 06:08
2007.08.05
RC4


2-1184063392
AZIZE
2007-07-10 14:29
2007.08.05
Вопрос на засыпку


15-1183981766
Pashok
2007-07-09 15:49
2007.08.05
заблокирован DVD привод (Lite-on DVDRW SHM-165 P6S)





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский