Ĺadny brzuch
Mam taki problem:
Dlaczego jak umieszcze na formatke panel to od razu zajmuje cala, dalej czemu np. nie da sie ustawic zeby zajmowal gore, do czego sluza sizery, ktora kontrolka sluzy do zmieniania dynamicznie odleglosci miedzy panelami?
Domyślam się, że owa jest o wxDevCpp.
Rzeczywiście, umieszczenie panelu w środku frame powoduje to, że jest on rozciągnięty na całość i nawet zmiana rozmiarów w kodzie nieiwiele tu daje. Prawdopodobnie wynika to z faktu, że fragmenty kodu są podrzędne względem designera i tenże designer może w nich ciągle coś zmieniać. pewności co do tego nie mam, bo aż tak dokładnie nie sprawdzałem. A nie sprawdzałem dla tego, że takie problemy można ominąć w następujący sposób: na formatkę najpierw daje się wxBoxSizer, na niego kładzie się wxPanel, na ten panel kolejny typ sizera, może być wxBoxSizer. Zamiast jednego panela można położyć następny. Warto wtedy zmienić właściwość Alignment na wxEXPAND i Strech Factor na 1.
I właśnie do tego służą Sizery.
Nie bardzo wiem co rozumiesz pod pojęciem dynamicznej zmiany odległości między kontrolkami, ale zapewne odpowiedzią też będą sizery.
A tak może wyglądać przykładowo zawartość CreateGUIControls():
void testFrm::CreateGUIControls() { //Do not add custom code between //GUI Items Creation Start and GUI Items Creation End //wxDev-C++ designer will remove them. //Add the custom code before or after the blocks ////GUI Items Creation Start WxBoxSizer1 = new wxBoxSizer(wxHORIZONTAL); this->SetSizer(WxBoxSizer1); this->SetAutoLayout(true); WxPanel1 = new wxPanel(this, ID_WXPANEL1, wxPoint(0,0), wxSize(185,41)); WxBoxSizer1->Add(WxPanel1,1,wxEXPAND | wxALL,0); WxPanel2 = new wxPanel(this, ID_WXPANEL2, wxPoint(185,0), wxSize(185,41)); WxBoxSizer1->Add(WxPanel2,0,wxEXPAND | wxALL,0); SetTitle(wxT("test")); SetIcon(wxNullIcon); GetSizer()->Fit(this); GetSizer()->SetSizeHints(this); Center(); ////GUI Items Creation End }
Chodzi mi o to ze jak bede maxymalizowac okno to zeby sie wszystko ladnie rozciaglo.
Zapewne miales przyjemnosc (lub nie kto wie) korzystania z BCB, wiec tam masz ladnie ze mozesz sobie ustalac dopasowanie do gory, do boku, cala powierzchnia oraz np wykrywane sa "kolizje" panel. Po prostu w wxDevCpp jest tak ze nie da sie zrobic (przynajmniej nie umiem) panel obok panelu, w tym jeden siedzi u gorze, nizej sa 2 obok siebie z mozliwoscia zmiany rozmiaru ( panel <- | -> panel ) i na dole jeszcze jeden dopasowany do dolu.
W BCB masz opcje przy panelach (alligment) ktore mozesz ustawiac alBottom, alTop i sie ladnie dopasowuje.
nie da sie zrobic
W moim słowniku nie ma takiego zwrotu.
Da się zrobić właśnie używając Sizerów. Podaj jakiś przykład znanego programu, w którym można zobaczyć jak to ma działać, to napiszę jak to zrobić.
zanotowane.pl doc.pisz.pl pdf.pisz.pl zsf.htw.pl
Dlaczego jak umieszcze na formatke panel to od razu zajmuje cala, dalej czemu np. nie da sie ustawic zeby zajmowal gore, do czego sluza sizery, ktora kontrolka sluzy do zmieniania dynamicznie odleglosci miedzy panelami?
Domyślam się, że owa jest o wxDevCpp.
Rzeczywiście, umieszczenie panelu w środku frame powoduje to, że jest on rozciągnięty na całość i nawet zmiana rozmiarów w kodzie nieiwiele tu daje. Prawdopodobnie wynika to z faktu, że fragmenty kodu są podrzędne względem designera i tenże designer może w nich ciągle coś zmieniać. pewności co do tego nie mam, bo aż tak dokładnie nie sprawdzałem. A nie sprawdzałem dla tego, że takie problemy można ominąć w następujący sposób: na formatkę najpierw daje się wxBoxSizer, na niego kładzie się wxPanel, na ten panel kolejny typ sizera, może być wxBoxSizer. Zamiast jednego panela można położyć następny. Warto wtedy zmienić właściwość Alignment na wxEXPAND i Strech Factor na 1.
I właśnie do tego służą Sizery.
Nie bardzo wiem co rozumiesz pod pojęciem dynamicznej zmiany odległości między kontrolkami, ale zapewne odpowiedzią też będą sizery.
A tak może wyglądać przykładowo zawartość CreateGUIControls():
void testFrm::CreateGUIControls() { //Do not add custom code between //GUI Items Creation Start and GUI Items Creation End //wxDev-C++ designer will remove them. //Add the custom code before or after the blocks ////GUI Items Creation Start WxBoxSizer1 = new wxBoxSizer(wxHORIZONTAL); this->SetSizer(WxBoxSizer1); this->SetAutoLayout(true); WxPanel1 = new wxPanel(this, ID_WXPANEL1, wxPoint(0,0), wxSize(185,41)); WxBoxSizer1->Add(WxPanel1,1,wxEXPAND | wxALL,0); WxPanel2 = new wxPanel(this, ID_WXPANEL2, wxPoint(185,0), wxSize(185,41)); WxBoxSizer1->Add(WxPanel2,0,wxEXPAND | wxALL,0); SetTitle(wxT("test")); SetIcon(wxNullIcon); GetSizer()->Fit(this); GetSizer()->SetSizeHints(this); Center(); ////GUI Items Creation End }
Chodzi mi o to ze jak bede maxymalizowac okno to zeby sie wszystko ladnie rozciaglo.
Zapewne miales przyjemnosc (lub nie kto wie) korzystania z BCB, wiec tam masz ladnie ze mozesz sobie ustalac dopasowanie do gory, do boku, cala powierzchnia oraz np wykrywane sa "kolizje" panel. Po prostu w wxDevCpp jest tak ze nie da sie zrobic (przynajmniej nie umiem) panel obok panelu, w tym jeden siedzi u gorze, nizej sa 2 obok siebie z mozliwoscia zmiany rozmiaru ( panel <- | -> panel ) i na dole jeszcze jeden dopasowany do dolu.
W BCB masz opcje przy panelach (alligment) ktore mozesz ustawiac alBottom, alTop i sie ladnie dopasowuje.
nie da sie zrobic
W moim słowniku nie ma takiego zwrotu.
Da się zrobić właśnie używając Sizerów. Podaj jakiś przykład znanego programu, w którym można zobaczyć jak to ma działać, to napiszę jak to zrobić.