unit1.pas 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149
  1. unit Unit1;
  2. {$mode objfpc}{$H+}
  3. interface
  4. uses
  5. Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, ExtCtrls,
  6. StdCtrls, BGRAGraphicControl, BGRABitmap, BGRABitmapTypes, BCFilters, Spin, BCEffect;
  7. type
  8. { TForm1 }
  9. TForm1 = class(TForm)
  10. bgImage: TBGRAGraphicControl;
  11. cbFadingMode: TComboBox;
  12. Label1: TLabel;
  13. Label2: TLabel;
  14. Label3: TLabel;
  15. Label4: TLabel;
  16. seFadingStep: TSpinEdit;
  17. seTimerInterval: TSpinEdit;
  18. seDuration: TSpinEdit;
  19. Timer1: TTimer;
  20. procedure bgImageRedraw(Sender: TObject; Bitmap: TBGRABitmap);
  21. procedure cbFadingModeChange(Sender: TObject);
  22. procedure FormCloseQuery(Sender: TObject; var CanClose: boolean);
  23. procedure FormCreate(Sender: TObject);
  24. procedure FormDestroy(Sender: TObject);
  25. procedure seDurationChange(Sender: TObject);
  26. procedure seFadingStepChange(Sender: TObject);
  27. procedure seTimerIntervalChange(Sender: TObject);
  28. procedure Timer1Timer(Sender: TObject);
  29. private
  30. { private declarations }
  31. public
  32. { public declarations }
  33. Fade: TFading;
  34. {$ifdef Windows}
  35. FadeForm: TFading;
  36. {$endif}
  37. Image: TBGRABitmap;
  38. end;
  39. var
  40. Form1: TForm1;
  41. implementation
  42. {$R *.lfm}
  43. { TForm1 }
  44. procedure TForm1.bgImageRedraw(Sender: TObject; Bitmap: TBGRABitmap);
  45. begin
  46. // set black background
  47. Bitmap.Fill(BGRABlack);
  48. // draw image with fading alpha
  49. Bitmap.BlendImageOver(0, 0, Image, boLinearBlend, Fade.Alpha);
  50. end;
  51. procedure TForm1.cbFadingModeChange(Sender: TObject);
  52. begin
  53. // set fading mode
  54. Fade.Mode := StrToTFadingMode(cbFadingMode.Caption);
  55. // reset
  56. Fade.Reset;
  57. end;
  58. procedure TForm1.FormCloseQuery(Sender: TObject; var CanClose: boolean);
  59. begin
  60. {$ifdef Windows}
  61. if (FadeForm.Alpha > 0) then
  62. begin
  63. FadeForm.Mode := fmFadeOut;
  64. CanClose := False;
  65. end
  66. else
  67. CanClose := True;
  68. {$endif}
  69. end;
  70. procedure TForm1.FormCreate(Sender: TObject);
  71. begin
  72. // add items to combo box
  73. FadingModeStrList(cbFadingMode.Items);
  74. // load step from spin edit
  75. Fade.Step := seFadingStep.Value;
  76. // load interval from spin edit
  77. Timer1.Interval := seTimerInterval.Value;
  78. // create test image
  79. Image := TBGRABitmap.Create(bgImage.Width, bgImage.Height);
  80. NoiseBWA(Image);
  81. // fade form Windows
  82. {$ifdef Windows}
  83. Self.DoubleBuffered := True;
  84. Self.AlphaBlend := True;
  85. Self.AlphaBlendValue := 0;
  86. FadeForm.Mode := fmFadeIn;
  87. FadeForm.Duration := 300;
  88. {$endif}
  89. end;
  90. procedure TForm1.FormDestroy(Sender: TObject);
  91. begin
  92. // free test image
  93. Image.Free;
  94. end;
  95. procedure TForm1.seDurationChange(Sender: TObject);
  96. begin
  97. Fade.Duration := seDuration.Value;
  98. end;
  99. procedure TForm1.seFadingStepChange(Sender: TObject);
  100. begin
  101. // set fading step
  102. Fade.Step := seFadingStep.Value;
  103. end;
  104. procedure TForm1.seTimerIntervalChange(Sender: TObject);
  105. begin
  106. // change timer interval
  107. Timer1.Interval := seTimerInterval.Value;
  108. end;
  109. procedure TForm1.Timer1Timer(Sender: TObject);
  110. begin
  111. Timer1.Enabled:= false; //avoid freezing application
  112. { calculate fading // display alpha }
  113. Label3.Caption := concat('FadingAlpha: ', IntToStr(Fade.Execute));
  114. // update bitmap
  115. bgImage.RedrawBitmap;
  116. {$ifdef Windows}
  117. if FadeForm.Mode <> fmSuspended then
  118. Self.AlphaBlendValue := FadeForm.Execute;
  119. if (FadeForm.Mode = fmSuspended) and (FadeForm.Alpha = 0) then
  120. Close;
  121. {$endif}
  122. Timer1.Enabled:= true;
  123. end;
  124. end.