 |
Что же это вообще такое ? ;-) А это просто "приглаживание"
всех объектов на форме. То есть унификация фонта, центровки и т.д. Конечно для
этого можно использовать классы, но не всегда это делается, или если к вам попала
программа без использования классов. И вы в один момент сделаете эту форму красивой:
с красивыми фонтами, без лишних кнопочек и вообще как вам захочется.
Вот пример такой программы
Как работает:
Открываете форму, переходите в Command window и запускаете процедуру
(do format)
* Format.PRG
* c Пирожков В.В. 1997, 10.04.1997 14:00
#define C_FONTNAME "=_FONTNAME"
#define C_FONTSIZE 8
Private array tmp[1]
local i, k, j, n, m.OldErrorHandler, m.nError
m.OldErrorHandler=ON("ERROR")
ON Error Store Error() to m.nError
k=ASELOBJ(tmp)
if k > 0
for i=1 to k
if vartype(tmp[i])='O'
FormatEx(tmp[i])
endif
next
else
k=ASELOBJ(tmp,1)
if k > 0 and not tmp[1].Comment='Formatted'
with tmp[1]
* Make Dialog Window
.AutoCenter=.T.
.FontName=C_FONTNAME
.FontSize=C_FONTSIZE
.BorderStyle=2
.MinButton=.F.
.MaxButton=.F.
.DeskTop=.T.
.WindowType=1
.Icon=["_SCREEN.Icon"]
endwith
endif
endif
on Error &OldErrorHandler
Procedure FormatEx( oObj )
*
* Процедура опрашивает базовые классы объекта
* и для известных ей устанавливает
* ИМЯ ФОНТА
* РАЗМЕР ФОНТА
* и прочие параметры для разных типов классов
*
* Для объектов контейнеров опрашивает все
* дочерние ( сыновние ? ) объекты и запускает
* сама себя для всех встреченных объектов
*
if vartype( oObj ) # 'O'
Return .F.
endif
local j, n
with oObj
FormatFont()
do case
case .BaseClass="CommandButton"
.Height=24
.Width=80
case .BaseClass='TextBox'
.Margin=1
.Height=20
case .BaseClass='EditBox'
.Margin=1
case .BaseClass='Label'
.AutoSize=.T.
.BackStyle=0
case .BaseClass='OptionButton'
.AutoSize=.T.
case .BaseClass='CheckBox'
.AutoSize=.T.
case .BaseClass='Shape'
.SpecialEffect=iif(.SpecialEffect=1,0,.SpecialEffect)
case .BaseClass='ListBox'
* Пока нечего добавить к списку
case .BaseClass='ComboBox'
.Margin=1
* Пока нечего добавить в раскрывающемуся списку
case .BaseClass='PageFrame'
.TabStyle=1
for j=1 to .PageCount
FormatEx(.Pages(j))
next
case Inlist(.BaseClass,'Container','OptionGroup','Page','Column')
if .BaseClass='Container'
.SpecialEffect=iif(.SpecialEffect=2,0,.SpecialEffect)
endif
if .ControlCount > 0
for n=1 to .ControlCount
FormatEx(.Controls(n))
next
endif
case InList(.BaseClass,'CommandGroup')
if .ButtonCount > 0
for n=1 to .ButtonCount
FormatEx(.Buttons(n))
next
endif
case .BaseClass='Grid'
.AllowRowSizing=.F.
.AllowHeaderSizing=.F.
.DeleteMark=.F.
.RecordMark=.F.
.SplitBar=.F.
if .ColumnCount > 0
for n=1 to .ColumnCount
FormatEx(.Columns(n))
next
endif
case .BaseClass='Header'
.Alignment=2
endcase
endwith
Procedure FormatFont
*
* Установить фонт для текущего объекта,
* если он к него есть.
*
if type('.FontName')='C'
.FontName=C_FONTNAME
.FontSize=C_FONTSIZE
endif
Procedure FormatError( nError )
Return
|
|