Координаты Назад В начало Вперед

Раздел <координаты> служит для указания размеров видимого элемента, например, окна или области ввода либо для указания координат панели. Координаты панели являются значением по умолчанию для координат областей ввода, описанных внутри ее.

Координаты также могут быть изменены программистом динамически обращением к функции cfsSetProp (свойства cfpRectA_X, cfpRectA_Y, cfpRectB_X, cfpRectB_Y - см. раздел "Свойства объектов, используемые в API конфигуратора").

И, наконец, пользователь может изменить координаты в процессе работы, перетаскивая рамки видимого элемента мышкой.

При скрытии окна фактические координаты сохраняются в dsk-файле, а перед показом (в т.ч. в контейнере) - загружаются из него. Если координаты менялись прикладным программистом динамически (вызовом соответствующих функций), то загрузка и сохранение координат из dsk-файла блокируется (начиная с Атлантис 5.2.03).

<координаты> = <координаты-show-at> | <координаты-bounds>

Координаты можно задать в формате конструкции show at или в формате конструкции bounds:

<координаты-show-at> = show [ at ]
  (<left>, <top>, <right>, <bottom>)
  [ fixed_X | fixed_Y ] ;
<координаты-bounds> = bounds
  (<left>, <top>, <right>, <bottom>)

Атрибуты <left> и <top> задают координаты левого верхнего угла видимого элемента, а <right> и <bottom> - координаты его правого нижнего угла. Любые из четырех перечисленных координат могут быть опущены. Запятые после последней заданной координаты указывать не обязательно:

show at (4,4,60,15);
show at (4,4);
show at (,,60);

Если какие либо координаты или весь раздел опущен, то правила наследования следующие:

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

Координаты в конструкции bounds могут быть дробными (см. Пример 5). Целая часть соответствует знакоместам, как и в конструкции show at. Дробная часть соответствует долям знакоместа (с округлением до пикселя).

Атрибут fixed_X фиксирует размер области ввода по горизонтали, а атрибут fixed_Y - по вертикали. Данные атрибуты области ввода отображаются в соответствующие свойства в конфигураторе. Нельзя фиксировать сразу две координаты. Атрибуты fixed_X и fixed_Y в конструкции bounds отсутствуют.

Атрибуты fixed_X и fixed_Y применимы только к областям ввода (screen, browse, text, embedded). Эти атрибуты нельзя использовать с областями, не являющимися областями ввода (panel).

Исключение немасштабируемых областей ввода из масштабируемой области окна производится последовательно, по одной немасштабируемой области за раз. На каждом шаге данного процесса масштабируемая область окна должна оставаться прямоугольной. Если не найдено ни одной немасштабируемой области, удовлетворяющей этому условию, процесс прекращается и все оставшиеся области считаются масштабируемыми.

Рассмотрим интерфейс из примера 3 (см. Рис. 8). На первом шаге исключается область с кнопками 1 и 2 (screen a1). Все остальные области после своего исключения оставляют непрямоугольную область. На последующих шагах будут исключены области с кнопками 3 и 4 (screen a2), затем с кнопкой 5 (screen a3), затем область без кнопок (screen a4). Список немасштабируемых областей исчерпан, оставшаяся часть окна (browse b1) становится масштабируемой областью.

В случае интерфейса из примера 4 (см. Рис. 9) обе области - как с кнопкой 1 (screen a1) так и с кнопкой 2 (screen a2) - после своего исключения оставляют непрямоугольную область. На этом список немасштабируемых областей исчерпан, причем ни одна область не исключена из масштабируемой области. Все окно становится масштабируемой областью.

Установка атрибута fixed_X или fixed_Y означает, что приложение до последней возможности будет стараться не менять соответствующий размер. Но наличие указанных атрибутов не гарантирует, что область ввода, у которой эти атрибуты были установлены, будет вести себя как область ввода с каким-либо фиксированным измерением. Таким образом, установка рассматриваемых атрибутов во включенное состояние является необходимым, но не достаточным условием того, что область ввода будет зафиксирована по одному из своих измерений.

Рис. 8 Пример областей с фиксированными размерами (см. пример 3)

Рис. 9 Некорректное описание областей с фиксированными размерами (см. пример 4)

Примеры

Пример 1

show at (4,4,60,15);

Пример 2

show at (,,4);

Пример 3

interface Patterns 'Шаблоны';
  show at (1,1,79,20);
  create view
	as select * from x$files;

screen a1 'a1';
  show (,,,4) fixed_y;
  buttons
	cmCommand11;
	cmCommand12;
<<
 <.Кнопка 1.>

 <.Кнопка 2.>
>>
end;

screen a2 'a2';
  show (65,5) fixed_x;
  buttons
	cmCommand21;
	cmCommand22;
<<
 <.Кнопка 3.>

 <.Кнопка 4.>
>>
end;

screen a3 'a3';
  show (,15,64) fixed_y;
  buttons
	cmCommand31;
<<
 <.Кнопка 5.>
>>
end;

screen a4 'a4';
  show (,5,12,14) fixed_x;
<<

>>
end;


browse b1 'b1';
  show (13,5,64,14);
  fields xf$name 'имя';
end;

Пример 4

interface Patterns2 'Шаблоны';
  show at (1,1,50,15);
  create view
	as select * from x$files;

screen a1 'a1';
  show (,,25,4) fixed_y;
  buttons
	cmCommand11;
<<
 <.Кнопка 1.>

>>
end;

screen a2 'a2';
  show (26,,,4) fixed_y;
  buttons
	cmCommand21;
<<
 <.Кнопка 2.>

>>
end;

browse b1 'b1';
  show (,5);
  fields xf$name 'имя';
end;

Пример 5

screen scrTest;
  bounds (,, 40.5, 20.1);

Версия

Начиная с Атлантис 5.2.03 блокируется загрузка и сохранение координат из dsk-файла, если координаты менялись прикладным программистом динамически.