ScreenF.pas
上传用户:fh681027
上传日期:2022-07-23
资源大小:1959k
文件大小:2k
源码类别:

Delphi控件源码

开发平台:

Delphi

  1. unit ScreenF;
  2. interface
  3. uses
  4.   SysUtils, Windows, Messages, Classes,
  5.   Graphics, Controls, Forms, Dialogs, StdCtrls;
  6. type
  7.   TMainForm = class(TForm)
  8.     FormsLabel: TLabel;
  9.     FormsListBox: TListBox;
  10.     NewButton: TButton;
  11.     ActiveLabel: TLabel;
  12.     procedure FormCreate(Sender: TObject);
  13.     procedure NewButtonClick(Sender: TObject);
  14.     procedure FormClose(Sender: TObject;
  15.       var Action: TCloseAction);
  16.     procedure FormsListBoxClick(Sender: TObject);
  17.   private
  18.     nForms: Integer;
  19.   public
  20.     procedure FillFormsList (Sender: TObject);
  21.     // handler of a user defined Windows message
  22.     procedure ChildClosed (var Message: TMessage);
  23.       message wm_User;
  24.   end;
  25. var
  26.   MainForm: TMainForm;
  27. implementation
  28. {$R *.DFM}
  29. uses
  30.   SecondF;
  31. procedure TMainForm.FormCreate(Sender: TObject);
  32. begin
  33.   FillFormsList (Self);
  34.   // set the secondary forms counter to 0
  35.   nForms := 0;
  36.   // activate an event handler of the screen object
  37.   Screen.OnActiveFormChange := FillFormsList;
  38. end;
  39. procedure TMainForm.FillFormsList (Sender: TObject);
  40. var
  41.   I: Integer;
  42. begin
  43.   // skip code in destruction phase
  44.   if Assigned (FormsListBox) then
  45.   begin
  46.     FormsLabel.Caption := 'Forms: ' + IntToStr (Screen.FormCount);
  47.     FormsListBox.Clear;
  48.     // write class name and form title to the list box
  49.     for I := 0 to Screen.FormCount - 1 do
  50.       FormsListBox.Items.Add (Screen.Forms[I].ClassName +
  51.         ' - ' + Screen.Forms[I].Caption);
  52.     ActiveLabel.Caption := 'Active Form : ' +
  53.       Screen.ActiveForm.Caption;
  54.   end;
  55. end;
  56. procedure TMainForm.ChildClosed (var Message: TMessage);
  57. begin
  58.   // handler of the user message sent by the secondary form
  59.   FillFormsList (Self);
  60. end;
  61. procedure TMainForm.NewButtonClick(Sender: TObject);
  62. var
  63.   NewForm: TSecondForm;
  64. begin
  65.   {create a new form, set its caption, and run it}
  66.   NewForm := TSecondForm.Create (Self);
  67.   Inc (nForms);
  68.   NewForm.Caption := 'Second ' + IntToStr (nForms);
  69.   NewForm.Show;
  70. end;
  71. procedure TMainForm.FormClose(Sender: TObject;
  72.   var Action: TCloseAction);
  73. begin
  74.   // VERY IMPORTANT! disable the event handler to avoid a GPFault
  75.   // Screen.OnActiveFormChange := nil;
  76. end;
  77. procedure TMainForm.FormsListBoxClick(Sender: TObject);
  78. begin
  79.   // activate the form the user has clicked onto
  80.   Screen.Forms [FormsListBox.ItemIndex].BringToFront;
  81. end;
  82. end.
  83.