Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2007.05.20;
Скачать: [xml.tar.bz2];

Вниз

Непонятки с OnResize   Найти похожие ветки 

 
Германн ©   (2007-04-20 02:34) [0]

Пишу обработчик OnResize для формы. На форме есть некий квадрат. И я хочу, чтобы он оставался квадратом при любых изменениях размеров формы.
В текст нормально работавшей до сих пор программы (до любых попыток изменения раэмеров формы)  вставил две процедуры:
procedure TForm1.FormCanResize(Sender: TObject; var NewWidth,
 NewHeight: Integer; var Resize: Boolean);
begin
   if NewWidth < NewHeight then NewHeight:=NewWidth
   else NewWidth:=NewHeight;
   Resize:=True;
end;

procedure TForm1.FormResize(Sender: TObject);
var
 i, w, n : Integer;
begin
 w:=(Form1.Height - 182) div 9;
 for i:=0 to 8 do with Doska do begin
   RowHeights[i]:=w;
   ColWidths[i]:=w;
 end;
 Doska.Height:=w*9+22;
 Doska.Width:=w*9+22;
 with Form1 do for i:=0 to ComponentCount-1 do
   if Components[i] is TPanel then begin
     TPanel(Components[i]).Width:=w-2;
     TPanel(Components[i]).Height:=w-2;
     if TPanel(Components[i]).Visible then begin
       n:=TPanel(Components[i]).Tag;
       TPanel(Components[i]).Left:=((n-1) mod 8)*(Doska.RowHeights[0]+2)+Doska.RowHeights[0]+19;
       TPanel(Components[i]).Top:=(n div 8)*(Doska.RowHeights[0]+2)+Doska.RowHeights[0]+35;
     end;
 end;
end;

На форме TPageControl c Align=OnClient и StatusBar c Align=AlBottom есс-но.

Так вот и вопрос: При запуске программы StatusBar почти не виден!
Но если любым "пользовательским" способом изменить размер формы, СтатусБар появляется. А почему его не видно при старте программы?


 
clickmaker ©   (2007-04-20 09:43) [1]

это в какой дельфи?


 
Johnmen ©   (2007-04-20 09:49) [2]


> Германн ©   (20.04.07 02:34) 

Данный код работает, как ожидается, без непоняток.
Значит есть ещё что-то влияющее на размеры контролов.


 
Германн ©   (2007-04-20 11:31) [3]


> clickmaker ©   (20.04.07 09:43) [1]
>
> это в какой дельфи?
>

Д6, ХР. (Как это я забыл указать. Склероз эт-точно :(


> Johnmen ©   (20.04.07 09:49) [2]
>
>
> > Германн ©   (20.04.07 02:34)
>
> Данный код работает, как ожидается, без непоняток.
> Значит есть ещё что-то влияющее на размеры контролов.
>

Хм. Буду посмотреть. Спасибо.


 
Германн ©   (2007-04-20 15:07) [4]

Хм.
Создаём новый проект. У формы в дизайнере ставим Height 562, Width 550. Кидаем на форму StatusBar и PageControl. У PageControl ставим Align alClient. Для формы создаем обработчик OnResize с таким кодом:
procedure TForm1.FormCanResize(Sender: TObject; var NewWidth,
 NewHeight: Integer; var Resize: Boolean);
begin
 if NewWidth < NewHeight then NewHeight:=NewWidth
 else NewWidth:=NewHeight;
 Resize:=True;
end;

Нажимаем F9 и видим сильно урезанный по высоте StatusBar. Делаем любое действие мышкой по изменению размера формы и о чудо! StatusBar восстанавливается!
Проверено на D4, D6, BDS2006.


 
Германн ©   (2007-04-20 15:11) [5]

А вот если в дизайнере у формы сделать Height <= Width всё тип-топ.


 
Johnmen ©   (2007-04-20 15:34) [6]

Не всё тип-топ. Уголок статусбара не отрисовывается...

В общем-то явление понятное, не приходит сообщение о ресайзе.


 
Johnmen ©   (2007-04-20 15:48) [7]


> Германн ©

Пропиши OnResize (не путать с OnCanResize, как это было в [4])
i:=StatusBar.Height;
StatusBar.Height:=0;
StatusBar.Height:=i;
и забей...:)


 
{RASkov}   (2007-04-20 15:49) [8]

> [4] Германн ©   (20.04.07 15:07)

Да есть фича... причем с любыми контролами и описанным FormCanResize..
Попробуй в последний момент в FormResize вызывать Realign;


 
{RASkov}   (2007-04-20 15:51) [9]

> FormCanResize.....FormResize

Естественно OnCanResize и OnResize....


 
Германн ©   (2007-04-20 16:21) [10]


> Johnmen ©   (20.04.07 15:34) [6]
>
> Не всё тип-топ. Уголок статусбара не отрисовывается...

Да. Если Height < Width, то не отрисовывается, а если Height = Width, то тип-топ :)
Уже забил... :-)


 
Johnmen ©   (2007-04-20 16:32) [11]


> Германн ©   (20.04.07 16:21) [10]

Кстати, да, я с этим сталкивался. Всё понятно, уголок скрывается справа за пределами формы, т.е. ширина статусбара оказывается больше ширины окна, а если скрывается сам статусбар, то это высота пейджконтрола оказывается больше высоты окна (клиентской части, естественно).

Короче, как сказал {RASkov} Realign помогает...


 
{RASkov} ©   (2007-04-26 22:04) [12]

Как вариант:
начало в [4] - здесь поправки.
Align"ы = alNone и у пэйджконтрола и у статусбара... у пэджконтрола Top и Left = 0 в дизайнере. У статусбара Left = 0

procedure TForm1.FormCanResize(Sender: TObject; var NewWidth,
 NewHeight: Integer; var Resize: Boolean);
begin
if NewWidth < NewHeight then NewHeight:=NewWidth
 else NewWidth:=NewHeight;
Resize:=True;
end;

procedure TForm1.FormResize(Sender: TObject);
..............
begin
 PageControl1.Width:=ClientWidth;
 PageControl1.Height:=ClientHeight-StatusBar1.Height;
 StatusBar1.Width:=ClientWidth;
 StatusBar1.Top:=ClientHeight-StatusBar1.Height;
..........
end;

навеяно веткой:
http://delphimaster.net/view/2-1177606141/
:)


 
Германн ©   (2007-04-27 01:07) [13]


> {RASkov} ©   (26.04.07 22:04) [12]

Ну теперь осталось только натравить на сей вопрос Суслика. Пусть проверит как обстоит дело в Д2007. И если также, то пусть сообщит Коду Жира. Может исправят. :-)



Страницы: 1 вся ветка

Форум: "Начинающим";
Текущий архив: 2007.05.20;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.5 MB
Время: 0.041 c
2-1177413253
Aibolit
2007-04-24 15:14
2007.05.20
как сделать таймер в создаваемом сервисе


15-1177107567
{RASkov}
2007-04-21 02:19
2007.05.20
Временный битмап


2-1178203002
M1sT
2007-05-03 18:36
2007.05.20
Нелицензионный Rave Reports...


9-1150618621
ors_archangel
2006-06-18 12:17
2007.05.20
Сихнронизация компов игры


6-1163577244
Helen
2006-11-15 10:54
2007.05.20
Закачка файла с ftp-сервера





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский