Kiedy pisałem swój system komponentów, jako alternatywy dla LCL, miałem ten sam ”problem”, jeśli chodzi o wyświetlanie customowych hintów. Zadbanie o wyświetlanie okna w całości wewnątrz danego ekranu to dosłownie kilka linijek kodu bardzo prostej arytmetyki. Więcej czasu poświęciłeś na pisanie powyższego posta. ;)
Jednak jeśli już będziesz siadał do pisania tego kodu (bo nie znam gotowca z VCL-a), to od razu przemyśl sprawę i dobrze to zaimplementuj. Zwykły min-max to za mało — wzoruj się na systemowych popupach. Jeśli domyślnie wyświetlasz popup np. po prawej stronie, to gdy nie zmieści się na ekranie, nie przesuwaj go tak aby się mieścił, a przenieś go na lewą stronę od pozycji kursora (i tak samo jeśli chodzi o jego pozycję w pionie).
Jeśli po przeniesieniu okna na drugą stronę też się nie będzie mieściło (co jest mało prawdopodobne, ale jednak), to wybierz docelową stronę w taki sposób, aby użytkownik musiał wykonać krótszy ruch myszą, by móc kliknąć w coś w tym popupie oraz jednocześnie aby przez przypadek nie był w stanie czegoś w nim kliknąć i zepsuć sobie robotę.
Możesz też dodatkowo skorzystać z predefiniowanego offsetu okna w obu osiach względem pozycji kursora. Np. żeby róg popupu był odsunięty kilka pikseli od kursora. Bywa to przydatne, ale ostatecznie sam określ, czy w Twoim przypadku ma to zastosowanie.