http://www.delphi.co.kr/zboard/view.php?id=tips&page=1&sn1=&divpage=1&sn=off&ss=on&sc=on&keyword=스킨&select_arrange=headnum&desc=asc&no=1297
소스
http://www.delphi.co.kr/zboard/view.php?id=component&page=1&sn1=&divpage=1&sn=on&ss=on&sc=on&keyword=문상철&select_arrange=headnum&desc=asc&no=1176
이소스를 따라서 하느데요
저소스만 실행시키면 잘되는데 제가 만든건 안되네요
아무래도 Form설정에서 다른게 있는거 같은데 폼위에 그림이 나와야 되는데..
소스에 자세한 주석이나 폼설정값같은것좀 알려주세요.
복많이 받으세요^^
제가 만들어보니 잘 되더군요...어디서 에러가 난건지 실행은 되는데 구현이 안되는건지 모르겠지만 소스에 주석이라도 달아드리겠습니다.
아 그리고 이 소스 조금 불안정하다고 해야하나? 아무튼 몇가지 문제가 있습니다. 먼저 창의 헤더부분을 어디든지 클릭하면 종료가 되버리고, 종료버튼을 눌러도 창을 움직여버리면 종료가 안됩니다.
그건 간단히 수정하실수 있을겁니다.
procedure TForm1.SkinForm;
var
FormHeight : Integer;
begin
//화면을 Image4의 이미지로 가득 채웁니다.
StretchBlt( Form1.Canvas.Handle, 0,0, Form1.Width,
Form1.Height ,Form1.Image4.Canvas.Handle,0,0,128 ,1 ,SRCCOPY) ;
FormHeight := Form1.FormHeight;
//폼의 헤더부분을 Image1의 이미지로 그린다.
StretchBlt( Form1.Canvas.Handle,0,0, Form1.Width ,
FormHeight, Form1.Image1.Canvas.Handle,0,0,
Form1.Image1.Width-50, FormHeight, SRCCOPY);
//종료버튼달기
BitBlt( Form1.Canvas.Handle, xBtnLeft,xBtnTop,xBtnWidth,xBtnHeight, Form1.Image3.Canvas.Handle,
5, 32, SRCCOPY);
end;
procedure TForm1.FormCreate(Sender: TObject);
var
Rgn : HRGN ;
begin
image2.width := Form1.Width;
//폼의 사각을 둥글게 만든다.
Rgn := CreateRoundRectRgn(0, 0, Form1.Width , Form1.Height, 30, 30);
Rgn := SetWindowRgn( Form1.Handle , Rgn, True);
bMouseDown := False;
Form1.FormHeight := Image1.Height div 3;
//종료버튼의 위치잡기
xBtnLeft := Form1.Width - 20;
xBtnTop := 3;
xBtnWidth := 10;
xBtnHeight := 12;
end;
procedure TForm1.FormMouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
bMouseDown := True;
//폼에 마우스버튼이 눌렸을때 종료버튼의 위치라면 종료버튼의 이미지를 눌렀을때의 이미지로 바꿉니다.
if (X >= xBtnLeft) and (X <= (xBtnLeft + xBtnWidth)) then begin
if (Y >= xBtnTop) and (Y <= (xBtnTop + xBtnHeight)) then begin
BitBlt( Form1.Canvas.Handle, xBtnLeft,xBtnTop,xBtnWidth,xBtnHeight, Form1.Image3.Canvas.Handle,
5, 42, SRCCOPY);
sleep(200);
end;
end;
end;
procedure TForm1.FormMouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
var
MovingX : Integer;
MovingY : Integer;
begin
//마우스버튼이 눌린상태이고 마우스포인트의 Y좌표가 헤더부분이면 창을 움직입니다.
if bMouseDown then begin
if Y <= FormHeight then begin
ReleaseCapture;
DefWindowProc(Handle, WM_NCLBUTTONDOWN, HTCAPTION, 0);
end;
end;
end;
procedure TForm1.FormMouseUp(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
//마우스포인트의 위치가 종료버튼위라면 종료합니다
bMouseDown := False;
if (Y >= xBtnTop) and (Y <= (xBtnTop + xBtnHeight)) then begin
close;
end;
end;
procedure TForm1.FormPaint(Sender: TObject);
begin
SkinForm;
end;
end.