Page 1 of 1

MDI CHILD CON DIALOGOS DE WORKSHOP

PostPosted: Fri Apr 18, 2008 6:44 pm
by jponce
Hola a todos soy nuevo en el foro y recien estoy empezando a programar en xHarbour.

Yo necesito que un dialogo hecho en workshop se vuelva MDICHILD

por ejemplo:

DEFINE DIALOG oDlg OF oWnd RESOURCE “CONSULTA”

como hago para que sea MDICHILD y pueda usar otros dialogos de mi aplicación u otras opciones.

si hago

DEFINE WINDOW oWnd MDICHILD OF oWnd

asi si funciona pero tendria que dibujar manualmente los textboxes,botones.


Atentamente
Julio Ponce

Re: MDI CHILD CON DIALOGOS DE WORKSHOP

PostPosted: Sat Apr 19, 2008 1:20 am
by mmercado
Hola Julio:
jponce wrote:Hola a todos soy nuevo en el foro y recien estoy empezando a programar en xHarbour.Yo necesito que un dialogo hecho en workshop se vuelva MDICHILD

Bienvenido.

Revisa TestMdi4.prg en FWH\Samples, muestra exactamente como se hace lo que mencionas.

Saludos.

Manuel Mercado

PostPosted: Sat Apr 19, 2008 7:51 am
by Antonio Linares
Julio,

Además del ejemplo que te indica Manuel, hay otra forma que consigue eliminar el diálogo completamente y sólo usa los controles del diálogo.

Lo tienes explicado aquí:
http://fivetechsoft.com/forums/viewtopic.php?t=7034

MDICHILD

PostPosted: Wed Apr 30, 2008 3:58 pm
by jponce
OK. REVISE LOS EJEMPLOS Y LO HICE DE ESTA MANERA

function PreccosV( oWnd )


Local oDlg, aGets := { Date(), Date(),space(20) }, oGet, oLbx
Local aTot := {0,0,0,0}
LOCAL oPara := _DaPara(), nAge , oSay, oGet1, oAgen, aLinea, oLinea, oSiNo,aSiNo
LOCAL cTabla, oDb, oBase, aAgen, oBGet1,aLi,oBaset,oBGet2,opcion:=1
LOCAL aHead1:= { 'No.', 'Agencia' }
Local oFoc

Local oPreccos,fXls,cHoja,oIcon

LOCAL bLAct2:= {||(EVAL(oFoc:bSetGet,AyudaG2( oFoc, "Linea Inventario", aLi, { 'Clave','Linea Inventario' },{80,200},150,100, {187,88} )), ;
oFoc:Refresh(),oFoc:SetFocus())}

oGet := Array( 2 )
oPreccos := TempPreccos();

///LINEAS DE INVENTARIO
oDb:= _BaseDatos()
cTabla := "catlineasi"
oBaset := TMsTable():New( oDb, cTabla )
if !oBaset:Open()
return( nil )
endif
aLi := {}
If !Empty( oBaset:LastRec() )
oBaset:GoTop():Read()
While !oBaset:Eof()
Aadd( aLi, { oBaset:FieldGet( 1 ), oBaset:FieldGet( 2 ) } )
oBaset:Fetch()
EndDo
EndIf
oBaset:Destroy()

if oWndFact01 != nil
return nil
endif



DEFINE ICON oIcon RESOURCE "ICONSIS"

DEFINE DIALOG oWndFact01 TITLE "CONSULTAS PRECIOS VRS COSTOS VENDEDOR" ;
OF oWnd RESOURCE "CONSULTAS" ICON oIcon

REDEFINE DTPICKER oGet[1] VAR aGets[1] ID 105 OF oWndFact01 UPDATE //fecha 1
REDEFINE DTPICKER oGet[2] VAR aGets[2] ID 106 OF oWndFact01 UPDATE // fecha 2
REDEFINE GET oFoc VAR aGets[3] ID 103 OF oWndFact01


REDEFINE BUTTON ID 16 ;
OF oWndFact01 ;
ACTION buscar_PreccosV( oLbx, oWndFact01, oPreccos, aGets )

REDEFINE BTNBMP ID 101 OF oWndFact01 RESOURCE "EXCELEQ" ;
ACTION PreccosVExcel( aGets,opcion,oPreccos:Codigo )


