-
Программа на Delphi 2010. На главной форме уже много разных компонент из стандартной палитры. В дизайнере создал события onCreate и onActivate для главной формы программы. При запуске программы, при создании главной формы Application.CreateForm (TfmMain, fmMain) вызывается onActivate , а потом onCreate!!
-
Игорь Шевченко © (01.06.18 08:32) [1]Вопрос-то в чем ?
-
Почему onActivate вызывается раньше onCreate?
-
чета я не верю
Может onCreate к другому компоненту привязан, не к форме? или не к той форме вовсе, от которой onActivate смотрим?
хотя и в этом случае он до onActivate сработает -
Я уже и пересоздавал события несколько раз, и переименовывал. И Sender проверял - эта форма.
-
Повесил свойства 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;
-
Новые формы создаются с нормальными вызовами (onCreate -> onActivate) Что не так я сотворил с этой формой не могу понять.
-
По исходникам onActivate вообще не должен вызываться при создании формы, а он вызывается, да ещё и раньше onCreate.
-
Германн © (02.06.18 02:05) [8]2 Drowsy.
Для анализа этой ситуации необходимо использовать отладчик.
На всякий случай добавлю, что точки останова программы (breakpoints) можно ставить в том числе и в файле проекта (dpr). -
blackman © (02.06.18 08:50) [9]Удалено модератором
Примечание: Создание пустых сообщений -
Отладчиком
Application.CreateForm(TfrmMain, frmMain);
вызывает
onActivate->(по F7)onCreate
Не могу найти причину. -
Как-то через CPU или Stack нужно искать где вызывается FormActivate? Или как?
-
> Drowsy © (01.06.18 16:38) [6]
> Что не так я сотворил с этой формой не могу понять.
Попробуй переопределить форме метод
function TfrmMain.HandleCreateException: Boolean; // override;
begin
Result := False;
end;
Ну, или текст dfm - в студию.
--
Regards, LVT. -
> Drowsy © (04.06.18 14:43) [11]
> Или как?
Отлаживать надо вместе с Forms.pas
Или как ее сейчас там зовут.
--
Regards, LVT. -
Плохиш © (05.06.18 11:08) [14]
> Ну, или текст dfm - в студию.
И конструктор формы тоже желательно, может чудеса все в нём. -
Спасибо за советы.
Отладчиком (включая 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