Program napisany z nudów

Czyli miejsce, w którym można poruszać tematy nie dające przyporządkować się do pozostałych działów ale uwaga tutaj również obowiązują przyjęte zasady na forum
Awatar użytkownika
owoc_leśny
-
Posty: 40
Rejestracja: 27 sty 2007, 19:16
Kontakt:

Post autor: owoc_leśny » 09 cze 2007, 13:32

Guzer pisze:tylko nie ustawiaj na None
Apropo jak zmienić położenie okienka który nie ma belki??

Guzer
Użytkownik
Posty: 167
Rejestracja: 08 lis 2006, 18:36
Lokalizacja: Szczecin
Kontakt:

Post autor: Guzer » 09 cze 2007, 15:06

Ale chcesz ustawić sobie okno w konkretnym miejscu czy przesuwać je myszką?

Awatar użytkownika
owoc_leśny
-
Posty: 40
Rejestracja: 27 sty 2007, 19:16
Kontakt:

Post autor: owoc_leśny » 09 cze 2007, 18:21

No oczywiście że zmieniać położenie okna za pomocą kursora myszy.

Guzer
Użytkownik
Posty: 167
Rejestracja: 08 lis 2006, 18:36
Lokalizacja: Szczecin
Kontakt:

Post autor: Guzer » 09 cze 2007, 19:15

Z pamięci niewiele powiem, a jak już mówiłem nic Borlandowego nie mam u siebie, więc tylko mogę ogólną koncepcję przedstawić:
- trzeba obsługiwać zdarzenia MouseDown, MouseUp oraz MouseMove i zadeklarować jakąś zmienną typu bool, np. bool przesuwamy = false;
- w OnMouseDown ustawić sobie przesuwamy = true;
- analogicznie w OnMouseUp przesuwamy = false;
- no i teraz najważniejsze, w OnMouseMove zapamiętywać gdzieś na boku współrzędne kursora i sprawdzać o ile kursor przesunął się od ostatniego wywołania tej funkcji
- if(przesuwamy) dodać/odjąć odpowiednie wartości od właściwości okna Left i Top

tasza
Użytkownik
Posty: 1391
Rejestracja: 21 lut 2005, 15:02

Post autor: tasza » 11 cze 2007, 12:59

owoc_leśny pisze:Apropo jak zmienić położenie okienka który nie ma belki??
owoc_leśny pisze:No oczywiście że zmieniać położenie okna za pomocą kursora myszy.
Panowie mili...najskuteczniejsze są rozwiązania najprostsze.

Sztuczka polega na tym, aby:

1) do okna wewnątrz którego nastąpiło kliknięcie wysłać komunikat
WM_NCLBUTTONDOWN z parametrem HTCAPTION - okno pomyśli że kliknięto
mu w górną belkę i będzie się "wlec" za myszą jak podczas normalnej zmiany pozycji

lub

2) przechwycić obsługę meldunków WM_NCHITTEST w pętli komunikatów danego
okna i gdy jako rezultat pojawi się HTCLIENT (test w obrębie okna) podstawić
wartość HTCAPTION - oznacza kliknięcie w belkę - rezultat będzie jak wyżej.

Przykłady kodu dla BCB są tu: http://cyfbar.republika.pl/form.html#form2 polecam uwadze.

pa,
N.

ODPOWIEDZ