|
1. ActionList 사용에 대해
답변:
void _fastcalll Action1Exectute ( TObject *Sender ) //
위 함수에서 Sender로 넘어오는것은 TButton이 아니라
TAction입니다.
님께서 원하시는것을 하시려면 ActionList 대신 그냥 하나의 ButtonClick이벤트 함수에 에 모든 버튼이벤트를 걸어두시면 됩니다.
그러면 넘어오는 Sender가 각각의 Button이 될것입니다.
2. MDI Client에 대해...
답변: 솔찍히 mdi에 대해선 잘모릅니다.
몇가지함 하는데로 말씀드리면..
1) MDI는 화면에 보이는 부분이 폼의 Handle과 연결된 DC가 아닙니다.
ClientHandle과 연결된 dc가 있는데 그부분이 폼의 clinet영역에 보여지는것입니다.
2) TImage는 window-control이 아닙니다.
window-control 아니라는 얘기는 스스로 화면에 나타낼수 없을뿐아니라 윈도우 메세지도 받을수
없는 control입니다.
그런데 TImage는 마우스 이벤트도 받고 화면에 도 보여지잖아요?
그것은 TImage가 놓여진 Window-Control인 Parnet컨트롤이 메세지를 받아서
TImage에 전달해주기 메세지를 받을수 있는것이구
화면에 보여지는것은 Parnet되는 Window-Control의 dc에 자신의 image를 draw하기 때문입니다.
이쯤에서 정리하면
TImage가 폼위에 올려져 있다면 폼의 dc에 draw하게 됩니다.
만약 Panel위에 있으면 Panel의 dc에 draw하여 image를 보여지게 되는것이구요
그런데 MDI의 경우 Form의 dc와 client영역의 dc가 묘하게(이상하게..) 연결되어있어서 ...... 정확히 모름
이미지가 보였다가 안보였다가 하는것입니다.
Image의 위치를 옮기고 프로그램을 minimize했다가 복구해보시면
이미지가 옮겨진 위치에 보여질것입니다.
그런 이유때문에 mdi 폼의 배경을 그릴때도 ClientHandle의 dc에 그려주는것입니다.
쉽게 하는 방법은?
폼위에 Panel을 올리고 그위에 TImage를 올린후에 Panel을 움직여주면 됩니다.
그럼..
linuxman 님이 쓰신 글 :
: 안녕하세요...
:
: 1.화면에 100여개 정도의 버튼을 만들었습니다.
: 그리고 이버튼에 actionlist를 하나 연결시켰습니다.
:
: 이 actionlist의 함수안에서... 어떤 버튼이 눌렸는지를 알아내려 하는데...
: 아래처럼..casting 후에... Tag 값을 조사해보면.. (각각의 버튼에 ... 서로다른 Tag값을 할당해 놓았습니다 )
:
: 죽어버리고 맙니다... 어떻게 알아내요 하나요... (caption이 없는 버튼들 입니다 )
:
: void _fastcalll Action1Exectute ( TObject *Sender )
: {
:
: TButton *bp = dynamic_cat <TButton *> Sender ;
:
: if ( bp->Tag == 0 ) showMessage ("button 1" );
: if (bp->Tabe ==1 ) showMessage ( "button 2" );
:
: }
: 2.MDI 폼 위에 image1을 하나 올려놓았고, 그림도 지정해 놓았습니다.
: 버튼 하나가 눌렸을때.. 그 이미지의 위치를 바꾸기 위해.. (기존에 이미지가 화면중앙에 있었는데)
: 왼쪽으로 옮기기 위해 image1->Left =50 ; 을했는데... 이미지가 그대로 중앙에 있습니다...
: 왜 이미지가 다른 위치에 옮겨지지 않는것인가요?
:
: (그냥 MDI 폼이 아닌 아닌 일반 폼에서는 ..... 원하는 위치에 마구 마구 잘 옮겨 다님니다 )
: MDI 폼에는 일반폼과 다른 무슨 비밀이 있나요?
:
:
: 수고하세요..
|