Форум: "Начинающим";
Текущий архив: 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