17 Ocak 2025
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.