Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / FoxPro, Visual FoxPro Новый топик    Ответить
 Поскажите по Anchor у объектов и From Resize  [new]
CTAC-KO
Member

Откуда: Украина, г. Ивано-Франковск
Сообщений: 1012
Привет!

Такая ситуация: есть на форме PageFrame. Во время исполнения формы кол-во страниц может увеличиваться. Проблема в том, что при создании новой страницы все объекты на странице не анкоряццо :), т.е. если во время исполнения юзер увеличил форму в размерах, все объекты на _существующих_ страницах PageFrame-а ведут себя по соответствию с их св-вом Anchor, т.е. увеличиваются смещаются и т.п. Когда появляется новая страница на ней все объекты появляются в их изначальном положении и размере, т.е. на них как-бы не подействовало увеличение формы, оно и понятно - объекты тогда еще не существовали.

Вопрос - как на добавляемой странице всем объектам сказать что форма изменилась в размерах чтобы те соответственно по св-ву Anchor себя сместили/изменили в размерах?

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

Сейчас я сделал иначе - при добавлении страницы все размеры и положения объектов копируются (перебором всех объектов в цикле) с первой страницы (страница в классе), но опять проблема - время от времени программа падает с сообщением что мол линк на объект невалидный. Там у него как-то получается ссылка без точек, т.е. вместо PageFrame1.Page1.lbl1 получается типа PageFrame1Page1lbl1 и падение...

мож это как-то попроще можно оформить?

спасибо

вфп9
24 дек 08, 19:32    [6616317]     Ответить | Цитировать Сообщить модератору
 Re: Поскажите по Anchor у объектов и From Resize  [new]
homik
Member

Откуда:
Сообщений: 146
Я бы добавил в форму св-во, в котором храню нормальные размеры формы.
А в ините листа проверка реалных размеров формы и нормальных размеров. При несовпадении - вызывать ресайз листа.

"Сейчас я сделал иначе - при добавлении страницы все размеры и положения объектов копируются (перебором всех объектов в цикле) с первой страницы (страница в классе), но опять проблема - время от времени программа падает с сообщением что мол линк на объект невалидный. Там у него как-то получается ссылка без точек, т.е. вместо PageFrame1.Page1.lbl1 получается типа PageFrame1Page1lbl1 и падение..."

У вас что-то в консерватории.
Пользуйте
автор
Возвращается иерархия объекта для указанного объекта. Не доступна в режиме Design Time.
SYS(1272, oObjectName)
25 дек 08, 09:11    [6617459]     Ответить | Цитировать Сообщить модератору
 Re: Поскажите по Anchor у объектов и From Resize  [new]
CTAC-KO
Member

Откуда: Украина, г. Ивано-Франковск
Сообщений: 1012
Врядли там что-то по иерархии. Пришлось ввести проверку на существование аналогичного объекта на добавляемой странице, т.к. падения случались вроде бы именно там. Т.е. видимо ссылка в loThisPageChildObj получалась битая (без точек-разделителей) или m.loMainPageChildObj.Name возвращало хз че.
   * ссыла на основную (первую) страницу
   loMainPage = this.Parent.Pages(1)

   * проходим по всем объектам в основной странице и 
   * берем у них значения атрибутов Width/Height/Top/Left
   FOR EACH loMainPageChildObj IN m.loMainPage.Objects

	 * ссыла на такой же объект на текущей странице, если есть
	 IF PEMSTATUS(this,m.loMainPageChildObj.Name,5)
	    loThisPageChildObj = GETPEM(this,m.loMainPageChildObj.Name)
	 ELSE
	    loThisPageChildObj = .NULL.
	 ENDIF
	 
	 * если такой же объект найден
	 IF VARTYPE(m.loThisPageChildObj)='O'

		* если у объекта есть св-во Якорь - запомним и занулим
		lnAchorWas = 0
		IF PEMSTATUS(m.loMainPageChildObj,'Anchor',5)
		   lnAchorWas = m.loThisPageChildObj.Anchor
		   m.loThisPageChildObj.Anchor = 0
		ENDIF

		loThisPageChildObj.Width = loMainPageChildObj.Width
		loThisPageChildObj.Height = loMainPageChildObj.Height
		loThisPageChildObj.Top = loMainPageChildObj.Top
		loThisPageChildObj.Left = loMainPageChildObj.Left

		* возвращаем якорь, если тот был выставлен
		IF m.lnAchorWas > 0
		   m.loThisPageChildObj.Anchor = m.lnAchorWas
		ENDIF

	  ENDIF
	 
   ENDFOR

А по поводу запоминать где-то размеры формы - именно так я и делал первым способом.
25 дек 08, 15:49    [6620545]     Ответить | Цитировать Сообщить модератору
Все форумы / FoxPro, Visual FoxPro Ответить