سؤال

وأنا أحاول أن ترث من TButton من أجل توفير بعض القدرات تدرك حجم، حيث الأزرار هي قادرة على تغيير أنفسهم و / أو حجم الخط الخاصة بهم (ضمن قيود معينة) للسماح للتغييرات في النص

ومنها مثلا.

و| صغيرة |

أو

و| هذا هو حقا طويل |
| الحكم على زر |

ويمكن أن يكون سعيدا على الزر نفسه في نفس النموذج، كل ما قمت به هو إعادة النص وزر تتواءم مع تغير حجم نفسه.

ولقد نفذت جميع وظائف القياس النص، ويعمل وظيفة إلى نقطة .

وما قمت به هو خلق خصائص جديدة 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