Мастера DELPHI, Delphi programming community Рейтинг@Mail.ru Титульная страница Поиск, карта сайта Написать письмо 
| Новости |
Новости сайта
Поиск |
Поиск по лучшим сайтам о Delphi
FAQ |
Огромная база часто задаваемых вопросов и, конечно же, ответы к ним ;)
Статьи |
Подборка статей на самые разные темы. Все о DELPHI
Книги |
Новинки книжного рынка
Новости VCL
Обзор свежих компонент со всего мира, по-русски!
|
| Форумы
Здесь вы можете задать свой вопрос и наверняка получите ответ
| ЧАТ |
Место для общения :)
Орешник
Коллекция курьезных вопросов из форумов
Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / rsdn.org

 
Чтобы не потерять эту дискуссию, сделайте закладку « предыдущая ветвь | форум | следующая ветвь »

Создание формы.


Drowsy ©   (31.05.18 22:16

Программа на Delphi 2010.  На главной форме уже много разных компонент из стандартной палитры. В дизайнере создал события onCreate и onActivate для главной формы программы. При запуске программы, при создании главной формы Application.CreateForm (TfmMain, fmMain) вызывается  onActivate , а потом onCreate!!


Игорь Шевченко ©   (01.06.18 08:32[1]

Вопрос-то в чем ?


Drowsy ©   (01.06.18 10:22[2]

Почему onActivate вызывается раньше onCreate?


KSergey ©   (01.06.18 11:37[3]

чета я не верю
Может onCreate к другому компоненту привязан, не к форме? или не к той форме вовсе, от которой onActivate смотрим?
хотя и в этом случае он до onActivate сработает


Drowsy ©   (01.06.18 11:49[4]

Я уже и пересоздавал события несколько раз, и переименовывал. И Sender  проверял - эта форма.


Drowsy ©   (01.06.18 13:16[5]

Повесил свойства onCreate и onActivate на кнопки. Вызываются правильные процедуры AFormCreate и AFormActivate.
А при создании формы AFormActivate а потом AFormCreate.
Не понимаю почему.


procedure TfrmMain.Button9Click(Sender: TObject);
begin
  if Assigned(onCreate) then
    OnCreate(nil); //-> AFormCreate
end;

procedure TfrmMain.Button10Click(Sender: TObject);
begin
  if Assigned(onActivate) then
    onActivate(nil);  //-> AFormActivate
end;


Drowsy ©   (01.06.18 16:38[6]

Новые формы создаются с нормальными вызовами (onCreate -> onActivate) Что не так я сотворил с этой формой не могу понять.


Drowsy ©   (01.06.18 16:43[7]

По исходникам onActivate вообще не должен вызываться при создании формы, а он вызывается, да ещё и раньше onCreate.


Германн ©   (02.06.18 02:05[8]

2 Drowsy.
Для анализа этой ситуации необходимо использовать отладчик.
На всякий случай добавлю, что точки останова программы (breakpoints) можно ставить в том числе и в файле проекта (dpr).


blackman ©   (02.06.18 08:50[9]

Удалено модератором
Примечание: Создание пустых сообщений


Drowsy ©   (04.06.18 14:01[10]

Отладчиком
   Application.CreateForm(TfrmMain, frmMain);
вызывает
  onActivate->(по F7)onCreate
Не могу найти причину.


Drowsy ©   (04.06.18 14:43[11]

Как-то через CPU или Stack нужно искать где вызывается FormActivate? Или как?


Leonid Troyanovsky ©   (05.06.18 09:09[12]


> Drowsy ©   (01.06.18 16:38) [6]

> Что не так я сотворил с этой формой не могу понять.

Попробуй переопределить форме метод

function TfrmMain.HandleCreateException: Boolean; // override;
begin
  Result := False;
end;

Ну, или текст dfm - в студию.

--
Regards, LVT.


Leonid Troyanovsky ©   (05.06.18 09:14[13]


> Drowsy ©   (04.06.18 14:43) [11]

>  Или как?

Отлаживать надо вместе с Forms.pas
Или как ее сейчас там зовут.

--
Regards, LVT.


Плохиш ©   (05.06.18 11:08[14]


> Ну, или текст dfm - в студию.

И конструктор формы тоже желательно, может чудеса все в нём.


Drowsy ©   (06.06.18 14:26[15]

Спасибо за советы.
Отладчиком (включая Forms.pas) выяснить причину мне не удалось, тяма не хватило.
Опытным путём выяснил, что дело в TCoolBar и компонентах TShell...
Ситуация топика возникает, если TShellComboBox добавить  контролом TCoolBand-а


unit mainunit;

interface

uses
 Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
 Dialogs, Menus,
 ComCtrls, ShellCtrls,
 ExtCtrls, StdCtrls,
 ToolWin,
 CommCtrl
 ;

type
 TfrmMain = class(TForm)
   cbExplorer: TCoolBar;
   ShellComboBox1: TShellComboBox;
   Panel1: TPanel;
   ShellComboBox2: TShellComboBox;
   ShellComboBox3: TShellComboBox;
   procedure FormActivate(Sender: TObject);
   procedure FormCreate(Sender: TObject);
end;

var
 frmMain: TfrmMain;

implementation
{$R *.dfm}

{ TfrmMain }

procedure TfrmMain.FormActivate(Sender: TObject);
begin
//
end;

procedure TfrmMain.FormCreate(Sender: TObject);
begin
//
end;

end.



object frmMain: TfrmMain
 Left = 23
 Top = 163
 ClientHeight = 783
 ClientWidth = 1125
 Color = clBtnFace
 Font.Charset = DEFAULT_CHARSET
 Font.Color = clWindowText
 Font.Height = -13
 Font.Name = 'Tahoma'
 Font.Style = [fsBold]
 OldCreateOrder = True
 Position = poDesigned
 OnActivate = FormActivate
 OnCreate = FormCreate
 PixelsPerInch = 96
 TextHeight = 16
 object cbExplorer: TCoolBar
   Left = 233
   Top = 160
   Width = 579
   Height = 407
   Align = alNone
   Bands = <
     item
       ImageIndex = -1
       Width = 573
     end
     item
       Control = Panel1
       ImageIndex = -1
       Width = 573
     end
     item
       Control = ShellComboBox3
       ImageIndex = -1
       Width = 573
     end>
   object Panel1: TPanel
     Left = 12
     Top = 27
     Width = 559
     Height = 25
     Caption = 'Panel1'
     TabOrder = 0
     object ShellComboBox2: TShellComboBox
       Left = 208
       Top = 0
       Width = 145
       Height = 25
       Root = 'rfDesktop'
       UseShellImages = True
       TabOrder = 0
     end
   end
   object ShellComboBox3: TShellComboBox
     Left = 12
     Top = 54
     Width = 559
     Height = 25
     Root = 'rfDesktop'
     UseShellImages = True
     TabOrder = 1
   end
 end
 object ShellComboBox1: TShellComboBox
   Left = 9
   Top = 0
   Width = 562
   Height = 25
   Root = 'rfDesktop'
   UseShellImages = True
   TabOrder = 1
 end
end


версия для печати

Написать ответ

Ваше имя (регистрация  E-mail 







Разрешается использование тегов форматирования текста:
<b>жирный</b> <i>наклонный</i> <u>подчеркнутый</u>,
а для выделения текста программ, используйте <code> ... </code>
и не забывайте закрывать теги! </b></i></u></code> :)


Наверх

  Рейтинг@Mail.ru     Титульная страница Поиск, карта сайта Написать письмо