4programmers.net

Witaj!

flowCRANE dodał nowy post w wątku: TPopupMenu — określenie systemowych marginesów wokół okienka popupu


TPopupMenu posiada zdarzenie OnMeasureItem, które pozwala nam samodzielnie określić szerokość oraz wysokość każdego z itemów (z tekstem i bitmapami, separatorów itd.). Korzystam z tego sposobu do obliczania rozmiarów całego popupu, aby następnie móc go wypozycjonować na docelowym ekranie, a na koniec pokazać go za pomocą standardowej metody TPopupMenu.PopUp(X,Y).

Działa to świetnie, jednak jednej rzeczy brakuje — rozmiaru marginesów wokół okienka popupu, które są narzucane przez system operacyjny. U mnie, na Windows 11 i widgetsecie Win32, marginesy poziome wynoszą 10px po lewej i prawej oraz 3px u góry i na dole — łącznie okno popupu jest szersze o 20px w poziomie i o 6px w pionie.


Żeby moja kontrolka była w stanie wyświetlić popup co do piksela w obliczonym miejscu (po odpowiedniej stronie kontrolki), muszę znać dokładny rozmiar całego okna (itemów i systemowych marginesów). Tyle że ani nie dostarcza tego widgetset, ani nawet samm system operacyjny — funkcja GetSystemMetrics zdaje się nie zwracać takich danych.

Jak więc określić rozmiar tych marginesów (bez względu na widgetset), bez pokazywania popupu na ekranie?

Jeśli ktoś zna poprawny sposób na realizację powyższego, będę wdzięczny za podpowiedzi. Na razie rozmiar marginesów mam określony z góry i trzymany jest w dodatkowych zmiennych, ale wolałbym rozwiązanie dynamiczne, nie wymagające hardkodowania rozmiarów.


Zobacz post

Z poważaniem,
4programmers.net

Jeżeli masz problemy z kliknięciem na przycisk "Zobacz post", skopiuj i wklej poniższy link w przeglądarce:

http://4programmers.net/Notification?path=%252FForum%252FDelphi_Pascal%252F377513-tpopupmenu_okreslenie_systemowych_marginesow_wokol_okienka_popupu%253Fp%253D2014186%2523id2014186