Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

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

Tags:

delphi

vcl

dfm

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?

like image 918
RBA Avatar asked Jan 27 '11 09:01

RBA


2 Answers

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

like image 114
Jeroen Wiert Pluimers Avatar answered Oct 05 '22 19:10

Jeroen Wiert Pluimers


TForm will have additional properties and events which TFrame wont have. You need to remove those properties and events manually to change to form to frame.

Be sure to followed these steps;

  1. Change base class type to TFrame i.e., change TForm1 = class(TForm) to TForm1 = class(TFrame).
  2. On the Form, Right click and Select View as Text option.
  3. Remove the properties and events that TFrame doesn't have and then select View as Form option.
  4. Now you should be able to view the form as frame.
like image 21
Bharat Avatar answered Oct 05 '22 17:10

Bharat