Blokowanie pokazania rozszerzania okna

Dyskusje na dowolny temat.

Blokowanie pokazania rozszerzania okna

Nowy postprzez Corvis » czwartek, 28 stycznia 2010, 13:40

Witam,

Mam taki problem, położyłem na formę bardzo dużo własnych kontrolek które się skalują w zależoności od wymiaru formy. No i troszkę to trwa jeżeli rozszerzam formę.

Jak zrobić :

1) Zaczynam zmieniać rozmiar okna ( czy to przez przycisk maxymalizacji, czy to ciągam myszą )
2) Wszystko się blokuje ( nic się nie zmienia, poza rozmiarem okna )
3) Kończe zmieniać rozmiar okna ( puszczam np. myszkę )
4) Wszystko się odblokowuje i tylko raz odmalowuje po zmianie rozmiaru.

Mam nadziję, że w miare prosto to opisałem :)

Pozdrawiam
"Sukcesy trwają, dopóki ich ktoś nie spieprzy. Porażki są wieczne"

Dr Gregory House
Avatar użytkownika
Corvis
Programista I
Programista I
 
Posty: 880
Dołączył(a): sobota, 26 lipca 2008, 00:31
Podziękował : 80
Otrzymał podziękowań: 30
System operacyjny: WINDOWS 7 64-bity
Kompilator: Praca - C++ Builder XE2 ENTERPRISE - Update 4, Dom - C++ Builder XE4 - Uddate 1
Gadu Gadu: 0
    NieznanyNieznana

Re: Blokowanie pokazania rozszerzania okna

Nowy postprzez Cyfrowy Baron » czwartek, 28 stycznia 2010, 14:32

Odświeżanie możesz zablokować tak:

Kod: Zaznacz cały
LockWindowUpdate(Form1->Handle);


a przywrócić tak:

Kod: Zaznacz cały
LockWindowUpdate(0);


To chyba jednak nic nie da. U mnie podczas zmiany rozmiaru okna zawartość okna się nie zmienia dopóki proces zmiany rozmiaru się nie zakończy, ale ja mam w systemie wyłączoną funkcję Pokaż zawartość okna podczas przeciągania (patrz: Ekran -> Wygląd -> Efekty -> Pokaż zawartość okna podczas przeciągania)

Jeżeli zrobisz tak:

Kod: Zaznacz cały
//---------------------------------------------------------------------------
void __fastcall TForm1::FormResize(TObject *Sender)
{
LockWindowUpdate(this->Handle);
}
//---------------------------------------------------------------------------
void __fastcall TForm1::FormPaint(TObject *Sender)
{
LockWindowUpdate(0);
}
//---------------------------------------------------------------------------


To ramki okna wogóle nie będzie widać podczas zmiany rozmiaru przy włączonej opcji Pokaż zawartość okna podczas przeciągania, przy wyłączonej nie wywoła żadnego efektu.

Jak wiec widzisz to zależy raczej od ustawień systemu.
Avatar użytkownika
Cyfrowy Baron
Administrator
Administrator
 
Posty: 4716
Dołączył(a): niedziela, 13 lipca 2008, 15:17
Podziękował : 12
Otrzymał podziękowań: 442
System operacyjny: Windows 7 x64 SP1
Kompilator: Embarcadero RAD Studio XE2
C++ Builder XE2 Update 4
SKYPE: cyfbar
Gadu Gadu: 0
    NieznanyNieznana

Re: Blokowanie pokazania rozszerzania okna

Nowy postprzez Corvis » czwartek, 28 stycznia 2010, 19:03

Dzięki baronie za odp.

Jeżeli masz czas ściągnij sobie program :

http://www.lecholpg.pl/download/LechoLe ... rivers.exe

i zobacz tam dokładnie te skalowanie jest zrobione tak, jak mi chodzi. Ten program się skaluje bez zmiany tej funkcji w windowsie co napisałeś.

Te funkcje LockUpdate... tak jak pisaleś nic nie dają :\


Pozdrawiam
"Sukcesy trwają, dopóki ich ktoś nie spieprzy. Porażki są wieczne"

Dr Gregory House
Avatar użytkownika
Corvis
Programista I
Programista I
 
Posty: 880
Dołączył(a): sobota, 26 lipca 2008, 00:31
Podziękował : 80
Otrzymał podziękowań: 30
System operacyjny: WINDOWS 7 64-bity
Kompilator: Praca - C++ Builder XE2 ENTERPRISE - Update 4, Dom - C++ Builder XE4 - Uddate 1
Gadu Gadu: 0
    NieznanyNieznana

