Chapter 10 - Project Screen |
Project Structure
| Screen.dpr |
program Screen;
uses
Forms,
ScreenF in 'ScreenF.pas' ,
SecondF in 'SecondF.pas' ;
begin
Application.CreateForm(TMainForm, MainForm);
Application.CreateForm(TSecondForm, SecondForm);
Application.Run;
end.
| ScreenF.pas |
unit ScreenF;
interface
uses
SysUtils, Windows, Messages, Classes,
Graphics, Controls, Forms, Dialogs, StdCtrls;
type
TMainForm = class(TForm)
FormsLabel: TLabel;
FormsListBox: TListBox;
NewButton: TButton;
ActiveLabel: TLabel;
procedure FormCreate(Sender: TObject);
procedure NewButtonClick(Sender: TObject);
procedure FormClose(Sender: TObject;
var Action: TCloseAction);
procedure FormsListBoxClick(Sender: TObject);
private
nForms: Integer;
public
procedure FillFormsList (Sender: TObject);
procedure ChildClosed (var Message: TMessage);
message wm_User;
end;
var
MainForm: TMainForm;
implementation
uses
SecondF;
procedure TMainForm.FormCreate(Sender: TObject);
begin
FillFormsList (Self);
nForms := 0;
Screen.OnActiveFormChange := FillFormsList;
end;
procedure TMainForm.FillFormsList (Sender: TObject);
var
I: Integer;
begin
if Assigned (FormsListBox) then
begin
FormsLabel.Caption := 'Forms: ' + IntToStr (Screen.FormCount);
FormsListBox.Clear;
for I := 0 to Screen.FormCount - 1 do
FormsListBox.Items.Add (Screen.Forms[I].ClassName +
' - ' + Screen.Forms[I].Caption);
ActiveLabel.Caption := 'Active Form : ' +
Screen.ActiveForm.Caption;
end;
end;
procedure TMainForm.ChildClosed (var Message: TMessage);
begin
FillFormsList (Self);
end;
procedure TMainForm.NewButtonClick(Sender: TObject);
var
NewForm: TSecondForm;
begin
NewForm := TSecondForm.Create (Self);
Inc (nForms);
NewForm.Caption := 'Second ' + IntToStr (nForms);
NewForm.Show;
end;
procedure TMainForm.FormClose(Sender: TObject;
var Action: TCloseAction);
begin
end;
procedure TMainForm.FormsListBoxClick(Sender: TObject);
begin
Screen.Forms [FormsListBox.ItemIndex].BringToFront;
end;
end.
| SecondF.pas |
unit SecondF;
interface
uses
SysUtils, Windows, Messages, Classes,
Graphics, Controls, Forms, Dialogs, StdCtrls;
type
TSecondForm = class(TForm)
CloseButton: TButton;
procedure CloseButtonClick(Sender: TObject);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
procedure FormDestroy(Sender: TObject);
private
public
end;
var
SecondForm: TSecondForm;
implementation
uses
ScreenF;
procedure TSecondForm.CloseButtonClick(Sender: TObject);
begin
Close;
end;
procedure TSecondForm.FormClose(Sender: TObject;
var Action: TCloseAction);
begin
Action := caFree;
end;
procedure TSecondForm.FormDestroy(Sender: TObject);
begin
if not (csDestroying in MainForm.ComponentState) then
PostMessage (MainForm.Handle, wm_User, 0, 0);
end;
end.
| ScreenF.dfm |
object MainForm: TMainForm
Left = 229
Top = 155
Width = 296
Height = 253
BorderWidth = 1
Caption = 'Screen Info'
Color = clBtnFace
ParentFont = True
OldCreateOrder = False
Visible = True
OnClose = FormClose
OnCreate = FormCreate
PixelsPerInch = 96
TextHeight = 13
object FormsLabel: TLabel
Left = 8
Top = 32
Width = 34
Height = 13
Caption = 'Forms: '
end
object ActiveLabel: TLabel
Left = 8
Top = 8
Width = 56
Height = 13
Caption = 'ActiveLabel'
Font.Charset = DEFAULT_CHARSET
Font.Color = clBlack
Font.Height = -11
Font.Name = 'MS Sans Serif'
Font.Style = []
ParentFont = False
end
object FormsListBox: TListBox
Left = 8
Top = 48
Width = 273
Height = 169
ItemHeight = 13
TabOrder = 0
OnClick = FormsListBoxClick
end
object NewButton: TButton
Left = 232
Top = 8
Width = 49
Height = 25
Caption = 'New'
TabOrder = 1
OnClick = NewButtonClick
end
end
| SecondF.dfm |
object SecondForm: TSecondForm
Left = 223
Top = 153
Width = 144
Height = 118
Caption = 'Second'
Color = clBtnFace
Font.Charset = DEFAULT_CHARSET
Font.Color = clBlack
Font.Height = -11
Font.Name = 'MS Sans Serif'
Font.Style = []
OldCreateOrder = True
Position = poDefaultPosOnly
OnClose = FormClose
OnDestroy = FormDestroy
PixelsPerInch = 96
TextHeight = 13
object CloseButton: TButton
Left = 40
Top = 31
Width = 56
Height = 28
Caption = 'Close'
TabOrder = 0
OnClick = CloseButtonClick
end
end
|
|