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

Вниз

Не работает Anchors с MDIChild формой   Найти похожие ветки 

 
atruhin ©   (2007-07-13 15:11) [0]

Если создать форму MDIChild и поместить компоненты с привязкой (Anchors),
то при создании формы они расположенны не правильно.
При установке Scaled в false вроде работает нормально с большинством компонентов,
но стоит положить например TMemo, и не только, опять "косяки".
Два вопроса:
1. Как лучше кардинально решить проблемму?
2. При чем в данной ситуации Scaled?


 
atruhin ©   (2007-07-13 15:13) [1]

Причем в сети есть описание данной проблеммы, но решения так и не нашел.


 
atruhin ©   (2007-07-14 04:40) [2]

А что с MDI никто не работает?


 
TUser ©   (2007-07-14 06:22) [3]

У меня нет косяков (не заметил по крайней мере с мемой). Delphi7.


 
Однокамушкин   (2007-07-14 08:13) [4]

Думаю, что это ещё одно проявление известного дельфийского косяка: первоначальная привязка якорей осуществляется не к размерам формы в дизайнере, а к тем размерам, которые получает окно при создании во время выполнения, и если эти размеры по каким-то причинам различаются, контролы оказываются не там, где хотелось бы... Для примера положите контролы с якорями на обычную форму и поставьте ей WindowStyle = wsMaximized - этот глюк проявит себя во всей красе...

MDI-окна создаются с меньшими размерами, чем в дизайнере, тогда, когда главное окно имеет недостаточный размер, чтобы вместить их, так что попробуйте увеличить размер главного окна в дизайнере - вдруг поможет...


 
atruhin ©   (2007-07-14 10:35) [5]

> [4] Однокамушкин   (14.07.07 08:13)

Спасибо, но причина мне понятна. Не понятно как ее исправить.
> так что попробуйте увеличить размер главного окна в дизайнере
> - вдруг поможет...

Тогда дочернее окно создается больше чем в дизайнере, т.е. все тоже с точностью наоборот.

> У меня нет косяков (не заметил по крайней мере с мемой). Delphi7.

Есть. И в D7 и в BDS2006. Для воспроизведения:
- создаем новый MDI проект (стандартный мастером);
- открываем MDIChild форму удаляем Memo, добавляем 2 TEdit один привязываем к левому краю,
другой к правому. Больше ничего не меняем.
- компилируем, смотрим.


 
Однокамушкин   (2007-07-14 11:17) [6]

Кажется, нашёл способ справиться с проблемой... Надо у дочерней формы перекрыть CreateParams и там, после вызова inherited, установить значения Params.Width и Params.Height в точности равные значениям свойств Width и Height формы, установленным в дизайнере...


 
Kolan ©   (2007-07-14 11:49) [7]

> WindowStyle = wsMaximized — этот глюк проявит себя во всей
> красе&#133

Часто так делаю небыло проблем.


 
Однокамушкин   (2007-07-14 11:56) [8]


> Kolan ©   (14.07.07 11:49) [7]
> > WindowStyle = wsMaximized — этот глюк проявит себя во
> всей
> > красе…
>
> Часто так делаю небыло проблем.

Видимо, от версии Delphi зависит, проверил в Turbo Delphi - проблем нет, а вот в семёрке есть...


 
Kolan ©   (2007-07-14 12:39) [9]

> проверил в Turbo Delphi

Да у меня BDS&#133наверно поэтому.


 
atruhin ©   (2007-07-14 13:24) [10]

> Надо у дочерней формы перекрыть CreateParams и там, после
> вызова inherited, установить значения Params.Width

Спасибо. Уже что то. Я до этого пробовал, но устанавливал ДО inherited.
Теперь вопрос как узнать размер формы заданный при разработке, т.е. сделать универсальное решение?


 
atruhin ©   (2007-07-15 09:39) [11]

Подниму тему разок.
Может можно сделать универасальное решение проблеммы. Т.е. либо в CreateParams
узнать Design размеры формы, либо решить по другому.


 
sniknik ©   (2007-07-15 10:21) [12]

> узнать Design размеры формы, либо решить по другому.
а куда ты их вообще эти размеры в Design-е записываешь? там и узнавай.


 
atruhin ©   (2007-07-15 10:53) [13]

> а куда ты их вообще эти размеры в Design-е записываешь

Я никуда не записываю. Я имею ввиду размеры формы заданные в дизайнере, хранятся в dfm.
Но при создании MDIChild формы не учитываются.


 
Юрий Зотов ©   (2007-07-15 12:09) [14]

Предлагается скелет варианта решения. Скелет - это потому, что его надо доводить до ума (напр., из-за пересоздания дочернего окна его дефолтный сдвиг относительно предыдущего как бы удваивается). Но сабж работает.

type
 TForm2 = class(TForm)
 private
   FDeltaX: integer;
   FDeltaY: integer;
 protected
   procedure CreateParams(var Params: TCreateParams); override;
   procedure CreateWnd; override;
 end;

procedure TForm2.CreateParams(var Params: TCreateParams);
begin
 inherited;
 Params.Width := FDesignSize.X + FDeltaX;
 Params.Height := FDesignSize.Y + FDeltaY;
end;

procedure TForm2.CreateWnd;
begin
 inherited;
 if FDeltaX =  0 then
 begin
   FDeltaX := Width - ClientWidth;
   FDeltaY := Height - ClientHeight;
   RecreateWnd
 end;
end;


 
Однокамушкин   (2007-07-15 14:34) [15]


> Юрий Зотов ©   (15.07.07 12:09) [14]
> Предлагается скелет варианта решения.

Добавлю, что такое решение можно использовать только начиная с 6-ой версии Delphi, потому что в более ранних версиях поле FDesignSize имеет область видимости private, а не protected...



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

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

Наверх





Память: 0.48 MB
Время: 0.039 c
15-1187030303
Rouse_
2007-08-13 22:38
2007.09.23
Футболки Delphimaster


2-1188205684
Ardent
2007-08-27 13:08
2007.09.23
cookies


2-1188224563
Bora.ru
2007-08-27 18:22
2007.09.23
Запуск программы-ресурса


2-1188261728
ven0m
2007-08-28 04:42
2007.09.23
Доступ к элементам веб-формы


2-1188430458
чувак
2007-08-30 03:34
2007.09.23
как показать baloon-tip ?!





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский