Blokowanie pokazania rozszerzania okna

dział ogólny

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
    Windows VistaSafari

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
    Windows XPFirefox

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
    Windows VistaChrome

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
    Windows XPFirefox

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
    Windows XPOpera

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
    Windows XPFirefox

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
    Windows XPFirefox

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
    Windows XPFirefox

Re: Blokowanie pokazania rozszerzania okna

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

Wątek ze wszystkimi wypowiedziami został przekopiowany do działu Dyskusja: http://www.programowanie.cal.pl/forum/viewtopic.php?f=24&t=841
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
    Windows XPFirefox

Re: Blokowanie pokazania rozszerzania okna

Nowy postprzez Corvis » niedziela, 31 stycznia 2010, 23:32

Baronie, czy u Ciebie ta porada którą podałeś odnośnie WMI działa dla : Win32_SerialPort ?? - u mnie nic nie zwraca. ( Pewnie dlatego, że nie mam w laptopie portów COM ) Ale mam podłączone urządzenie przez port USB ( FTDI ) - tylko te funkcje Win32_Usb.... nie wyświetlają mi go wogóle.

W sumie to nie bardzo rozumiem, jak ten protokół jest w stanie sprawdzić czy coś jest podłączone do portu i czy jest to akurat moje urządzenie ?? Przecież muszę coś do niego wysłać i poczekać, aż mi odpowie. Dopiero wtedy jestem w stawie stwierdzić czy moje urządzenie zostało podłączone.
"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
    Windows VistaChrome

Re: Blokowanie pokazania rozszerzania okna

Nowy postprzez Cyfrowy Baron » poniedziaÅ‚ek, 1 lutego 2010, 10:21

By odczytać numer portu USB pod który jest podłączony np. modem HUAWEI muszę najpierw go odszukać w Win32_PnPEntity:

Nagłówek: HUAWEI Mobile Connect - 3G Modem
ClassGuid: {________-___-___-____-zastrzeżone}
ConfigManagerErrorCode: 0
ConfigManagerUserConfig: False
CreationClassName: Win32_PnPEntity
Typ urzÄ…dzenia: HUAWEI Mobile Connect - 3G Modem
Identyfikator wystąpienia urządzenia: USB\zastrzeżone
Producent: HUAWEI Incorporated
Nazwa: HUAWEI Mobile Connect - 3G Modem
PNPDeviceID: USB\zastrzeżone
Service: Modem
Status: OK
Klasa systemu: Win32_ComputerSystem
Nazwa komputera: zastrzeżone




Mam tutaj informację, że jest to modem: Service: Modem, więc dalej szukam w sekcji Win32_POTSModem urządzenia, które ma ten sam nagłówek: Nagłówek: HUAWEI Mobile Connect - 3G Modem, czyli:


AttachedTo: COM3
Nagłówek: HUAWEI Mobile Connect - 3G Modem
ConfigManagerErrorCode: 0
ConfigManagerUserConfig: False
ConfigurationDialog: modemui.dll
CreationClassName: Win32_PotsModem
DCB: zastrzeżone
Default:zastrzeżone
Typ urzÄ…dzenia: HUAWEI Mobile Connect - 3G Modem
Identyfikator wystąpienia urządzenia: USB\zastrzeżone
DeviceType: External Modem
DriverDate: zastrzeżone
InactivityScale: "zastrzeżone"
Index: 0
MaxBaudRateToSerialPort: 115200
Model: HUAWEI Mobile Connect - 3G Modem
ModemInfPath: zastrzeżone
ModemInfSection: Modem0
Nazwa: HUAWEI Mobile Connect - 3G Modem
PNPDeviceID: USB\zastrzeżone
PortSubClass: "02"
PowerManagementSupported: False
Prefix: AT
Properties: zastrzeżone
ProviderName: HUAWEI Incorporated
Pulse: P
Reset: AT&F<cr>
ResponsesKeyName: HUAWEI Mobile Connect - 3G Modem::HUAWEI Incorporated::HUAWEI Incorporated
Status: OK
StatusInfo: 3
Klasa systemu: Win32_ComputerSystem
Nazwa komputera: zastrzeżone
Terminator: <cr>
Tone: T




jak widzisz mam tutaj podany numer portu tego urzÄ…dzenia: AttachedTo: COM3

Gdy wiadomo jakiego urządzenia szukasz, czyli jak się nazywa i jakiego jest typu, to od razu możesz go szukać we właściwej sekcji.



Co do portów szeregowych to je oczywiście wylicza, gdyż mam takowe, ale nic nie mam do nich podłączonego.



Co do tego pytania:
jak ten protokół jest w stanie sprawdzić czy coś jest podłączone do portu i czy jest to akurat moje urządzenie

To po podłączeniu dowolnego urządzenia pod port USB system musi je wykryć. Być może przyjąłem błędne założenie, że urządzenie będzie podłączane przez USB.

Za ten post autor Cyfrowy Baron otrzymał podziękowanie od:
Corvis
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
    Windows XPFirefox

Re: Blokowanie pokazania rozszerzania okna

Nowy postprzez Corvis » poniedziaÅ‚ek, 1 lutego 2010, 10:32

WIelkie dzięki potestuje to dzisiaj.

A moje urządzenie działa na port RS. Z tym, że jest połączone przez USB ( port wirtualny ). Port dynamicznie się pojawi jak podłącze urządzenie, oraz zniknie jak je odłącze.

Znalazłem je :

Kod: Zaznacz cały
Nazwa: USB Serial Port (COM26)
PNPDeviceID: FTDIBUS\VID_0403+PID_6001+A7004OLMA\0000
Service: FTSER2K


Edit.

Wiesz może jaki typ odpowiada za więcej informacji o Service: FTSER2K ??
"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
    Windows VistaSafari

Re: Blokowanie pokazania rozszerzania okna

Nowy postprzez Cyfrowy Baron » poniedziaÅ‚ek, 1 lutego 2010, 11:40

Niestety nie wiem, ale przejrzyj log i sprawdź w których typach to urządzenie się powtarza.
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
    Windows XPFirefox


Powrót do Ogólne problemy z programowaniem

Kto przeglÄ…da forum

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