Форум: "Основная";
Текущий архив: 2002.07.25;
Скачать: [xml.tar.bz2];
Внизкак сделать,чтобы дочерняя форма сохраняла размер Найти похожие ветки
← →
Андрусь (2002-07-11 12:20) [0]Привет всем! Возникла такая проблемка. Может кто сталкивался - подскажите. Есть MDI приложение. Как сделать,чтобы дочерние окна оставались такого же размера как и на этапе разработки приложения. Изменение размера на FormCreate нежелательно - на форме нах. элементы,размер которых зависит от размера формы,и прописывать их размеры тоже не хотелось бы. Я бы сказал,что скорее даже основная проблема в том ,что при изменении размера окна размеры и позиции прикреплённых элементов не изменяются.
Зараннее спасибо.
← →
Skier (2002-07-11 12:22) [1]>Андрусь
> Как сделать,чтобы дочерние окна оставались такого же размера
> как и на этапе разработки приложения.
Ты хочешь чтобы, размер формы в run-time не мог изменятся,
так ???
← →
Андрусь (2002-07-11 12:26) [2]Не совсем понял твой вопрос: я хочу,чтобы дочерняя форма в рантайме и при выполнении была одного размера.
← →
Андрусь (2002-07-11 12:52) [3]Почему то winda меняет размер childa по своему усмотрению. как этого избежать - вот в чём вопрос.
← →
Skier (2002-07-11 12:57) [4]>Андрусь
А что если в OnShow задавать размеры child-a ?
← →
Андрусь (2002-07-11 13:10) [5]Я же говорил выше,что основная проблема - прижатые элементы (с помощью anchors).Т.е. я изменяю размер формы их размер,позиция меняется. У меня много форм и не хотелось бы каждому элементу на FormShow либо FormCreate вешать обработчик с переопределением свойств и позиций.
← →
Skier (2002-07-11 13:12) [6]>Андрусь
> с помощью anchors
А что Align не подходит что ли ?
← →
Андрусь (2002-07-11 13:17) [7]Честно говоря не совсем - на форме в ряд 2 элемента - TEdit в ряд. Один фиксированного размера,прижат к правому краю,другой же - при изменении размера формы должен растягиваться вместе с ней.
← →
Skier (2002-07-11 13:33) [8]>Андрусь
Отмени все anchors у TEdit-ов, а для формы напиши :
procedure TForm1.WMSize(var Message: TWMSize);
begin
inherited;
Edit1.Left := ClientWidth - Edit1.Width;
Edit2.Left := 0;
Edit2.Width := ClientWidth - Edit1.Width;
end;
← →
Андрусь (2002-07-11 13:47) [9]Я же писал - много форм и не хочется для каждой прописывать. Хотелось бы разобраться кооординально. Меня устраивает как работает anchors. Чего винда меняет размер окна сразу,причем пускай бы меняла - черт с ним. Почему ж при этом не меняются элементы.
← →
Skier (2002-07-11 13:55) [10]>Андрусь
А как ты собираешься через anchors сделать так чтобы второй твой TEdit растягиваться вместе с формой ?
← →
Андрусь (2002-07-11 14:02) [11]Чтобы он растягивался вправо вместе с формой 3 первых свойства в true.
← →
Skier (2002-07-11 14:08) [12]>Андрусь
IMHO, это не будет работать так чтобы компонент растягивался.
Проведи эксперемент :
-Создай новое приложение
-Помести на форму TEdit3
-Поставь первые 3 свойства anchors в True.
-Поизменяй размеры формы.
О результатах пиши...
← →
Skier (2002-07-11 14:12) [13]>Андрусь
Ты хочешь чтобы TEdit растягивался как если бы
ему задали Align := alClient ???
← →
Андрусь (2002-07-11 14:19) [14]Не совсем как alClient.А так чтобы расстояния от правого края эл. до края формы и от левого до левого края не изменялись.
Но суть то не в этом. Чего размер childа меняется... :-{
← →
Skier (2002-07-11 14:37) [15]>Андрусь
> Чего размер childа меняется... :-{
Так он же в run-time "впихивается" в main-форму :(
← →
jonik pegas (2002-07-11 14:47) [16]>Андрусь
Тоже делал как у тебя-на MDI childe лежали Editы выровненные по 3
первым anchor только у меня они еще лежали на фрейме и выравнивались по нему-так там глюки вообще задолбали-edit делали width больше parent frame и никакими средствами не уменьшались. Плюнул я на это дело и отключил выравнивание справа
чтобы расстояние от правого краяя оставалось неизменным придется или делать вручную см Skier или можно попробовать на форму кинуть сетку TstringGrid и отрисовывать в нем edit по OnDrawCell.
А что касается изменения всех форм то пропиши код Skier в одной и наследуй другие от нее
← →
Андрусь (2002-07-11 14:57) [17]> jonik pegas ©
Как мне прописать для всех форм - элементы разные,поразному прилипают.Придётся писать каждый раз либо делать компоненты по-разному прижатых элементов - грустно...
> Skier ©
Чего размер чаелда меняется при вызове из гл. формы. Посмотри стандартное MDI,там чаелд махонький такой,но какого-то при вызове он приобретает не свои размеры :-{ ...
← →
FLAME (2002-07-11 15:26) [18]MDI - вообще не лучший интерфейс IMHO.
А какие значения установлены у MDIChild для свойств WindowState, Position? Наверное стоит поставить wsNormal и poDefault. Еще видимо стоит добавить BorderStyle=bsSingle, чтобы размер формы не мог меняться. В обработчике сообщения на изменение размера формы, который можно сделать общим для всех Child-форм, запретить изменение размера.
А еще интересно каким методом у тебя создаются Child-формы?
← →
Андрусь (2002-07-11 15:45) [19]>FLAME
Всё стоит как написано,создание формы
Child := TMDIChild.Create(Application);
Насчёт того,что MDI не лучший интерфейс согласен,но так надо - есть вполне независимые друг от друга формы,с которыми юзвер может работать как пожелает.
← →
Skier (2002-07-11 16:07) [20]>Андрусь
> есть вполне независимые друг от друга формы,с которыми юзвер
> может работать как пожелает
И тебе обязательно для этого MDI - интерфейс ?
(кстати насколько я помню сама Microsoft не рекомендует его
использовать (жрёт много ресурсов) )
← →
Андрусь (2002-07-11 16:24) [21]С ресурсами - вроде разобрался - через пакеты. Но такой интерфейс обязателен
← →
Skier (2002-07-11 16:32) [22]>Андрусь
:(((
← →
Андрусь (2002-07-11 16:38) [23]Ну я просил объяснить - чего винда так делает и как избежать,а вышло потрепаться.Прям как в Аське
← →
Proton (2002-07-11 23:02) [24]вот посмотри вот это
Represents the size and placement of the form.
type TPosition = (poDesigned, poDefault, poDefaultPosOnly, poDefaultSizeOnly,
poScreenCenter, poDesktopCenter, poMainFormCenter, poOwnerFormCenter);
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2002.07.25;
Скачать: [xml.tar.bz2];
Память: 0.49 MB
Время: 0.007 c