How to do bulk -transformation of form to frame- in Delphi?
Pergunta
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?
Solução
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:
- Frame as a more elaborated comment to tell the IDE which designer it should use
- 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
Outras dicas
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;
- Change base class type to TFrame i.e., change
TForm1 = class(TForm)
toTForm1 = class(TFrame)
. - On the Form, Right click and Select
View as Text
option. - Remove the properties and events that TFrame doesn't have and then select
View as Form
option. - Now you should be able to view the form as frame.
Take time to develop once and for all an IDE expert
doing the bulk operation if there is not any working out of the box (proprietary/open source) and you are done.