FoxPro Club Главная

Конференция Решения Фотоальбом Сайт М.Дроздова Статьи Файловый архив Книга Visual FoxPro 9.0 Русский Help для Visual FoxPro
Пользователей: 9239
Вход
Автоматическое изменение размеров объектов при изменении размеров формы

Используется для автоматического изменения размеров объектов на форме при изменении размеров формы. Вы не должны ничего менять в вашей форме.Только лишь поместите класс на форму, запустите ее,изменяйте размер и увидите, что получится


 
Прислал: Неизвестно   Категория: Интерфейс


Автоматическое изменение размеров объектов при изменении размеров формы

Vresize.vcx содержит только один класс 'vresizer'. Он используется для автоматического изменения размеров объектов на форме при изменении размеров формы. Вы не должны ничего менять в вашей форме.Только лишь поместите класс на форму, запустите ее,изменяйте размер и увидите, что получится.

Известные ограничения: нет поддержки фонтов с дикретными размерами.

Копирайты и гарантии: распространяется as is и без гарантий.


 
Сделайте оценку этого решения Плохо Удовлетворительно Так себе Хорошо Отлично Текущая оценка: (4.914) Вложение [3.74]kb
Дополнения пользователей
Автоматическое изменение размеров объектов при изменении размеров формы
[+][?]
Барыга
03.03.01 10:59:40

Когда помещаю объект на форму то он почмуто теряетт свойство BaseClass и кучу прочих свойств
Порга на это ругается
Людмила
25.04.01 11:10:26

Если есть доступ к автору этой библиотеки, хотелось бы попросить его добавить свойство - изменять
размер шрифта или нет. Очень уж изменение размера шрифта не красит форму.
akudenzov@radon.ru
22.06.01 01:53:07

1. Попробуте добавить в такую форму Grid и поиграйтесь, полная муть!
2. Уменшим форму до минимума несколько раз - поля начинают перекрываться и не востанавливаются
3. По моему объектный код класса нужно делать, когда это работает

Didao
27.07.01 02:06:02

**********************************************************************
** Пропорциональная растяжка ФОРМЫ и ее объектов на разные разрешения монитора
** Obj - ссылка на Форму, nHi,nWi - начальная высота и ширина формы, nRez - ширина разрешения
** (c) DBRAD32(Obj,nHi,nWi,nRez,nH,nW,lSub)
Local nBuf,ni,np,nWWW,cBuf
 IF EMPTY(nRez)
   nRez=800
 ENDIF
 nWWW=SYSMETRIC(1)
  IF !lSub
   IF !(TYPE("obj.class")=="C" .AND. UPPER(obj.baseclass)=="FORM")
     RETURN
   ENDIF
     IF nRez==nWWW
        RETURN
     ENDIF  
    Obj.LockScreen=.T.
     ** коэффициенты изменения
      nW=nWWW/nRez
      ** ширина
     IF nWi*nW>SYSMETRIC(21)-7
      nW=(SYSMETRIC(21)-7)/nWi
     ENDIF
      ** высота
      nH=nW
     IF nHi*nW>SYSMETRIC(22)-78
      nH=(SYSMETRIC(22)-78)/nHi
     ENDIF
      Obj.Width=IIF(Obj.Width<0,0,Obj.Width)
      Obj.Height=IIF(Obj.Height<0,0,Obj.Height)    
    Obj.Width=nWi*nW
    Obj.Height=nHi*nH
    Obj.Top=Obj.Top*nH
    Obj.Left=Obj.Left*nW
  ENDIF
 ** Обычные объекты
ni=1
DO WHILE TYPE("Obj.Objects(ni).Class")=="C"
 IF TYPE("Obj.Objects(ni).Top")=="N"
  ** Запрет изм ширины колонок
  IF !UPPER(Obj.Objects(ni).Class)="COLUMN" 
    Obj.Objects(ni).Width=Obj.Objects(ni).Width*nW
  ENDIF  
 Obj.Objects(ni).Height=Obj.Objects(ni).Height*nH
 Obj.Objects(ni).Top=Obj.Objects(ni).Top*nH
 Obj.Objects(ni).Left=Obj.Objects(ni).Left*nW
 ENDIF
 IF TYPE("Obj.Objects(ni).FontSize")=="N"
  nBuf=INT(Obj.Objects(ni).FontSize*nW)  
  IF nBuf>4 .AND. nBuf<100
    Obj.Objects(ni).FontSize=nBuf 
  ENDIF  
 ENDIF 
  ** вложенные объекты
  IF TYPE("Obj.Objects(ni).Objects(1).Class")=="C"
    =FormResize(Obj.Objects(ni),,,,nH,nW,.t.)
  ENDIF  

  ** PageFrame
 np=1
 DO WHILE TYPE("Obj.Objects(ni).Pages(np).Class")=="C"
   nBuf=INT(Obj.Objects(ni).Pages(np).FontSize*nW)  
   IF nBuf>4 .AND. nBuf<100
     Obj.Objects(ni).Pages(np).FontSize=nBuf 
   ENDIF  
   ** вложенные объекты в странице
   IF TYPE("Obj.Objects(ni).Pages(np).Objects(1).Class")=="C"
     =FormResize(Obj.Objects(ni).Pages(np),,,,nH,nW,.t.)
   ENDIF  
         np=np+1
 ENDDO

   IF LOWER(Obj.Objects(ni).ParentClass)=="container" 
     =Obj.Objects(ni).Resize()
   ENDIF
        ni=ni+1