TWbrowse():lHscroll:= .T.
REDEFINE LISTBOX oLbx ;
FIELDS oPreccos:Codigo , ;
oPreccos:Nombre , ;
transform(oPreccos:ventas,"999,999,999.99") , ;
transform(oPreccos:Costo ,"999,999,999.99") , ;
transform(oPreccos:margen,"999,999,999.99") , ;
transform(oPreccos:utilidad,"999,999,999.99")+"%" ;
HEADER "Código","Nombre","Ventas", "Costo","Utilidad","Margen" ;
ID 172 ;
OF oWndFact01 ;
ON DBLCLICK dobleclick_PreccosV( oPreccos, aGets , oWndFact01 ) ;
SIZES 40,380,75,75,75,50 UPDATE

oPreccos:SetBrowse( oLbx )

oLbx:nLineHeight := 16
oLbx:nHeaderHeight := 16
oLbx:nFreeze := 4
oLbx:aHJustify:={2,2,2,2,2}
oLbx:aJustify:={.t.,.f.,.t.,.t.,.t.}

oLbx:lDrawFooters :=.T.

oLbx:aActions := Array( 6 )
oLbx:aActions[1] := { || OrdenArEq( 3, 3 , oPreccos, oLbx,oWndFact01,aGets ) }
oLbx:aActions[2] := { || OrdenArEq( 2, 3 , oPreccos, oLbx,oWndFact01,aGets ) }
oLbx:aActions[3] := { || OrdenArEq( 1, 3 , oPreccos, oLbx,oWndFact01,aGets ) }
oLbx:aActions[4] := { || OrdenArEq( 4, 3 , oPreccos, oLbx,oWndFact01,aGets ) }
oLbx:aActions[5] := nil
oLbx:aActions[6] := nil


//oLbx:aFooters :={|| {"","Total",Tran(aTot[1],"9,999,999,999 "),Tran(aTot[2],"9,999,999,999 "),Tran(aTot[3],"9,999,999,999 "),Tran(aTot[4],"9,999,999,999 ") }}


oLbx:bKeyDown := {|nKey| IF(nKey = 13, dobleclick_PreccosV( oPreccos, aGets , oWndFact01 ) , ) }



REDEFINE BUTTON ID 95 OF oWndFact01 ACTION oWndFact01:End() CANCEL


ACTIVATE DIALOG oWndFact01 NOWAIT CENTER RESIZE16;
VALID ( IIF( Salida(),( oWndFact01:=NIL, .T.), .F.) ) ;
ON INIT (oBGet1 := GetBitmap(oFoc,"Ayuda",,bLAct2),;
llenarlistbox( oLbx, oWndFact01, oPreccos, Agets, aTot ) );



RETURN NIL




Y ME FUNCIONO, PERO, AHORA TENGO OTRO PROBLEMA SI ME PASO A OTRA VENTANA QUE NO SEA DE MI APLICACION ESTA QUEDA ENCIMA DE LA OTRA VENTANA.

ES DECIR POR EJEMPLO, SI YO MINIMIZO ESTA VENTANA EN MI APLICACION PUEDO USAR OTRAS OPCIONES, PERO SI ME PASO A UNA HOJA DE EXCEL POR EJEMPLO ENTONCES LA VENTANA QUEDA ENCIMA DE LA HOJA DE EXCEL.


QUE ESTOY HACIENDO MAL?

DE ANTEMANO MUY AGRADECIDO

JULIO PONCE

Re: MDI CHILD CON DIALOGOS DE WORKSHOP

PostPosted: Thu Apr 09, 2009 10:53 am
by jfafive
Hola,

Esoy implementando un MDI con dialogo como el ejemplo Testmdi4.prg que viene en Samples.
Pero he visto que tiene que ser NOMODAL porque de lo contrario, la aplicación se cuelga.

¿se puede hacer para que funcione en MODAL?

