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.   protected
  20.     procedure Notification(AComponent: TComponent;
  21.       Operation: TOperation); override;
  22.   public
  23.     procedure ActiveFormChange (Sender: TObject);
  24.     procedure FillFormsList;
  25.   end;
  26. var
  27.   MainForm: TMainForm;
  28. implementation
  29. {$R *.DFM}
  30. uses
  31.   SecondF;
  32. procedure TMainForm.FormCreate(Sender: TObject);
  33. begin
  34.   FillFormsList;
  35.   // set the secondary forms counter to 0
  36.   nForms := 0;
  37.   // activate an event handler of the screen object
  38.   Screen.OnActiveFormChange := ActiveFormChange;
  39. end;
  40. procedure TMainForm.Notification(AComponent: TComponent;
  41.   Operation: TOperation);
  42. begin
  43.   inherited Notification(AComponent, Operation);
  44.   if (Operation = opRemove) and Showing
  45.       and (AComponent is TForm) then
  46.     FillFormsList;
  47. end;
  48. procedure TMainForm.FillFormsList;
  49. var
  50.   I: Integer;
  51. begin
  52.   if assigned (FormsListBox) then
  53.   begin
  54.     FormsLabel.Caption := 'Forms: ' + IntToStr (Screen.FormCount);
  55.     FormsListBox.Clear;
  56.     // write class name and form title to the list box
  57.     for I := 0 to Screen.FormCount - 1 do
  58.       FormsListBox.Items.Add (Screen.Forms[I].ClassName +
  59.         ' - ' + Screen.Forms[I].Caption);
  60.     ActiveLabel.Caption := 'Active Form : ' +
  61.       Screen.ActiveForm.Caption;
  62.   end;
  63. end;
  64. procedure TMainForm.ActiveFormChange (Sender: TObject);
  65. begin
  66.   FillFormsList;
  67. end;
  68. procedure TMainForm.NewButtonClick(Sender: TObject);
  69. begin
  70.   // create a new form, set its caption, and run it.
  71.   with TSecondForm.Create(Application) do begin
  72.     Inc (nForms);
  73.     Caption := 'Second ' + IntToStr (nForms);
  74.     Show;
  75.   end;
  76. end;
  77. procedure TMainForm.FormClose(Sender: TObject;
  78.   var Action: TCloseAction);
  79. begin
  80.   // VERY IMPORTANT! disable the event handler to avoid a GPFault
  81.   // Screen.OnActiveFormChange := nil;
  82. end;
  83. procedure TMainForm.FormsListBoxClick(Sender: TObject);
  84. begin
  85.   // activate the form the user has clicked onto
  86.   Screen.Forms [FormsListBox.ItemIndex].BringToFront;
  87. end;
  88. end.