Jak zastosować AlphaBlend dla komunikatu wywołanego np. procedurą ShowMessage lub MessageBox ?
0
0
Trzeba wysłać Komunikat AlphaBlend do Wiadomości , problem w tym że nie można Bezpośrednio po wywołaniu MessageBox , więc trzeba np. użyć timera żeby opóźnił wysłanie Komunikatu
(sleep i processMessages nie dadzą opóźnienia:) )
Więc
Wrzuć Na formę Timera;
Ustaw Enabled Timera na False a interval na 1
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ExtCtrls, StdCtrls, Buttons;
type
TForm1 = class(TForm)
Timer1: TTimer;
BitBtn1: TBitBtn;
procedure Timer1Timer(Sender: TObject);
procedure BitBtn1Click(Sender: TObject);
private
{ Private declarations }
function MagicMessage(const MSGText:Pchar; const MSGCaption:Pchar;AlphaBlend:Byte;Flags:integer=0):integer;
public
{ Public declarations }
end;
var
Form1:TForm;
TXTWindowToFind:PChar;
AlphaBlendValue:Byte;
H:HWND;
implementation
{$R *.dfm}
procedure Alpha(Handle: cardinal; Value:Byte);
begin
SetWindowLong(Handle, GWL_EXSTYLE, GetWindowLong(Handle, GWL_EXSTYLE) or WS_EX_LAYERED);
SetLayeredWindowAttributes(Handle, 0, Value, LWA_ALPHA);
end;
function TForm1.MagicMessage(const MSGText:Pchar;const MSGCaption:Pchar;AlphaBlend:Byte;Flags:integer=0):integer;
begin
TXTWindowToFind:=MSGCaption;
AlphaBlendValue:=AlphaBlend;
Timer1.Enabled:=True;
Result :=Application.MessageBox(MSGText,MSGCaption,Flags);
end;
procedure TForm1.Timer1Timer(Sender: TObject);
begin
H:=FindWindow('#32770',TXTWindowToFind);
if H <>0 then
begin
Alpha(H,AlphaBlendValue);
Timer1.Enabled :=False; //Jak znaleziono Okienko wyłacz Timera
end;
end;
procedure TForm1.BitBtn1Click(Sender: TObject);
begin
MagicMessage('to jest Alpha Blend','Alpha blend Komunikat',128,0);
end;
na pewno jest Lepsze rozwiązanie ale to mi do głowy przyszło akurat ;-P
Ogólnie to włączasz timera żeby znalazł okienko o Caption Takim Jak komunikat i jak tylko sie pojawi timer wysyła komunikat o przeźroczystości i sie wyłącza;
Aha tej funkcji uzywasz Identycznie jak normalnego MesssageBoxa;
0
OK!!! Dzięki, działa ;-)