ENDDO
  IF !lSub
   Obj.LockScreen=.F.
  ENDIF 
RETURN

Белюкова Е.В.
30.01.02 11:33:56

Еще один ресайзер - здесь

Николай
01.07.02 13:07:40

Хорошее и удобное решение. Давно было нужно, но как-то руки не доходили. Спасибо.
Но есть маленькое замечание, даже не по классу, а по инициализации формы с привязкой к размеру
экрана.

1)  о вылезании за границу экрана по высоте

В Вашем примере вы увеличиваете ширину формы до ширины экрана (с коэффициетом m.kw) , а затем 
пропорционально изменяете длину формы. Если форма "толстая" (ширина больше высоты), то все хорошо.
Если же форма "длинная" - ширина меньше высоты - то высота формы становится больше высоты экрана.

Тут следует выбирать коэффициент допустимого увеличения формы как меньший из 2-х коэффициентов:
k1=ширина_экрана / ширина_формы
k2=высота_экрана / высота_формы
k=IIF(k1 m.kh , m.kh, m.kw)	
     && выбираем меньший коэфф, чтобы форма не вылезла за границу экрана 
		

  *************************************************
 .Resizer1.get_sizes()	
      && получение размеров объектов на форме
		
  *********************************
  * новые размеры формы
			
  .Width=.Width * m.scr_k_mod * m.scr_proc/100	
       && привязка ширины к экранной области
  .Height=.Height * m.scr_k_mod * m.scr_proc/100	
       && привязка ширины к экранной области

  .Resizer1.set_sizes()
  .Resizer1.get_sizes()

  .LockScreen=.F. 
  .Visible=.T.	

  *********************************
  * новое положение формы
			
  IF .AutoCenter=.T.
     .AutoCenter=.T.
  ELSE
     .Left=.Left * m.scr_k_mod * m.scr_proc/100 	
     .Top=.Top * m.scr_k_mod * m.scr_proc/100		
  ENDIF

  .Refresh		

ENDWITH	
****************************************************

В остальном все ПОКА замечательно и удобно.
Спасибо и успехов!

С уважением, Николай (nik78@aport.ru)




Николай
01.07.02 13:12:09

Текст моего сообщения здорово исказился, потому повторяю.
*********************************************************

Хорошее и удобное решение. Давно было нужно, но как-то руки не доходили. Спасибо.
Но есть маленькое замечание, даже не по классу, а по инициализации формы с привязкой к размеру
экрана.

1)  о вылезании за границу экрана по высоте

В Вашем примере вы увеличиваете ширину формы до ширины экрана (с коэффициетом m.kw) , а затем 
пропорционально изменяете длину формы. Если форма "толстая" (ширина больше высоты), то все хорошо.
Если же форма "длинная" - ширина меньше высоты - то высота формы становится больше высоты экрана.

Тут следует выбирать коэффициент допустимого увеличения формы как меньший из 2-х коэффициентов:
k1=ширина_экрана / ширина_формы
k2=высота_экрана / высота_формы
k=IIF(k1 m.kh , m.kh, m.kw)	&& выбираем меньший коэфф, чтобы форма не вылезла за
границу экрана
		

 *************************************************
 .Resizer1.get_sizes()	&& получение размеров объектов на форме
		
 *********************************
 * новые размеры формы
			
 .Width=.Width * m.scr_k_mod * m.scr_proc/100	&& привязка ширины к экранной области
 .Height=.Height * m.scr_k_mod * m.scr_proc/100	&& привязка ширины к экранной области

 .Resizer1.set_sizes()
 .Resizer1.get_sizes()

 .LockScreen=.F.
 .Visible=.T.	

 *********************************
 * новое положение формы
			
 IF .AutoCenter=.T.
  .AutoCenter=.T.
 ELSE
  .Left=.Left * m.scr_k_mod * m.scr_proc/100 		
  .Top=.Top * m.scr_k_mod * m.scr_proc/100	
 ENDIF

 .Refresh		

ENDWITH	
****************************************************

В остальном все ПОКА замечательно и удобно.
Спасибо и успехов!

С уважением, Николай (nik78@aport.ru)




Николай
01.07.02 13:14:20

К сожалению, почему-то искажается текст в середине.
Ну да ладно, идея понятна.
Успехов.

[Дополнить]



© 2000-2017 Fox Club 
При размещении любых материалов с сайта на других ресурсах- прямая ссылка на www.foxclub.ru обязательна
Яндекс.Метрика