O DECLARE cria muita definição pra variável usada, pra traduzir tudo que estiver no fonte pro correspondente
Código: Selecionar todos
#xcommand DEFINE WINDOW <w> ;
[ AT <row>,<col> ] ;
[ ROW <row> ] ;
[ COL <col> ] ;
...
=> ;
DECLARE WINDOW <w> ;;
_DefineChildMdiWindow ( <(w)>, <row>, <col>, <wi>, <h>, <.nominimize.>, <.nomaximize.>, <.nocaption.>, <.novscroll.>, <.nohscroll.>, <title>, <FontName>, <FontSize>, <{InitProcedure}>, <{ReleaseProcedure}>, <{ClickProcedure}>, <{GotFocusProcedure}>, <{LostFocusProcedure}>, <{SizeProcedure}>, <{MaximizeProcedure}>, <{MinimizeProcedure}>, <.focused.>, <cursor>, <{interactivecloseprocedure}>, <{MouseMoveProcedure}> )
Por exemplo, Windows.Handle é traduzido pra GetProperty( _Window, "handle" )
A criação da janela chama a rotina, NÃO É CLASSE.
Acaba entrando o DECLARE aí de novo.
E a criação da janela:
Código: Selecionar todos
FUNCTION _DefineWindow ( FormName, Caption, x, y, w, h, nominimize, nomaximize, ;
nosize, nosysmenu, nocaption, aMin, aMax, InitProcedure, ReleaseProcedure, ;
MouseDragProcedure, SizeProcedure, ClickProcedure, MouseMoveProcedure, aRGB, ;
PaintProcedure, noshow, topmost, main, icon, child, fontname, fontsize, ;
NotifyIconName, NotifyIconTooltip, NotifyIconLeftClick, GotFocus, LostFocus, ;
VirtualHeight, VirtualWidth, scrollleft, scrollright, scrollup, scrolldown, ;
hscrollbox, vscrollbox, helpbutton, MaximizeProcedure, MinimizeProcedure, cursor, ;
NoAutoRelease, InteractiveCloseProcedure, RestoreProcedure, MoveProcedure, DropProcedure, ;
mdi, palette, NotifyIconDblClick, cPanelParent, panel, NotifyBalloonClick, clientwidth, clientheight )
...
FormName := AllTrim( FormName )
...
...
mVar := '_' + FormName
...
k := AScan ( _HMG_aFormDeleted, .T. )
IF k > 0
#ifdef _NAMES_LIST_
_SetNameList( mVar , k )
#else
Public &mVar. := k
#endif
_HMG_aFormNames [ k ] := FormName
_HMG_aFormHandles [ k ] := FormHandle
_HMG_aFormActive [ k ] := .F.
_HMG_aFormType [ k ] := cType
...
#ifdef _NAMES_LIST_
_SetNameList( mVar , k )
#else
Public &mVar. := k
#endif
...
RETURN ( FormHandle )
Novamente:
Só mostrando parte de como funciona, que é diferente de HWGUI, por exemplo.
É um estilo que condenamos, mas isso não vém ao caso, porque funciona.
Com certeza isso reduz muito as possibilidades de mudança, porque tá cada vez mais preso ao formato pré-definido.
Começaram assim, implementaram essas coisas, não vão poder descartar o modelo, pra não perder compatibilidade com fontes existentes.
Mas, como eu disse, é muito usada, e funciona.
Vira e mexe os usuários tentam usar OOP em run-time, e não funciona, é lógico.
Quanto à variável linguição, de certa forma a HWGUI também tem.
Aqueles CLASSVAR nas classes, acaba sendo uma linguiça, que não chega a ser linguição.