Fragment Napisano Luty 21, 2019 Autor Zgłoś Napisano Luty 21, 2019 No niezupełnie. Spróbuj zmienić rozmiar okna za pomocą lewej lub górnej krawędzi okna. Okaże się, że możesz to robić bez ograniczeń. W dokumentacji jest napisane, że WM_SIZING pozwala kontrolować rozmiar, ale także i pozycję okna. Musisz więc sprawdzać wartość wParam, aby wiedzieć którą składową RECT-a musisz nadpisać. Poza tym miałem dziwny efekt. W przyapdku gdy zwracałem 1 po przetworzeniu WM_SIZING, przeważnie nie było żadnego efektu. Dopiero gdy zwróciłem TRUE, działa poprawnie. Cytuj
Fragment Napisano Luty 21, 2019 Autor Zgłoś Napisano Luty 21, 2019 Wyjaśniło się. Ponieważ RECT zawiera dane w jednostach całego ekranu, nie możemy przypisywać jego składowym wartości minimalnego rozmiaru, ponieważ one nie są współrzędnymi w jednostkach całego ekranu. Tak więc w sytuacji, gdy okna znajduje się blisko lewego górnego rogu, efekt zablokowania zmniejszania rozmiaru okna jest jakoś widoczny, a w przypadku gdy okna znajduje się na środku ekranu efektu nie ma. W Twoim kodzie jest więc błąd. Powinno być tak: if msg=WM_SIZING then begin R:=POINTER(LParam); //zmienna R to PRect, czyli zwykły rect, ale jako wskaźnik If R^.bottom [b]- R^.top[/b] <=MinCY then R^.bottom:= [b]R^.top +[/b] MinCY; If R^.Right [b]- R^.left[/b] <=MinCX then R^.right:=[b]R^.left +[/b] MinCX; Result:=1; //w tym komunikacie należy zawsze zwrócić wartość true dla procedury okna end Oczywiście nadal nierozwiązny pozostaje problem użycia lewej i górnej krawędzi okna. //edit by Piasiu ;) Ludzie korzystajcie z tego ładnego przycisku Code podczas pisania postu ;) Cytuj
Omega Napisano Luty 21, 2019 Zgłoś Napisano Luty 21, 2019 Sprawdzilem i rzeczywiscie masz racje. Zwracam honor. Cytuj
Randal Napisano Kwiecień 6, 2019 Zgłoś Napisano Kwiecień 6, 2019 andrp wielkie dzieki, prostota i geniusz rozwiazania powala - 2 linijki! PS. tylko nie wiem po co ta funkcja max(), bez tego dziala bez problemu Cytuj
Fragment Napisano Kwiecień 17, 2019 Autor Zgłoś Napisano Kwiecień 17, 2019 Rzeczywiście masz rację. Trochę przekombinowałem, a że działało poprawnie to nie zauważyłem że max() jest niepotrzebny. Dzięki. Cytuj
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.