Jak to zrobić ?? Cały czas kwadrat

dział ogólny

Jak to zrobić ?? Cały czas kwadrat

Nowy postprzez Corvis » wtorek, 8 grudnia 2009, 23:10

Witam,

Mam formatkę o jakiś rozmiarach, potrzebuję wstawić tam 4 panele w taki sposób aby każdy z nich był kwadratem bez względu na rozmiar formatki. Próbowałem robić to GridPanelem ale efekt jakis mizerny ( załącznik ) Ma ktoś na to jakiś pomysł ??

Pozdrawiam,
Nie masz wystarczających uprawnień, aby zobaczyć pliki załączone do tego postu.
"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: Jak to zrobić ?? Cały czas kwadrat

Nowy postprzez Cyfrowy Baron » Å›roda, 9 grudnia 2009, 10:21

Jak rozumiem chcesz, żeby wraz ze zmieniającym sie rozmiarem formularza zmieniały się rozmiary obiektów typu TPanel, ale tak by ich proporcje zostały zachowane. Powinieneś jednak podać więcej założeń, czy na formularzu maja pojawić się paski przewijania, jeżeli rozmiar formularza nie będzie się dzielił na cztery kwadraty, czy też ma ma między kwadratami pojawić się pusta przestrzeń.

Jeżeli rozmiar formularza ma wymiary 1024 x 768 pikseli, to niestety nie podzieli się na 4 części tak by te kwadraty w całości wypełniały przestrzeń formularza.
Wszystko czego potrzebujesz to algorytmu, który będzie przeliczał rozmiar Paneli w oparciu o rozmiar formularza, musi też określać ich położenie. Całość zadania można zrealizować w zdarzeniu OnResize formularza. Jako rozmiar wyjściowy trzeba przyjąć właściwość ClientHeight formularza podzieloną przez 2.

Kod: Zaznacz cały
//---------------------------------------------------------------------------
void __fastcall TForm1::FormResize(TObject *Sender)
{
  int size;
  if(this->Width > this->Height) size = this->ClientHeight/2;
  else size = this->ClientWidth/2;

  Panel1->SetBounds(0, 0, size, size);
  Panel2->SetBounds(0, size, size, size);
  Panel3->SetBounds(size, 0, size, size);
  Panel4->SetBounds(size, size, size, size);
}
//---------------------------------------------------------------------------


Przykład w załączniku.
Nie masz wystarczających uprawnień, aby zobaczyć pliki załączone do tego postu.

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
    NieznanyNieznana

Re: Jak to zrobić ?? Cały czas kwadrat

Nowy postprzez Corvis » Å›roda, 9 grudnia 2009, 10:41

O to mi dokładnie chodziło. Wielkie dzięki Baronie !!!!!!!!!!

Po południu wrzuce ten algorytm w program i dam znać jak wyszło !!!
"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


  • Podobne tematy
    Odpowiedzi
    Wyświetlone
    Ostatni post

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 15 gości

cron