Komunikat + AlphaBlend

0

Jak zastosować AlphaBlend dla komunikatu wywołanego np. procedurą ShowMessage lub MessageBox ?

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 ;-)

1 użytkowników online, w tym zalogowanych: 0, gości: 1