Re: Blokowanie pokazania rozszerzania okna

Nowy postprzez Cyfrowy Baron » czwartek, 28 stycznia 2010, 19:20

Źle to nie wygląda. Taki efekt występuje prawdopodobnie dlatego, że zamiast posłużyć się właściwością Acnhors obiektów, Ty dałeś jakiś algorytm skalujący. Gdybyś ustawiał Anchors dla każdego obiektu skalowanie przebiegałoby płynnie.

Ja testy przeprowadzałem właśnie z wykorzystaniem właściwości Anchors, dlatego otrzymaliśmy różne efekty.

Więcej o Anchors przeczytasz w serwisie Cyfrowy Baron w dziale: porady -> różne -> Dostosowanie rozmiaru komponentów do zmieniającego się rozmiaru formularza.
Avatar użytkownika
Cyfrowy Baron
Administrator
Administrator
 
Posty: 4716
Dołączył(a): niedziela, 13 lipca 2008, 15:17
Podziękował : 12
Otrzymał podziękowań: 442
System operacyjny: Windows 7 x64 SP1
Kompilator: Embarcadero RAD Studio XE2
C++ Builder XE2 Update 4
SKYPE: cyfbar
Gadu Gadu: 0
    NieznanyNieznana

Re: Blokowanie pokazania rozszerzania okna

Nowy postprzez Witold » czwartek, 28 stycznia 2010, 23:59

Corvis napisał(a):2) Wszystko się blokuje ( nic się nie zmienia, poza rozmiarem okna )


Może pomogły by metody TForm::DisableAlign, TForm::EnableAlign, opis jest zachęcający..
Avatar użytkownika
Witold
Konstrukcjonista
Konstrukcjonista
 
Posty: 223
Dołączył(a): piątek, 29 sierpnia 2008, 10:53
Podziękował : 1
Otrzymał podziękowań: 14
Kompilator: bcb6, Turbo C++ Explorer
    NieznanyNieznana

Re: Blokowanie pokazania rozszerzania okna

Nowy postprzez Cyfrowy Baron » piątek, 29 stycznia 2010, 10:29

Funkcja DisableAlign() wyłącza wyrównywanie, więc jeżeli używasz do wyrównywania kontrolek właściwości Anchors to użycie funkcji DisableAlign() w zdarzeniu OnResize sprawi, że kontrolki przy zmianie rozmiaru nie zmienią swoich rozmiarów i położenia, włączenie EnableAlign() nie spowoduje automatycznego wyrównania kontrolek, pozostaną na swoim miejscu, ale przy kolejnej zmianie rozmiaru, jeżeli nie zostanie ponownie użyta funkcja DisableAlign(), zmiana położenia i rozmiaru kontrolek nastąpi względem aktualnej pozycji, a nie pozycji pierwotnej.



Przeglądając Twój program sądzę, że nie stosowałeś właściwości Anchors do sterowania położeniem i rozmiarem kontrolek, a szkoda, gdyż przy zastosowaniu tej właściwości uzyskuje się płynną zmianę położenia kontrolek na formularzy, czyli nie ma tego efektu przeskoku, który jest widoczny w Twoim programie, przy włączonym Ekran -> Wygląd -> Efekty -> Pokaż zawartość okna podczas przeciągania kontrolki zmieniają rozmiar razem z formularzem, a nie poz zmianie rozmiaru formularza jak to jest u Ciebie, przy wyłączonym Ekran -> Wygląd -> Efekty -> Pokaż zawartość okna podczas przeciągania podczas zmiany rozmiaru okna wyświetlany jest tylko zarys krawędzi okna, po zakończeniu pojawia się całe okno w nowym rozmiarze ze zmienionym już rozmiarem kontrolek, czyli też inaczej niż u Ciebie.
Avatar użytkownika
Cyfrowy Baron
Administrator
Administrator
 
Posty: 4716
Dołączył(a): niedziela, 13 lipca 2008, 15:17
Podziękował : 12
Otrzymał podziękowań: 442
System operacyjny: Windows 7 x64 SP1
Kompilator: Embarcadero RAD Studio XE2
C++ Builder XE2 Update 4
SKYPE: cyfbar
Gadu Gadu: 0
    NieznanyNieznana

Re: Blokowanie pokazania rozszerzania okna

Nowy postprzez Cyfrowy Baron » sobota, 30 stycznia 2010, 10:21

