2012-02-26 3 views
1

designtime 편집기에서 어느 정도 편집 할 수있는 그래픽 구성 요소를 델파이에서 만들고 싶습니다.델파이 (CM_) 및 사용자 지정 그래픽 디자인 타임 구성 요소의 구성 요소 메시지

내가 (예를 들어 TWinControl을 또는 무엇이든)에서 상속해야합니까 구성 요소

  • 을 알고 싶습니다 편집기에서 내 부품을 이동 할 수있는 구성 요소 메시지 (CM_xxx를) 처리하는 방법
  • designtime 편집기에서 기본 Windows 구성 요소를 사용할 수 있지만 런타임에 다른 구성 요소로 전환 할 수있는 경우.

런타임에서 다른 유형의 구성 요소로 전환 할 수있게하려는 이유는 표준 Windows 그래픽보다 몇 배 빠른 Graphics32 라이브러리에서 TBitmap32를 사용하려고하기 때문입니다 TBitmap32는 TWinControl에서 상속되지 않습니다.

어쩌면 가능하면 표준 VCL을 designtime에 사용하고 그 속성을 가져 와서 TBitmap32에 적용하는 등의 작업을 할 수 있습니다.

예 : 디자인 타임에서 내가 움직일 수 있으며, I는 애플리케이션을 실행할 때의 X 및 Y 값, 및 TImage의의 비트 맵을 취하고 TBitmap32 성분에 적용하고 TBitmap32 성분 무승부 TImage의를 사용 어디서나 그려야합니다.

같은 것을 볼 수 있었다

코드 : TMyBMP = 클래스 (TImage의) 개인 fResultBMP : TBitmap32을; .....

감사합니다.

+1

제어 메시지 * – OnTheFly

+1

http://delphi.about.com/od/vclusing/a/customvcldev_2.htm "구성 요소 메시지 (CM_)는 VCL에 의해서만 생성되며 반영되지 않습니다. Windows 메시지 (WM_) " – xaid

+0

꽤 잘못된 참조입니다. 'X 메시지'에서 X는 출발지가 아니라 목적지를 나타냅니다. – OnTheFly

답변

3

디자인 타임과 런타임에 다른 구성 요소를 사용하지 않을 것입니다. 그러면 구성 요소 디자인이 복잡해집니다. 런타임에 사용하는 것은 디자인 타임에 사용하는 것과 동일한 것이어야합니다. 내가 할 것이 무엇

런타임 및 디자인 타임 모두에서 비트 맵을 그립니다 Paint() 메소드를 오버라이드 (override), 구성 요소가 TBitmap32 멤버가 포함되어 있고, 구성 요소는 마우스에 반응 할 수 있도록 다음 CM_DESIGNHITTEST 메시지에 응답입니다 디자인 타임에 마우스를 비트 맵 위에 놓으면 그런 다음 표준 메서드를 재정 의하여 필요에 따라 비트 맵 위치/크기를 조정할 수 있습니다 (해당 메서드 내에서 csDesigning 플래그에 대한 구성 요소의 ComponentState 속성을 확인하여 런타임과 디자인 타임을 구별 할 수 있음).

는 (디자인 타임에 비트 맵을 조작하는 다른 방법을 제공합니다) 게시 속성으로 TBitmap32를 노출 할 수 있습니다는 DFM에 비트 맵을 저장하거나 수동으로 비트 맵을 스트리밍 구성 요소의 DefineProperties() 메소드를 오버라이드 (override)합니다.

+0

나는 이것을 djsoft가 준 답변과 함께 시도 할 것이다. 고맙습니다! – xaid

1

TGraphicControl 또는 TWinControl에서 상속 된 구성 요소를 만들 수 있습니다. 컨트롤이 포커스와 Windows 메시지를받을 수있게하려면 후자가 필요합니다. 구성 요소는 TBitmap32를 버퍼로 사용해야합니다. 모든 페인트 작업을 메모리에 저장합니다. Paint 메서드 (재정의)에서는 BitBlt 또는 유사한 기능을 사용하여 버퍼에서 내용을 화면으로 복사합니다.

+0

고맙습니다. 레미 르 보가 저에게 준 대답과 함께 해보겠습니다. – xaid