2011-01-27 15 views
5

Próbuję znaleźć sposób użycia mojego drugiego formularza jako okna wskazówek dla komponentu (na przykład TLabela) w moim pierwszym formularzu.Tworzenie niestandardowego okna z podpowiedziami

Obecnie jestem odkrywania wykorzystanie THintWindow i HintWindowClass, ale nie jest to możliwe bezpośrednio przypisać TForm do HintWindowClass. Niektóre przykłady, które widziałem do tej pory, używają TBitmap, który jest następnie rysowany na THintWindow.Canvas, co nie jest złe, ale nadal chciałbym użyć jakiegoś zintegrowanego automatycznego mechanizmu.

Innym rozwiązaniem, które przyszło mi przez myśl, jest ręczne zaimplementowanie tej funkcji przy użyciu zdarzeń wymienionych Tlabel.

Jeśli rzeczywiście istnieje sposób, aby "przypisać" TForm do HintWindowClass, chciałbym zapytać, czy ktoś może podać fragment kodu ilustrujący to. Dzięki.

+0

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

Odpowiedz

12

THintWindow jest potomkiem TCustomControl. TForm nie jest potomkiem żadnej z tych klas, więc nie można przypisać żadnej klasy TForm do HintWindowClass. Podpowiedź windows musi pochodzić z THintWindow. Wszystko, co możesz umieścić na formularzu, możesz również umieścić na THintWindow. Musisz tylko utworzyć instancję ręcznie i przypisać jej właściwość Parent, aby się pojawiła.

Najbliższe rozwiązanie problemu "wizualnego" zaprojektowania okna podpowiedzi to zaprojektowanie ramki . Niech twój potomek THintWindow utworzy instancję ramki, a następnie przesuń ActivateHint (i ActivateHintData, jeśli potrzebujesz danych), aby przesłać tekst podpowiedzi i żądany rozmiar do ramki.

+3

To trochę hacky, ale możesz umieścić formularz, który chcesz użyć jako podpowiedź wewnątrz kontenera pochodzącego od 'THintWindow'. Można ustawić "Form.Parent: = HintWindowContainer; Form.Align: = alClient; ' –

+0

Nie jestem pewien na temat polityki" odnawiania "rocznych pytań tutaj, ale jest to dokładne pytanie, które mam właśnie teraz. Rozumiem, co należy zrobić, ale nie wiem, jak dokładnie. Zrobiłem potomka 'TMyHintWindow' i spojrzałem na' ActivateHint' i stamtąd jestem zagubiony, czy całkowicie wyrzucam oryginalny kod, gdzie powinienem umieścić stworzenie instancji ramki? Próbowałem to zrobić w 'ActivateHint', to jest tworzone, ale nigdy się nie wyświetla ... potem znowu nie użyłem żadnego oryginalnego kodu, więc prawdopodobnie jest to całkowicie błędne. Byłbym wdzięczny za pomoc. – Raith

Powiązane problemy