본문 바로가기

카테고리 없음

[일반/컴포넌트] 윈도우즈 종료와 같은 그늘진 화면 만들기

반응형
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  StdCtrls;

type
  TForm1 = class(TForm)
    Button1: TButton;
    Edit1: TEdit; // 그냥 올려놓은 것임
    Memo1: TMemo; // 그냥 올려놓은 것임
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation
{$R *.DFM}

procedure TForm1.Button1Click(Sender: TObject);
var
  r: Trect;
  ScreenCanvas: TCanvas;
  bmp: TBitmap;
  i,k, offset: Integer;
begin
  r := BoundsRect;
  ScreenCanvas := TCanvas.Create;
  try
    ScreenCanvas.Handle := GetDC( 0 );
    try
      bmp:= TBitmap.Create;
      try
        with bmp do
        begin
          width := 8;
          height:= 8;
          monochrome := true;
          offset := 0;
          for i := 0 to 7 do
          begin
            for k:= 0 to 7 do
              if ((k+offset) mod 4) <> 0 then
                canvas.Pixels[k,i] := clWhite
              else
                canvas.Pixels[k,i] := clBlack;
            Inc(offset)
          end;
        end;

        with ScreenCanvas do
        begin
          Brush.Color := clGray;
          Brush.Bitmap := bmp;
          SetBkColor(handle, RGB(255,255,255));
          PatBlt(handle, r.left, r.top, r.right-r.left, r.bottom-r.top, $A000C9);
        end;
      finally
        bmp.free;
      end;
    finally
      ReleaseDC(0, ScreenCanvas.Handle);
      ScreenCanvas.Handle := 0;
    end;
  finally
    ScreenCanvas.Free;
  end;

  ShowMessage('프로그램을 종료합니다.');
  PostMessage(Handle, WM_CLOSE, 0, 0); // Close;
end;

end.
반응형