Przeglądając Twój program zacząłem się zastanawiać czy nie lepiej byłoby zastąpić autodetekcję portów COM protokołem Windows Management Instrumentation. Dzięki temu program już na starcie mógłby sprawdzić czy do któregoś z portów COM jest podłączone urządzenie, a ponieważ nie wymaga to wyliczania portów jeden po drugim jak w przypadku Twojej autodetekcji to cały proces przebiegałby szybciej.

► patrz serwis: Cyfrowy Baron dział: porady -> API -> Odczytywanie informacji o zasobach komputera za pomocą protokołu WMI.
Avatar użytkownika
Cyfrowy Baron
Administrator
Administrator
 
Posty: 4716
Dołączył(a): niedziela, 13 lipca 2008, 15:17
Podziękował : 12
Otrzymał podziękowań: 442
System operacyjny: Windows 7 x64 SP1
Kompilator: Embarcadero RAD Studio XE2
C++ Builder XE2 Update 4
SKYPE: cyfbar
Gadu Gadu: 0
    NieznanyNieznana

Re: Blokowanie pokazania rozszerzania okna

Nowy postprzez Cyfrowy Baron » sobota, 30 stycznia 2010, 18:09

Chyba się pogubiłem. Sądziłem, że podałeś link do swojego programu i chcesz wyeliminować te skokowe zmiany rozmiaru komponentów na rzecz płynnej zmiany. Ty jednak najwyraźniej chcesz to jakoś wizualizować. To co można zobaczyć w tym programie nie jest wg. mnie prawidłowe, może wygląda to efektownie, ale nie sądzę by to było zamiarem autora tego programu, jest to raczej efekt uboczny spowodowany użyciem komponentu ElastFrm.
Użycie funkcji zaproponowanych przez Witold da podobny efekt, ale nie identyczny.

Najwyraźniej mocno namieszałem, gdyż myślałem, że chcesz uzyskać efekt inny od tego widzianego w tym programie.
Avatar użytkownika
Cyfrowy Baron
Administrator
Administrator
 
Posty: 4716
Dołączył(a): niedziela, 13 lipca 2008, 15:17
Podziękował : 12
Otrzymał podziękowań: 442
System operacyjny: Windows 7 x64 SP1
Kompilator: Embarcadero RAD Studio XE2
C++ Builder XE2 Update 4
SKYPE: cyfbar
Gadu Gadu: 0
    NieznanyNieznana

Re: Blokowanie pokazania rozszerzania okna

Nowy postprzez Corvis » niedziela, 31 stycznia 2010, 10:41

Baronie mam pytanie, Dlaczego znikają wypowiedzi w tym temacie ??

Wysłałem wczoraj posta - dziś go nie ma ????
"Sukcesy trwają, dopóki ich ktoś nie spieprzy. Porażki są wieczne"

Dr Gregory House
Avatar użytkownika
Corvis
Programista I
Programista I
 
Posty: 880
Dołączył(a): sobota, 26 lipca 2008, 00:31
Podziękował : 80
Otrzymał podziękowań: 30
System operacyjny: WINDOWS 7 64-bity
Kompilator: Praca - C++ Builder XE2 ENTERPRISE - Update 4, Dom - C++ Builder XE4 - Uddate 1
Gadu Gadu: 0
    NieznanyNieznana

Re: Blokowanie pokazania rozszerzania okna

Nowy postprzez Cyfrowy Baron » niedziela, 31 stycznia 2010, 11:08

Nie wiem. Czytałem tego posta, a potem zniknął, myślałem, że ty go usunąłeś, ale co najdziwniejsze niczego nie było w logach. To się już kilka razy zdarzyło i zawsze przy sobocie, więc mogę się tylko domyślać, że to wina serwera cal.pl. Być może przy sobocie raz w miesiącu przeprowadzane są jakieś prace na tych serwerach. To wytłumaczenie jednak mnie nie przekonuje, gdyż to co zostało dodane do bazy MySQL nie może z niej tak po prostu zniknąć.

Grupa programiści posiadała możliwość edytowania postów, więc to mógłby być ktoś z tej grupy, ale nie znalazłem nic w logach, chociaż logi też można usunąć. Na wszelki wypadek zmieniłem uprawnienia dla tej grupy.
Avatar użytkownika
Cyfrowy Baron
Administrator
Administrator
 
