Frage

ich von TButton, um erben würde versuchen, einige Größe bewusst Fähigkeiten zur Verfügung zu stellen, wo die Tasten sind in der Lage, mich um die Größe und / oder deren Schriftgröße (in gewissen Einschränkungen) für Änderungen in Text zu ermöglichen

z.

| small |

oder

| dies ist eine wirklich lange |
| Satz auf einem Knopf |

glücklich die gleiche Taste auf der gleichen Form sein könnte, alles, was ich getan habe, ist, den Text zurückgesetzt und die Taste meistert mit der Größe ändern sich.

Ich habe alle Textmessfunktionen implementiert, und die Funktionalität Werke zu einem Punkt .

, was ich getan habe, ist es, neue Eigenschaften maxHeight, minHeight, defaultHeight erstellen und so weiter für die Breite und Schrift.

Wenn der Benutzer die Standardhöhe ändert, wird meine Design-Zeit-Komponente ändern und diese neue Standardhöhe widerspiegelt.

Wenn der Benutzer die normale Höhe und Breite Eigenschaften verwendet jedoch (oder zieht die Ecke) Ich weiß nicht, wie sie auf die Standardhöhe und -breite zu binden.

ich abgefangen OnCanResize und erstellt einen Ereignishandler und versuchte, zu bestätigen, dass die neue Größe in dem min max. Wenn es um die min oder max nicht gesetzt ist, als erforderlich, aber wenn innerhalb der Grenzen dann aktualisieren. Ich bin in der Lage Ereignisse abfangen Laufzeit der Größe, aber nicht die Zeit entwerfen.

Wenn es möglich ist, die Entwurfszeit abfangen ändert die Größe, weiß jemand, wie?

sorry, wenn das eine ist etwas langatmig, hoffe, es macht Sinn!

War es hilfreich?

Lösung

Überschreiben Sie die virtuelle SetBounds () -Methode. Von dort können Sie den Benutzer angeforderten Dimensionen benötigt einzustellen, wie vorher, sie den Vorfahren SetBounds () -Methode übergeben. Zum Beispiel:

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);
}

Andere Tipps

Beachten Sie, dass ein Knopf ist immer noch ein Fenster, und kann (wird) zu WM_GETMINAXINFO reagieren. Ich glaube, die meisten Design-Tools die ptMinTrackSize und ptMaxTrackSize respektieren (die Namen sind zumindest ähnlich wie).

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top