1. 2011. 4. 21. 06:31 Tutorials/IDE]Delphi 7.2
창에 아래와 같이 타이머를 추가 해두고, AlphaBlendTrue , AlphaBlendValue 를 조절 합니다.


타이머 인터벌 값을 바꾸어 주어야 합니다.
기본 1000 이며 100 혹은 10 으로 바꾸어주면 부드럽게 동작 합니다.



폼 클래스 priavte 에 등록 합니다.
type
  TForm1 = class(TForm)
    Timer1: TTimer;
    procedure Timer1Timer(Sender: TObject);
  private
    { Private declarations }
    procedure WMSysCommand(var Message: TWMSysCommand); message WM_SYSCOMMAND;
  public
    { Public declarations }
  end;



사용할 전역 변수, 반투명 최대 최소치 값을 지정 합니다.
폼 생성시 알파값 조정이 번거롭다면, Self.AlphaBlendValue = AlphaMax; 와 같은 형태를 사용 하십시오.
var
  Form1: TForm1;
  AlphaTime: Cardinal;
  alphaDelay: Cardinal=1000;//투명해지는데 걸릴 시간 밀리초(ms)

const
  AlphaMax = 223;
  AlphaMin = 127;
 
implementation

함수를 코딩 합니다, 처리 함수가 좀 복잡함으로, 추가 설명은 생략 하도록 하겠습니다.
쓸 기능은 모두 갖추어 두어 코드에 바로 적용 하면 됩니다.

procedure TForm1.WMSysCommand(var Message: TWMSysCommand);begin
  if ( Message.CmdType = $F012 ) or
     ( Message.CmdType >= $F000 ) and ( Message.CmdType <= $F008 ) then// F001 F003 F004 F005 F008
  begin
    AlphaTime:=GetTickCount()+( alphaDelay*((Self.AlphaBlendValue-127) ) div 96);
    Timer1.Tag:=0;
    Timer1.Enabled:=True;
  inherited;
    AlphaTime:=GetTickCount()+( alphaDelay*((223-Self.AlphaBlendValue) ) div 96);
    Timer1.Tag:=1;
    Timer1.Enabled:=True;
  end
  else  inherited;
end;
{ Timer1.Tag 값에 따라 이벤트가 다릅니다!
  Timer1.Tag = 0 서서히 반투명 적용
  Timer1.Tag = 1 서서히 반투명 해제
  Timer1.Tag = 2 서서히 숨김
  3 번은 Self.Show 후에 써야 합니다 ^^
  Timer1.Tag = 3 서서히 보임
}
procedure TForm1.Timer1Timer(Sender: TObject);
label retn;
var nowTime: Cardinal;begin
  nowTime:=GetTickCount();
  if nowTime<AlphaTime then begin
    if          TTimer(Sender).Tag = 0 then begin
      Self.AlphaBlendValue:=(127+( (AlphaTime-nowTime) *96 )div alphaDelay);
    end else if TTimer(Sender).Tag = 1 then begin
      Self.AlphaBlendValue:=(223-( (AlphaTime-nowTime) *96 )div alphaDelay);
    end else if TTimer(Sender).Tag = 2 then begin
      Self.AlphaBlendValue:=(    ( (AlphaTime-nowTime) *223 )div alphaDelay);
    end else if TTimer(Sender).Tag = 3 then begin
      Self.AlphaBlendValue:=(223-( (AlphaTime-nowTime) *223 )div alphaDelay);
    end;
  end else begin
    if          TTimer(Sender).Tag = 0 then begin
      Self.AlphaBlendValue:=127;
    end else if TTimer(Sender).Tag = 1 then begin
      Self.AlphaBlendValue:=223;
    end else if TTimer(Sender).Tag = 2 then begin
      Self.AlphaBlendValue:=0;      Self.Hide;
    end else if TTimer(Sender).Tag = 3 then begin
      Self.AlphaBlendValue:=223;
    end;
    goto retn;
  end;
  Exit;
retn:TTimer(Sender).Enabled:=False
end;
Posted by Nightly Luna
,
® © Tanny Tales
/ rss