Już rozumiem o co Tobie chodzi, tylko dlaczego nie piszesz tego wprost.
Chcesz mieć okno bez obramowania z możliwością zmiany rozmiaru.
Niestety jest to niemożliwe. Za zmianę rozmiaru okna odpowiada parametr WS_SIZEBOX, jest to rozszerzenie stylu klasy TCreateParms odpowiedzialnej za wszystkie aspekty wyglądu okna.
Możesz ustawić właściwość BorderStyle okna na bsNone i otrzymasz okno bez paska tytułowego i bez ramki, nie będziesz mógł zmieniać jego rozmiaru. Wykorzystując klasę TCreateParams można dodać do tak utworzonego okna styl WS_SIZEBOX umożliwiając w ten sposób zmianę rozmiaru tegoż okna po uchwyceniu jego krawędzi:
- Kod: Zaznacz cały
/*
* BorderStyle = bsNone
*/
//---------------------------------------------------------------------------
void __fastcall TForm1::CreateParams(TCreateParams &Params)
{
TForm::CreateParams(Params);
Params.Style |= WS_SIZEBOX;
}
Tak więc stosując powyższy kod utworzymy okno bez paska tytułowego i bez ramki, rzecz jednak w tym, że styl WS_SIZEBOX dodaje do formularza
(jak to sugeruje nazwa tego stylu) "obudowę" umożliwiającą zmianę rozmiaru, ta "obudowa" to też jest ramka.
Tak wiec możliwość zmiany rozmiaru formularza jest niestety nierozerwalnie związana z ramką.
Czy mam racjÄ™?
Można to sprawdzić. Wystarczy ustawić BorderStyle formularza na bsSizeable, w ten sposób formularz będzie miał belkę tytułową i będzie można zmieniać jego rozmiar. Jeżeli z pomocą klasy TCreateParams usuniemy mu obramowanie, które na dobrą sprawę nie zniknie, to stracimy również możliwość zmiany rozmiaru okna:
- Kod: Zaznacz cały
/*
* BorderStyle = bsSizeable
*/
//---------------------------------------------------------------------------
void __fastcall TForm1::CreateParams(TCreateParams &Params)
{
TForm::CreateParams(Params);
Params.Style &= -WS_BORDER;
}
Kolejna ciekawostka. Ustawiamy BorderStyle na bsSizeable i usuwamy obramowanie:
- Kod: Zaznacz cały
/*
* BorderStyle = bsSizeable
*/
//---------------------------------------------------------------------------
void __fastcall TForm1::CreateParams(TCreateParams &Params)
{
TForm::CreateParams(Params);
Params.Style |= WS_POPUP;
Params.Style &= -WS_BORDER;
}
Okno nie ma ramki, ale nie ma też możliwości zmiany rozmiaru.
Dodajemy styl umożliwiający zmianę rozmiaru:
- Kod: Zaznacz cały
/*
* BorderStyle = bsSizeable
*/
//---------------------------------------------------------------------------
void __fastcall TForm1::CreateParams(TCreateParams &Params)
{
TForm::CreateParams(Params);
Params.Style |= WS_POPUP;
Params.Style &= -WS_BORDER;
Params.Style |= WS_SIZEBOX;
}
Pojawia się ramka. Dzieje się tak dlatego, że ta ramka jest niezbędna do zmiany rozmiaru okna za pomocą myszki. Tak zostało do zapisane w API systemu Windows.