폼을 투명하게 하고 라인을 시간에 따라 이동시키면 라인이 이동하기 시작한때로부터 계속 잔상이 남습니다. 잔상을 지우려면 어떻게 해야 하는지요?
폼을 투명하게 하지 않을때는 잔상이 남지 않는데 투명하게 할때 이런 문제가 발생합니다. 잔상을 없애는 방법을 애타게 찾고 있습니다. 도와주세요..꾸벅!~
폼을 투명하게 설정:
procedure TForm1.FormCreate(Sender: TObject);
begin
Form1.Brush.Style := bsClear;
Form1.BorderStyle := bsNone;
end;
라인을 0.1초마다 이동
procedure TForm1.Timer1.Timer(Sender: TObject);
begin
Line.Left:=Line+10;
lb.Caption:=IntToStr(Line.Left);
end;
원하시는게 아래가 맞는지 한번 테스트 해보세요.
빈폼에 버튼 하나와 타이머 하나 올리시고 테스트 하심 됩니다.
그럼~ 항상 즐거운 프로그래밍 하시구요~
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
ExtCtrls, StdCtrls;
type
TForm1 = class(TForm)
Button1: TButton;
lb: TLabel;
Timer1: TTimer;
Line: TPanel;
procedure Timer1Timer(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
procedure FormRepaint;
end;
var
Form1: TForm1;
Line : integer;
implementation
{$R *.DFM}
procedure TForm1.FormRepaint;
var
FullRgn, ClientRgn, ButtonRgn: THandle;
Margin, X, Y: Integer;
begin
Margin := (Width - ClientWidth) div 2;
FullRgn := CreateRectRgn(0, 0, Width, Height);
X := Margin;
Y := Height - ClientHeight - Margin;
ClientRgn := CreateRectRgn(X, Y, X + ClientWidth, Y + ClientHeight);
CombineRgn(FullRgn, FullRgn, ClientRgn, RGN_DIFF);
X := X + Button1.Left;
Y := Y + Button1.Top;
ButtonRgn := CreateRectRgn(X, Y, X + Button1.Width, Y + Button1.Height);
CombineRgn(FullRgn, FullRgn, ButtonRgn, RGN_OR);
SetWindowRgn(Handle, FullRgn, True);
end;
procedure TForm1.Timer1Timer(Sender: TObject);
begin
Button1.Left := Button1.Left + 10;
FormRepaint;
end;
end.