2011-01-27 15 views
5

Sto cercando di trovare un modo per utilizzare il mio secondo modulo come finestra di suggerimento per un componente (ad esempio un TLabel) nel mio primo modulo.Creazione della finestra suggerimento personalizzata

Al momento, sto esplorando l'uso di THintWindow e HintWindowClass, ma non è possibile assegnare direttamente un TForm-HintWindowClass. Alcuni esempi che ho visto fino ad ora usano uno che viene quindi disegnato sullo THintWindow.Canvas, che non è male, ma mi piacerebbe ancora usare un qualche tipo di meccanismo automatico integrato.

Un'altra soluzione che mi è venuta in mente è quella di implementare manualmente questa funzionalità utilizzando gli eventi OnMouseEnter, OnMouseMove e OnMouseLeave di detto Tlabel.

Se esiste effettivamente un modo per "assegnare" un TForm a HintWindowClass, vorrei chiedere se qualcuno può fornire uno snippet di codice che illustri questo. Grazie.

+0

http://meta.stackoverflow.com/questions/295049/criteria-for-flagging-an-off-topic-question – Will

risposta

12

THintWindow è un discendente di TCustomControl. TForm non è un discendente di nessuna di queste classi, quindi non è possibile assegnare alcuna classe TForm a HintWindowClass. Le finestre di suggerimento devono discostarsi da THintWindow. Tutto ciò che puoi mettere su un modulo puoi anche metterlo su un THintWindow. Devi solo istanziarlo manualmente e assegnare la sua proprietà Parent per farlo apparire.

Il più vicino possibile a "visivamente" la progettazione di una finestra di suggerimento è progettare un frame . Fai in modo che il tuo discendente THintWindow crei un'istanza del frame, quindi esegui l'override di ActivateHint (e ActivateHintData, se ti servono i dati) per inoltrare il testo del suggerimento e le dimensioni desiderate al fotogramma.

+3

È un po 'hacky, ma è possibile inserire il modulo che si desidera utilizzare come suggerimento all'interno di un contenitore derivato da 'THintWindow'. Dovresti impostare 'Form.Parent: = HintWindowContainer; Form.Align: = alClient; ' –

+0

Non sono sicuro sulla politica di" riesumare "le domande di un anno qui, ma questa è la domanda esatta che ho adesso. Capisco cosa deve essere fatto, ma non so esattamente come. Ho fatto discendere 'TMyHintWindow' e ho guardato' ActivateHint' e da lì mi sono perso, butto via completamente il codice originale, dove dovrei mettere la creazione di un'istanza di un frame? Ho provato a farlo in "ActivateHint", viene creato ma non compare mai ... poi, di nuovo, non ho riutilizzato alcun codice originale, quindi probabilmente è completamente sbagliato. Gradirei un aiuto in questo. – Raith

Problemi correlati