C++Builder Programming Forum
C++Builder  |  Delphi  |  FireMonkey  |  C/C++  |  Free Pascal  |  Firebird
볼랜드포럼 BorlandForum
 경고! 게시물 작성자의 사전 허락없는 메일주소 추출행위 절대 금지
C++빌더 포럼
Q & A
FAQ
팁&트릭
강좌/문서
자료실
컴포넌트/라이브러리
메신저 프로젝트
볼랜드포럼 홈
헤드라인 뉴스
IT 뉴스
공지사항
자유게시판
해피 브레이크
공동 프로젝트
구인/구직
회원 장터
건의사항
운영진 게시판
회원 메뉴
북마크
볼랜드포럼 광고 모집

C++빌더 팁&트릭
C++Builder Programming Tip&Tricks
[742] [Forms] Modal폼을 띄울때 Disable되는 폼을 Gray톤으로 ..
장성호 [nasilso] 9124 읽음    2008-02-20 00:01
뭐라고 해야 하나? 제목을 붙이기가 힘드네요

델마당에 Q&A에 올라온 질문을 보고 한번 만들어 본것인데요
http://www.delmadang.com/community/bbs_view.asp?bbsNo=17&bbsCat=0&st=&keyword=&indx=400395&keyword1=&keyword2=&page=1

폼을 Modal로 띄울때 폼을 띄운 폼의 Caption은 Disable되는데..
나머지는 Client영역은 그대로 남아있는데...
Disable된 폼의 Client영역도 Disable된것처럼 보이게 gray톤으로 바꾸는것입니다.

첨부파일의 이미지 처럼..



원리는...

1. GetFormImage로 현재 폼의 이미지를 가져온다.
2. Bitmap의 이미지를 gray톤으로 바꾼다.
3. 현재 폼에 TPanel을 하나 추가하고 Panel위에 TImage를 올린다.  align=alClient로 ..
4. 생성한 TImage에 Gray톤으로 바꾼 bmp를 Assign시킨다.

5. 원하는 폼을 ShowModal한다.

6. Panel을 delete시킨다.  //원래대로 돌아옴

//   Builder예제 
void __fastcall TForm1::GrayBitmap(Graphics::TBitmap *bmp)
{
    unsigned char *pt;
    bmp->PixelFormat=pf32bit;

    int gra=180;
    for(int h=0;hHeight;h++)
    {
        pt=(unsigned char *)bmp->ScanLine[h];
        for(int w=0;wWidth;w++)
        {
            pt[0]=(pt[0]+gra)/2;
            pt[1]=(pt[1]+gra)/2;
            pt[2]=(pt[2]+gra)/2;
            pt[3]=(pt[3]+gra)/2;
            pt+=4;
        }
    }
}
void __fastcall TForm1::Button6Click(TObject *Sender)
{
    TPanel *Pan=new TPanel(this);
    Pan->SetBounds(0,0,ClientWidth,ClientHeight);
    TImage *Img=new TImage(Pan);
    Img->Align=alClient;
    Pan->BorderStyle=bsNone;
    Pan->BevelOuter=bvNone;
    Img->Picture->Bitmap->Width=ClientWidth;
    Img->Picture->Bitmap->Height=ClientHeight;
    Graphics::TBitmap *bmp=this->GetFormImage();
    bmp->PixelFormat=pf32bit;
    GrayBitmap(bmp);
    Img->Picture->Bitmap->Assign(bmp);
    delete bmp;
    Pan->Parent=this;
    Img->Parent=Pan;
    Form2->ShowModal();
    delete Pan;
}
//===========================================================================



//Delphi 예제
procedure TForm1.GrayBitmap(bmp: TBitmap);
var
    pt : PByte;//Pointer;
    gra : Byte;
    h,w : Integer;
begin
    bmp.PixelFormat:=pf32bit;

    gra:=180;

    for h:=0 to bmp.Height-1 do
    begin
        pt:=PByte(bmp.ScanLine[h]);
        for w:=0 to bmp.Width-1 do
        begin
            pt^ := (pt^+gra) div 2;Inc(pt);
            pt^ := (pt^+gra) div 2;Inc(pt);
            pt^ := (pt^+gra) div 2;Inc(pt);
            pt^ := (pt^+gra) div 2;Inc(pt);

        end;
    end;
end;

procedure TForm1.Button6Click(Sender: TObject);
var
    Pan: TPanel;
    Img: TImage;
    bmp: TBitmap;
begin

    Pan:=TPanel.Create(Self);
    Pan.SetBounds(0,0,ClientWidth,ClientHeight);
    Img:=TImage.Create(Pan);
    Img.Align:=alClient;
    Pan.BorderStyle:=bsNone;
    Pan.BevelOuter:=bvNone;
    Img.Picture.Bitmap.Width:=ClientWidth;
    Img.Picture.Bitmap.Height:=ClientHeight;
    bmp:=Self.GetFormImage();
    bmp.PixelFormat:=pf32bit;
    GrayBitmap(bmp);
    Img.Picture.Bitmap.Assign(bmp);
    bmp.free;
    Pan.Parent:=Self;
    Img.Parent:=Pan;
    Form2.ShowModal();
    Pan.free;

end;


어디 쓸데 있으려나?
그럼..
크레브 [kkol]   2008-02-20 09:11 X
오~~ 쓸만한 기능인데요 ^^
김태선 [cppbuilder]   2008-02-20 10:07 X
아이디어가 좋습니다. @..@b
보리 [rhythmax]   2008-02-20 16:36 X
a = (pt[0] + pt[1] + pt[2]) / 3;

pt[0] = a;
pt[1] = a;
pt[2] = a;

요렇게 하면 진짜 그레이 스케일로...
하지만 안이쁘다는...
사랑니 [shibuara]   2008-02-22 16:57 X
짝짝짝 ~~ ^^

+ -

관련 글 리스트
742 [Forms] Modal폼을 띄울때 Disable되는 폼을 Gray톤으로 .. 장성호 9124 2008/02/20
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.