문제

텍스트 변경을 허용하기 위해 버튼 자체 및/또는 글꼴 크기(특정 제약 조건 내에서)를 조정할 수 있는 일부 크기 인식 기능을 제공하기 위해 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 (이름은 적어도 그것과 유사합니다).

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top