Domanda

Sto cercando di ereditare da TButton al fine di fornire alcune funzionalità consapevoli delle dimensioni, in cui i pulsanti sono in grado di ridimensionare se stessi e / o la dimensione del carattere (entro determinati vincoli) per consentire modifiche nel testo

per es.

| piccolo |

o

| & nbsp; & nbsp; questo è un periodo davvero lungo & nbsp; & nbsp; |
| frase su un pulsante |

potrebbe essere felicemente lo stesso pulsante nello stesso modulo, tutto ciò che ho fatto è resettare il testo e il pulsante si occupa della modifica della dimensione stessa.

Ho implementato tutte le funzioni di misurazione del testo e la funzionalità funziona fino a un punto .

quello che ho fatto è creare nuove proprietà maxHeight, minHeight, defaultHeight e così via per Larghezza e Carattere.

Quando l'utente modifica l'altezza predefinita, il mio componente del tempo di progettazione cambierà e rifletterà questa nuova altezza predefinita.

Quando l'utente utilizza la normale altezza e amp; Proprietà larghezza tuttavia (o trascina l'angolo) Non so come legarli all'altezza e alla larghezza predefinite.

Ho intercettato OnCanResize e creato un gestore eventi e ho provato a confermare che la nuova dimensione rientra nel limite massimo di min. In caso contrario, impostare su min o max come richiesto, ma se entro i limiti, aggiornare. Sono in grado di intercettare gli eventi di ridimensionamento del runtime, ma non i tempi di progettazione.

Se è possibile intercettare i ridimensionamenti dei tempi di progettazione, qualcuno sa come?

scusa se è un po 'prolisso, spero abbia senso!

È stato utile?

Soluzione

Sostituisci il metodo SetBounds () virtuale. Da lì, è possibile regolare le dimensioni richieste dall'utente secondo necessità prima di passarle al metodo SetBounds () dell'antenato. Ad esempio:

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

Altri suggerimenti

Tieni presente che un pulsante è ancora una finestra e può (risponderà) a WM_GETMINAXINFO . Credo che la maggior parte degli strumenti di progettazione rispetti ptMinTrackSize e ptMaxTrackSize (i nomi sono almeno simili a quelli).

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top