Search code examples
delphivcldfm

How to do bulk -transformation of form to frame- in Delphi?


I have a form with aprox with 200 visual components on it, with a lot of events assigned, and I need to change it now to a frame.I don't have enough time to copy all the components,re-arrange all the visual components and re-assign all the events, align, etc. So, I've copied the pas and the dfm, opened and start to edit them in a text editor(change TForm to Tframe, etc) but it seems that this don't get the expected results.

Has anyone an idea on how to solve this?


Solution

  • Observe the differences of a Form and a Frame in your project.

    First the project.dpr source:

    program Project1;
    
    uses
      Forms,
      Unit1 in 'Unit1.pas' {Form1},
      Unit3 in 'Unit3.pas' {Frame3: TFrame};
    
    {$R *.res}
    
    begin
      Application.Initialize;
      Application.MainFormOnTaskbar := True;
      Application.CreateForm(TForm1, Form1);
      Application.Run;
    end.
    

    Differences:

    1. Frame as a more elaborated comment to tell the IDE which designer it should use
    2. Form can be autocreate

    Dfm files:

    object Form1: TForm1
      Left = 0
      Top = 0
      Caption = 'Form1'
      ClientHeight = 348
      ClientWidth = 643
      Color = clBtnFace
      Font.Charset = DEFAULT_CHARSET
      Font.Color = clWindowText
      Font.Height = -11
      Font.Name = 'Tahoma'
      Font.Style = []
      OldCreateOrder = False
      PixelsPerInch = 96
      TextHeight = 13
    end
    

    and

    object Frame3: TFrame3
      Left = 0
      Top = 0
      Width = 320
      Height = 240
      TabOrder = 0
    end
    

    Frame does not have these properties:

    • Caption
    • ClientHeight
    • ClientWidth
    • Color
    • Font.Charset
    • Font.Color
    • Font.Height
    • Font.Name
    • Font.Style
    • OldCreateOrder
    • PixelsPerInch
    • TextHeight

    Sidenote: Frame does not have these events:

    • OnCreate
    • OnDestroy

    A Frame has not global variable like this:

    var
      Form1: TForm1;
    

    And a Frame descends from TFrame, whereas a form descends from TForm.

    Note: with Frame/Form inheritence, your steps become a bit longer.

    --jeroen