C/C++ FAQ

[BCB] Jak w prosty sposób uniemożliwić przeniesienie okna programu poza ekran

Seigba

No może nie jest to zupełnie tak jak napisałem w temacie, bo okienko będzie można wynieś za ekran, jednak po pewnym czase wróci na jakieś współrzędne.

Przykład ten jest bardzo prościutki i wymyśiłem :> go przez przypadek przy tworzeniu mojego aktualnego projektu :P

 
   if ( Form1->Left + Form1->Width > Screen->Width ) // jeśli okno położone poza ekranem ( x + szerokosc formy > szer. ekranu ( to
        Form1->Left = Screen->Width - Form1->Width;   // ustaw na krawędzi ekranu (oś x)
 
    if ( Form1->Top + Form1->Height > Screen->Height ) // jeśli okno położone poza ekranem ( y  wysokosc formy > wys. ekranu ( to
     Form1->Top = Screen->Height - Form1->Height - 25; // ustaw na krawędzi ekranu (os y)
 
    if ( Form1->Top < 0 ) // jesli wieksze niz wys ekranu
        Form1->Top = 0;  // ustaw na krawedzi
 
    if ( Form1->Left < 0 ) // to samo tylko ze os x
        Form1->Left = 0;

// to idzie pod timera oczywiscie ! (ja polecam interval 1000, bo jak jest mniejszy to sie okno nie zdarza odmalowywac ;) a jak wikesze to zas za wolno

Mysle, ze sie komus sprzyda kawalek tego banalnego kodu. Jak co, to ktos to wyrzuci :P

FAQ

7 komentarzy

A nie lepiej przechwycić WM_WINDOWPOSCHANGED? Wówczas f-cja zostanie wykonana tylko wtedy, kiedy okno zostanie przesunięte. Pomijając to, ciekawym sposobem na \"przesunięcie\" okna, aby było ono widoczne jest użycie w BCB funkcji MakeFullyVisible (szczegoly w helpie).

eee co tam po znajomosci dam ci 5 :P

ja tu daje tylko rade jak to zrobić, a wsadzić se moezcie do jakiegokolwiek zdarzenia :> Do on_move chyba faktycznie bedzie najlepiej

on_move np. ?

To spróbuj dać pod inne zdarzenie :>

pod timera? a nie lepiej jakiś komunikat obsłużyć, albo co?

jak dla mnie bezużyteczne...
dużą większość aplikacji da się wyciągnąć poza ekran... (jak np. FireFox na którym to teraz piszę :] ).