Posty: 4716
Dołączył(a): niedziela, 13 lipca 2008, 15:17
Podziękował : 12
Otrzymał podziękowań: 442
System operacyjny: Windows 7 x64 SP1
Kompilator: Embarcadero RAD Studio XE2
C++ Builder XE2 Update 4
SKYPE: cyfbar
Gadu Gadu: 0
    NieznanyNieznana

Re: Blokowanie pokazania rozszerzania okna

Nowy postprzez Corvis » niedziela, 31 stycznia 2010, 12:04

Nic nie usuwałem, zniknęły tez posty Twoje i Witolda ( chyba, że je usunąłeś ).
"Sukcesy trwają, dopóki ich ktoś nie spieprzy. Porażki są wieczne"

Dr Gregory House
Avatar użytkownika
Corvis
Programista I
Programista I
 
Posty: 880
Dołączył(a): sobota, 26 lipca 2008, 00:31
Podziękował : 80
Otrzymał podziękowań: 30
System operacyjny: WINDOWS 7 64-bity
Kompilator: Praca - C++ Builder XE2 ENTERPRISE - Update 4, Dom - C++ Builder XE4 - Uddate 1
Gadu Gadu: 0
    NieznanyNieznana

Re: Blokowanie pokazania rozszerzania okna

Nowy postprzez Cyfrowy Baron » niedziela, 31 stycznia 2010, 12:07

Wcześniejsze posty oczywiście usunąłem. Niczego nie wnosiły do tematu. To był spór który niczego nie wnosił. Te posty począwszy od twojego pytania odnośnie usunięcia postów też zostaną usunięte, gdyż nie chcę zaśmiecać forum. Jak ktoś chce sobie podyskutować na dowolny temat to może to robić w dziale Dyskusja.
Avatar użytkownika
Cyfrowy Baron
Administrator
Administrator
 
Posty: 4716
Dołączył(a): niedziela, 13 lipca 2008, 15:17
Podziękował : 12
Otrzymał podziękowań: 442
System operacyjny: Windows 7 x64 SP1
Kompilator: Embarcadero RAD Studio XE2
C++ Builder XE2 Update 4
SKYPE: cyfbar
Gadu Gadu: 0
    NieznanyNieznana

Re: Blokowanie pokazania rozszerzania okna

Nowy postprzez Witold » niedziela, 31 stycznia 2010, 12:31

Cyfrowy Baron napisał(a):Wcześniejsze posty oczywiście usunąłem. Niczego nie wnosiły do tematu.


W ich wyniku zmieniłeś trochę treść fragmentu „Funkcja DisableAlign() wyłącza w…”. Czy wnosiły to kwestia dyskusyjna.


Jak ktoś chce sobie podyskutować na dowolny temat to może to robić w dziale Dyskusja.

Czemu więc nie skopiowałeś ich (jak już to robiłeś) do działu "Dyskusja"?
Avatar użytkownika
Witold
Konstrukcjonista
Konstrukcjonista
 
Posty: 223
Dołączył(a): piątek, 29 sierpnia 2008, 10:53
Podziękował : 1
Otrzymał podziękowań: 14
Kompilator: bcb6, Turbo C++ Explorer
    NieznanyNieznana

Re: Blokowanie pokazania rozszerzania okna

Nowy postprzez Cyfrowy Baron » niedziela, 31 stycznia 2010, 12:37

Tak dokonałem modyfikacji tego postu, gdyż jak wynikało z Twoich wypowiedzi, nie było do końca jasne, że chodzi o konkretna sytuację, gdy używana jest właściwość Anchors w połączeniu z funkcja DisableAlign() w zdarzeniu OnResize, dlatego uzupełniłem wypowiedź by było to jasne. Mój wcześniejszy wpis nie był precyzyjny, gdyż sądziłem, że dla wszystkich jest oczywiste, iż odnoszę się do swoich wcześniejszych wypowiedzi. Jak widać myliłem się.

Dlaczego nie przekopiowałem. Nie pomyślałem...
Avatar użytkownika
Cyfrowy Baron
Administrator
Administrator
 
Posty: 4716
Dołączył(a): niedziela, 13 lipca 2008, 15:17
Podziękował : 12
Otrzymał podziękowań: 442
System operacyjny: Windows 7 x64 SP1
Kompilator: Embarcadero RAD Studio XE2
C++ Builder XE2 Update 4
SKYPE: cyfbar
Gadu Gadu: 0
    NieznanyNieznana


Powrót do Dyskusje

Kto przegląda forum

Użytkownicy przeglądający ten dział: Brak zalogowanych użytkowników i 1 gość

cron