-
2011. 4. 21. 06:31 Tutorials/IDE]Delphi 7.2
창에 아래와 같이 타이머를 추가 해두고, AlphaBlend 를 True , AlphaBlendValue 를 조절 합니다.
타이머 인터벌 값을 바꾸어 주어야 합니다.
기본 1000 이며 100 혹은 10 으로 바꾸어주면 부드럽게 동작 합니다.
폼 클래스 priavte 에 등록 합니다.
사용할 전역 변수, 반투명 최대 최소치 값을 지정 합니다.
폼 생성시 알파값 조정이 번거롭다면, Self.AlphaBlendValue = AlphaMax; 와 같은 형태를 사용 하십시오.
함수를 코딩 합니다, 처리 함수가 좀 복잡함으로, 추가 설명은 생략 하도록 하겠습니다.
쓸 기능은 모두 갖추어 두어 코드에 바로 적용 하면 됩니다.
타이머 인터벌 값을 바꾸어 주어야 합니다.
기본 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;
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
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;
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;