Конференция "Начинающим" » Создание формы.
 
  • Drowsy © (31.05.18 22:16) [0]
    Программа на 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

 
Конференция "Начинающим" » Создание формы.
Есть новые Нет новых   [134427   +34][b:0][p:0.003]