Raymundo
A mi me va bien así:
1º Declaro como locales:
- Code: Select all Expand view
local hdc :=CreateDc("DISPLAY","","")
local nHor:=GetDeviceCaps(hdc,8)
local nVer:=GetDeviceCaps(hdc,10)
2º Declaro la Ventana MDICHILD así:
- Code: Select all Expand view
DEFINE WINDOW oDlg MDICHILD ;
OF Publicas:oWPpal;
FROM 30+(len(Publicas:oWPpal:oWndclient:aWnd)*15),30+(len(Publicas:oWPpal:oWndclient:aWnd)*15);
TO nver-160+(len(Publicas:oWPpal:oWndclient:aWnd)*15),nHor-30+(len(Publicas:oWPpal:oWndclient:aWnd)*15);
COLOR CLR_BLACK,CLR_WHITE;
PIXEL
3º Para activarla lo hago así, teniendo en cuenta cerrar los alias mediante el Valid(), y si hemos utilizado un listbox, ése area lo cierro con él:
- Code: Select all Expand view
ACTIVATE WINDOW oDlg ;
ON INIT oLbx:SetFocus();
ON PAINT ( oLbx:Refresh(),;
oLbx:nWidth:=oDlg:nWidth-10 ,;
oLbx:nHeight:=oDlg:nHeight-82 ,;
oTab:nWidth:=oDlg:nWidth-10 ,;
oTab:nTop:=oDlg:nHeight-52 ) ;
MAXIMIZED;
VALID ((aAlias[21])-> ( dbClosearea() ),(aAlias[26])->( dbClosearea() ),;
(aAlias[23])->( dbCloseArea() ),(aAlias[29])-> ( dbCloseArea() ),;
(aAlias[2])-> ( dbCloseArea() ),oLbx:lCloseArea(),.t. )
Luego ya en la operativa para comprobar si una ventana está abierta hago:
- Code: Select all Expand view
if AbiertaVentana( cTitulo )
return NIL
endif
y la funcion es:
- Code: Select all Expand view
FUNCTION AbiertaVentana ( cTitulo )
***********************************
local lAbierta:=.f.
local i
if len( Publicas:oWPpal:OwndClient:aWnd ) <> 0
for i = 1 to len( Publicas:oWPpal:oWndClient:aWnd )
if Publicas:oWPpal:OwndClient:aWnd[i]:ctitle = cTitulo
Publicas:oWPpal:OwndClient:aWnd[i]:normal()
lAbierta:=.t.
endif
next
endif
return lAbierta
Y tienes que tener en cuenta que si abres varias ventanas las bases de datos tienen que tener un alias distinto cada vez que abras una nueva.
Yo lo hago así:
- Code: Select all Expand view
Function CargaAlias
*******************
return { ;
cGetNewAlias( "ARTICULO" ),; // 1
cGetNewAlias( "MUNICI" ) ,; // 2
cGetNewAlias( "PROVIN" ) ,; // 3
cGetNewAlias( "PROPIE" ) ,; // 4
cGetNewAlias( "SEAT1" ) ,; // 5
cGetNewAlias( "RAPPEL" ) ,; // 6
cGetNewAlias( "EQUIPO" ) ,; // 7
cGetNewAlias( "REFEREN" ) ,; // 8
cGetNewAlias( "MATERIAL" ),; // 9
cGetNewAlias( "VEHICULO" ),; // 10
cGetNewAlias( "TIPOS" ) ,; // 11
cGetNewAlias( "CANON" ) ,; // 12
cGetNewAlias( "TEXTOS" ) ,; // 13
cGetNewAlias( "IMAGEN" ) ,; // 14
,; // 15
,; // 16
,; // 17
cGetNewAlias( "PARTE" ) ,; // 18
cGetNewAlias( "FIESTAS" ) ,; // 19
cGetNewAlias( "VACAS" ) ,; // 20
cGetNewAlias( "PROVE" ) ,; // 21
cGetNewAlias( "FACTURA" ) ,; // 22
cGetNewAlias( "ALMACEN" ) ,; // 23
cGetNewAlias( "ALBARAN" ) ,; // 24
cGetNewAlias( "EXTRAS" ) ,; // 25
cGetNewAlias( "CONDUC" ) ,; // 26
cGetNewAlias( "GASTOS" ) ,; // 27
cGetNewAlias( "REEMBOL" ) ,; // 28
cGetNewAlias( "RUTA" ) ,; // 29
cGetNewAlias( "AVISOS" ) ,; // 30
cGetNewAlias( "NALBARAN" ) ; // 31
}
- Code: Select all Expand view
function cGetNewAlias( cAlias )
*******************************
local cNewAlias, nArea := 1
if Select( cAlias ) != 0
while Select( cNewAlias := ( cAlias + ;
StrZero( nArea++, 2 ) ) ) != 0
end
else
cNewAlias = cAlias
endif
A mi me va bien de momento así
No se si ésto es lo que pedías, y perdona que la indentación sea un churro, pero en mi procesador de textos me sale bien.
Saludos
Jose Luis