디자인 타임에 구성 요소 크기 제한
-
08-07-2019 - |
문제
텍스트 변경을 허용하기 위해 버튼 자체 및/또는 글꼴 크기(특정 제약 조건 내에서)를 조정할 수 있는 일부 크기 인식 기능을 제공하기 위해 TButton에서 상속하려고 합니다.
예를 들어
| 작은 |
또는
| 이것은 정말 길다 |
| 버튼의 문장 |
동일한 양식의 동일한 버튼이 될 수도 있습니다. 제가 한 일은 텍스트를 재설정하고 버튼이 크기 변경 자체에 대처하는 것뿐입니다.
텍스트 측정 기능을 모두 구현했는데 기능이 작동합니다. 어느 시점까지.
내가 한 일은 Width 및 Font에 대한 새로운 속성 maxHeight, minHeight, defaultHeight 등을 만드는 것입니다.
사용자가 기본 높이를 변경하면 내 디자인 타임 구성 요소가 변경되어 이 새로운 기본 높이를 반영합니다.
그러나 사용자가 일반 높이 및 너비 속성을 사용하는 경우(또는 모서리를 드래그하는 경우) 기본 높이 및 너비에 연결하는 방법을 모르겠습니다.
OnCanResize를 가로채서 이벤트 핸들러를 생성하고 새 크기가 최소값 내에 있는지 확인하려고 했습니다.그렇지 않은 경우 필요에 따라 최소 또는 최대로 설정하고 경계 내에 있으면 업데이트하십시오.런타임 크기 조정 이벤트를 차단할 수 있지만 디자인 타임에는 차단할 수 없습니다.
디자인 시간 크기 조정을 가로채는 것이 가능한 경우, 방법을 아는 사람이 있습니까?
말이 좀 길었다면 죄송합니다. 이해가 되기를 바랍니다!
해결책
가상 setBounds () 메소드를 무시하십시오. 여기에서 사용자의 요청 된 치수를 필요에 따라 조정 한 다음 조상 SetBounds () 메소드로 전달할 수 있습니다. 예를 들어:
class TMyButton : public TButton
{
typedef TButton inherited;
public:
...
virtual void __fastcall SetBounds(int ALeft, int ATop, int AWidth, int AHeight);
__published:
__property int MaxHeight = ...;
__property int MinHeight = ...;
...
};
virtual void __fastcall SetBounds(int ALeft, int ATop, int AWidth, int AHeight)
{
if (AHeight > MaxHeight) AHeight = MaxHeight;
if (AHeight < MinHeight) AHeight = MinHeight;
...
inherited::SetBounds(ALeft, ATop, AWidth, AHeight);
}
다른 팁
버튼은 여전히 창이며 다음에 응답할 수 있다는 점을 명심하세요. WM_GETMINAXINFO
.나는 대부분의 디자인 도구가 ptMinTrackSize
그리고 ptMaxTrackSize
(이름은 적어도 그것과 유사합니다).