Quando è TGraphicControl.Vernice chiamato?
Domanda
Sto cercando di scrivere un custom TGraphicControl discendente, che consente a un utente di incorporare un SDL rendering di superficie su un VCL forma.Ciò fornirà un modo semplice per visualizzare SDL animazioni in un modulo.
A quanto pare un TGraphicControl viene ridisegnato con il metodo Paint.Quanto spesso questo chiamato?E ' solo quando succede qualcosa di invalidare il controllo, o ci sono altre cose che lo chiami?Come può interagire con qualcosa che fa proprio il disegno?
Soluzione
Domanda 1: Quanto spesso questo chiamato?
Vedi risposta Mghie:ogni volta che la finestra padre processi di controllo il messaggio WM_PAINT
Domanda 2: È solo quando succede qualcosa di invalidare il controllo, o ci sono le altre cose che la chiamate?
Vedi risposta Mghie:solo quando è invalidata
Domanda 3: Come si fa che interagiscono con qualcosa che non il suo proprio disegno?
Si deve mettere il proprio drawning di routine nel metodo Paint di TGraphicControl discendente - utilizzando la direttiva override.Disegno in Paint metodo non permette di inviare un altro WM-messaggio di disegno.Mentre nel metodo Paint è possibile disegnare sulla tela senza entrare in un WM-VERNICE ciclo di messaggi.Rendere il vostro codice di disegno il più velocemente possibile, perché non ci può essere un bel po ' di WM-VERNICE messaggi di volare.Se la vostra routine di disegno prende un sacco di tempo, la vostra applicazione apparirà lento/non risponde.
Altri suggerimenti
Il metodo Paint di un controllo non-finestra (che è TGraphicControl) viene chiamata quando il controllo con la finestra si ridisegna sotto. Ciò accade quando un messaggio WM_PAINT per il controllo con la finestra viene elaborato.
Un controllo con la finestra viene aggiornata sia quando la sua intera area o parti di esso sono state invalidate, o quando un'altra finestra che era più alta nel ordine Z viene chiusa o trasferita, in modo che la finestra è esposto e deve essere ridisegnata.
invalidazione un TGraphicControl calcolerà la parte corrispondente del controllo padre finestra e invalidare questa parte.
Se avete bisogno di un TGraphicControl di ridisegnare se stessa, allora è necessario chiamare Invalidate su di esso o il suo controllo padre. Non c'è altro modo per provocare un ridisegno.