:(

Re: MDI CHILD CON DIALOGOS DE WORKSHOP

PostPosted: Thu Apr 09, 2009 12:12 pm
by Antonio Linares
Javier,

Una aplicacion MDI por definicion es no modal.

Si necesitas que no se pueda elegir otra ventana, lo que tienes que hacer es deshabilitarla, por ejemplo:

oWndChild2:Disable()

Asi se consigue un efecto similar a si fuese modal, aunque ojo que la ejecucion de la aplicacion no se detiene al mostrar el dialogo no modal, como ocurre en un dialogo modal.

Aqui se comenta como evitar el uso de un dialogo completamente, ya que los controles pasan a ser hijos de la propia ventana MDICHILD:
http://fivetechsoft.com/forums/viewtopic.php?t=7034

Re: MDI CHILD CON DIALOGOS DE WORKSHOP

PostPosted: Thu Apr 09, 2009 1:44 pm
by jfafive
Gracias Antonio,

Lo he estado mirando y creo que de momento voy a seguir usando los dialogos.
Mas vale malo conocido...... jeje
Gracias de todos modos por tu rapida respuesta.

Es bueno saberlo para futuras situaciones en las que tenga que tirar de esa ecuación.

Por cierto,
Y siguiendo con el ejemplo TestMdi4.prg....
He visto que si abro la ventana MDICHILD en modo MAXIMIZED, efectivamente me la muestra maximizada con el dialogo.
Peeeero... se puede ver como se maximiza.
¿se puede evitar esto?
:?

Re: MDI CHILD CON DIALOGOS DE WORKSHOP

PostPosted: Thu Apr 09, 2009 2:16 pm
by Willi Quintana
Hola,,
Asi evito que cambie el tamaño: (lo resaltado en color rojo hace que la windows hija "crezca" desde una esquina de la windows principal

DEFINE WINDOW oWndC MDICHILD FROM 0,0 to 2,2 OF oWnd TITLE cTitle ICON "SVITE"

DEFINE FONT oFont1 NAME "Arial" BOLD SIZE 7,15
DEFINE FONT oFont2 NAME "Courier New" SIZE 7,-13
DEFINE FONT oFont3 NAME "Arial" BOLD SIZE 12,22
DEFINE CURSOR oCursor HAND
DEFINE DIALOG oDlg RESOURCE "COMPRAS" OF oWndC
....
..
.
ACTIVATE DIALOG oDlg CENTER NOWAIT ;
ON INIT (oDlg:Move( 0, 0 ) ;
VALID (oWndC:End(), .t. )
oWndC:bGotFocus = { || oDlg:SetFocus() }
ACTIVATE WINDOW oWndC ;
ON INIT (oWndC:Move(0,0), oWndC:SetSize( oDlg:nWidth, oDlg:nHeight ) ) ;
ON RESIZE (oWndC:SetSize( oDlg:nWidth, oDlg:nHeight ) ) ; // aqui se reajusta el tamaño
VALID ( .t.)

Re: MDI CHILD CON DIALOGOS DE WORKSHOP

PostPosted: Thu Apr 09, 2009 2:17 pm
by Willi Quintana
PD,, te suguiero que te cambies a PellesC
Salu2

Re: MDI CHILD CON DIALOGOS DE WORKSHOP

PostPosted: Thu Apr 09, 2009 2:54 pm
by jfafive
Gracias Willi,

Lo he hecho y he conseguido reducuir el efecto de maximizar, bastante.
Pero aún se produce ese efecto.
Es como si en lugar de maximizarse desde media pantalla, se abriese por defecto casi maximizada
y luego se maximiza del todo.

Ademas, he visto que durante un segundo, aparece la barra de titulo de la ventana aunque en seguida desaparece.

Te muestro mi código por si puedes ver algo que esté yo haciendo mal.
Te lo agradecería.

Code: Select all  Expand view

local oWndChild, oDlg, oTab

DEFINE WINDOW oWndChild ;
   MDICHILD FROM 0,0 TO 2,2 OF oWnd NOSYSMENU NOCAPTION

oWndChild:bGotFocus  = { || oDlg:SetFocus() }

DEFINE DIALOG oDlg RESOURCE "PROPIETARIOS" OF oWndChild

ACTIVATE DIALOG oDlg ;
NOWAIT ON INIT oDlg:Move( 0, 0 ) VALID ( oWndChild:End(), .t. )

// Ajustamos anchos y altos de ventana y dialogo para que se solape
oWndChild:nWidth  := oDlg:nWidth  + 7
oWndChild:nHeight := oDlg:nHeight + 32

ACTIVATE WINDOW oWndChild MAXIMIZED ON INIT oWnd:Paint()
 



PD.- Yo ya uso pelles C. ¿en que me recomiendas que lo utilice?

Re: MDI CHILD CON DIALOGOS DE WORKSHOP

PostPosted: Fri Apr 10, 2009 7:43 pm
by Willi Quintana
Holas,,
La recomendacion a PellesC es para jponce ...
En efecto aparece la barra del titulo en la posicion indicada (FROM....) y de alli zas,,, toma el tamaño que definiste en el Resource... como puse en elejemploe que escribi, se elimina el cambiar de tamaño e al ventana, la ventana se ajusta automaticamente al tamaño de recurso...

ACTIVATE WINDOW oWndL ;
ON INIT (oWndL:Move(0,0), oWndL:SetSize( oDlg:nWidth, oDlg:nHeight ) ) ; // MAXIMIZED ;
ON RESIZE (oWndL:SetSize( oDlg:nWidth, oDlg:nHeight ) ) ;

Salu2

Re: MDI CHILD CON DIALOGOS DE WORKSHOP

PostPosted: Sat Apr 11, 2009 10:28 am
by jfafive
Gracias Willi

Tu ejemplo funcionó perfectamente.
:P