|
허걱 초보한테 배우실려구요? ㅋㅋ
[먼저 알것]
1. 먼저 알아두셔야 할것은 Window 운영체제에서
화면에 무엇인가 그리려면 Form 즉 윈도우가 있어야 합니다.
DC라는것을 통해 그것을 제공하지요
2. TImage컨트롤에 대해
TImage는 VCL Graphic 컨트롤로서
어떤 Window Control의 DC에 자신이 가진 image 정보를 그릴뿐
스스로 화면에 자신을 타나내지 못합니다.
앞에 말한 원리대로 윈도우 핸들을 가지고 있지 않기 때문이죠
[문제 해석]
그럼 이제 원하시는것이 무엇인지 살펴보겠습니다.
1. "캡락버튼을 누르면 그림이 윈도우없이 화면에 띄우는거하구요"
- "캡락버튼"이 뭔가요? 그냥 버튼으로 생각하겠습니다.
- "윈도우 없이 화면에 ..." --> 사각형의 윈도우 Frame이 없었으면 한다는 뜻이겠죠?
2. "어떤 새로운 창이 뜨던 항상 위에나타나도록 하려고..."
- 다른 윈도우 보다 항상 위에 있어야 한다는 뜻이죠?
문제 해석이 제대로 되었습니까?
[풀어가기]
1. 먼저 폼이 보이지 않게 하기
TImage를 이용하겠습니다.
그리고 window의 transparent 기능을 이용해서 해보도록 하죠
1.1 TForm위에 TImage를 하나 올립니다.
1.2 TImage에 원하는 Image를 하나 Load합니다.
1.3 폼의 크기와 TImage의 크기가 똑같게 Form의 AutoSize=true로 ..
1.4 폼의 상단 캡션바를 없애기 위해 BorderStyle=bsNone으로 합니다.
1.5 폼의 TransparentColor=true로 하시구요
1.6 폼의 TransparentColorValue를 Image에 있는 색상중 바깥 가장자리에 있는 색상으로 선택합니다.
그런다음 run해보세요 그럼 폼의 프레임은 없이
그림만 화면에 나타날것입니다.
2. 폼의 화면의 항상 맨위에 띄우기
2.1 먼저 폼의 style을 FormStyle=fsStayOnTop 로 하십시요
이와같이 하면 일단 화면의 맨위에 띄워집니다.
완벽하지는 않습니다. 작업관리자같이 최상위로 뜨는 다른 윈도우에는 가려지게 되죠
[추신]
폼을 BorderStyle을 bsNone으로 하면 폼의 맨상단의 클릭해서 움직이는 캡션바가 사라집니다.
즉 품을 클릭해서 움직을수 없겠죠
이때는 TImage를 클릭했을때 같은 효과가 나도록 코딩해주시면 됩니다.
void __fastcall TForm1::Image1MouseDown(TObject *Sender,
TMouseButton Button, TShiftState Shift, int X, int Y)
{
ReleaseCapture();
this->Perform(WM_SYSCOMMAND,0xf012,0);
}
//---------------------------------------------------------------------------
문제에서 캡락버튼이 이해가 아직 잘 안됩니다.
키보드의 CapsLock 버튼을 얘기하는것인지요?
그럼...
초보프로그래머 님이 쓰신 글 :
: 담변 잘보았습니다 감사하구요
: 제가하려는것은요 캡락버튼을 누르면 그림이 윈도우없이 화면에띄우는거하구요
: 어떤 새로운 창이 뜨던 항상 위에나타나도록 하려고합니다
: 그리구요 답변에 함수를 폼에다가넣어야되나요?아니면
: TImage1 에다가 넣어야되나요?
: 캡락버튼누르면 뜨도록할에정이니깐 제생각엔
: 폼에다 넣어야되는가싶은데 폼에다가 넣어야되나요?
: 장성호님을 사부로모시고 십습니다;;
:
:
: 장성호 님이 쓰신 글 :
: : 질문에 대한 이해가 잘 안오네요
: : 정확히 무엇을 하려고 하시는지?
: :
: :
: : 1. 진짜 말그대로 바탕화면에 draw하고자 하신다면?
: : 바탕화면 Canvas의 DC를 얻어서 그리셔야 합니다.
: :
: : HDC dc= GetDC(0); // 바탕화면의 DC입니다.
: : TCanvas *Can=new TCanvas;
: : Can->Handle=dc;
: :
: : Can->MoveTo(0,0);
: : Can->LineTo(100,100);
: :
: : 이런식으로 바탕화면의 DC를 TCanvas의 Handle로 설정해서
: : TCanvas를 이용해 그림이나 글씨등 여러가지를 마음대로 그릴수 있습니다.
: :
: : 2. 바탕화면에 마우스로 그림을 그리고자 할때..
: : Form을 Screen size로 만드시구요
: : 현재 window의 화면을 캡쳐해와서 Form위에 그려줍니다.
: : 그런다음 폼위에다가 그림을 그리죠
: :
: : 그럼 꼭 바탕화면에 그림을 그리는것 같죠
: : 보통 프레젠테이션을 위한 펜 같은 기능을 이런식으로 만듭니다.
: :
: :
: : 3. 그밖에..
: : Form의 Transparent 기능을 이용해서 특정색상은 모두 바탕 이미지가 보이도록한후
: : Form위에 그리는 방식도 있습니다.
: :
: : 4. 기타..
: :
: :
: : 그럼..
: :
: :
: :
: : 초보 프로그래머 님이 쓰신 글 :
: : : 그림을 로드하려고하는데요 Timage로 그림을 불러왔거든요
: : : 폼없이 모니터화면에 그려주고 바탕은 투명하게하려고하거든요
: : : .................................
: : : . A .
: : : . A .
: : : .................................
: : : 이런식으로 있다고 가정하면 A라는 글자이외에바탕부분을
: : : 투명하게보이려고합니다
: : : 폼없이 화면에바로그려줄려고요 그림을 폼에다가불러왔는데
: : : 그림이 바탕이흰색이어서 그림이외바탕색이 하얀색으로나오고
: : : 창크기랑 그림크기랑 싸이즈가 안맞더라구요
: : : 자동으로 윈도우화면이랑 그림크기랑 같도록하고싶습니다
: : : 아직초보라서 모르는게너무많아요 한번만 제대로 알려주시면 기억하는체질이라서
: : : 답변이 너무 절실합니다
: : : 질문도 쉽게풀어서질문을 안적은것같기도하지만
: : : 아니면 전체소스를 주시면 감사하고요
|