26 Temmuz 2024 Yazarı yhackup 0

Delphi ile Formu taşırken Saydam hale nasıl getirebilirim.

How to Make Form Transparent When Moving in Delphi

Source:

unit MainForm;

interface

uses
  Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants,
  System.Classes, Vcl.Graphics,
  Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.Imaging.jpeg, Vcl.ExtCtrls,
  Vcl.StdCtrls;

type
  TForm7 = class(TForm)
    Edit1: TEdit;
    Button1: TButton;
    CheckBox1: TCheckBox;
    Image1: TImage;

    procedure OnMove(var msg: TWMMove); message WM_MOVE;
    procedure OnMouseLeave(var msg: TWMMove); message WM_EXITSIZEMOVE;

  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form7: TForm7;

implementation

{$R *.dfm}
{ TForm7 }

procedure TForm7.OnMouseLeave(var msg: TWMMove);
begin
  // AlphaBlendValue := Byte.MaxValue;
  // AlphaBlend := false;

  // Bıraktığımızda   AlphaBlendValue değerini max yapmalıyız yoksa en son50 de kaldığı için orada kalıyor.
  // Mouse ile taşıma sonrası bıaktığımda, aniden değil de yavaşça belirgin olmasını istedi bugün canım :)


  // Thread ile yapalım yoksa ekran azer bülbüle bağlar..

  // kusura bakmayın yeni bir klavtyeye geçtim de :D

  TThread.CreateAnonymousThread (
  procedure
  var
  x , i :integer;
  begin
    x := AlphaBlendValue;
    i := 50; // taşımada en son 50de bırakıyorduk şimdi 50 den 255e çıkaracağız.

    for I := x to Byte.MaxValue-1 do
      begin
        Sleep(1); // minicikte olsa bir bekleme olmalı.

       // olmadı değil mi  , kimle olmaz dedi el kaldırsın :)
       // thread içersinde görsel elemanlarla haşır neşir olmamak gerekiyor.
       // bu yüzden ana kuyruğa komut atacağız o zamanı gelince kendi işletecek biz ona karışmayacağız.

       TThread.Queue(nil,
       procedure
       begin
            AlphaBlendValue := i;
       end);


        // Deneyelim.

        // olmadı değil mi olmaz, çünkü sleep komutunu da kuyruğa attık o da farkettiyseniz ekranda kasıntı yaptı.

        // böyle daha hoş...

        // Kalın Sağlıcakla...
      end;




  end
  ).Start;



end;

procedure TForm7.OnMove(var msg: TWMMove);
var
  val: Byte;
begin
  val := AlphaBlendValue;
  if val > 50 then
    Dec(val);

  AlphaBlend := true;
  AlphaBlendValue := val;

  // AlphaBlendValue byte olduğundan 0-255 aralığı dışına çıkmamalı !
end;

end.