MDI CHILD CON DIALOGOS DE WORKSHOP

MDI CHILD CON DIALOGOS DE WORKSHOP

Postby jponce » Fri Apr 18, 2008 6:44 pm

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
jponce
 
Posts: 194
Joined: Fri Apr 18, 2008 4:21 pm
Location: Guatemala

Re: MDI CHILD CON DIALOGOS DE WORKSHOP

Postby mmercado » Sat Apr 19, 2008 1:20 am

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
User avatar
mmercado
 
Posts: 782
Joined: Wed Dec 19, 2007 7:50 am
Location: Salamanca, Gto., México

Postby Antonio Linares » Sat Apr 19, 2008 7:51 am

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
regards, saludos

Antonio Linares
www.fivetechsoft.com
User avatar
Antonio Linares
Site Admin
 
Posts: 41315
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain

MDICHILD

Postby jponce » Wed Apr 30, 2008 3:58 pm

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
jponce
 
Posts: 194
Joined: Fri Apr 18, 2008 4:21 pm
Location: Guatemala

Re: MDI CHILD CON DIALOGOS DE WORKSHOP

Postby jfafive » Thu Apr 09, 2009 10:53 am

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?

:(
Javier,
FWH 8.04 2008
jfafive
 
Posts: 396
Joined: Tue Mar 18, 2008 9:41 pm
Location: Marbella

Re: MDI CHILD CON DIALOGOS DE WORKSHOP

Postby Antonio Linares » Thu Apr 09, 2009 12:12 pm

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
regards, saludos

Antonio Linares
www.fivetechsoft.com
User avatar
Antonio Linares
Site Admin
 
Posts: 41315
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain

Re: MDI CHILD CON DIALOGOS DE WORKSHOP

Postby jfafive » Thu Apr 09, 2009 1:44 pm

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?
:?
Javier,
FWH 8.04 2008
jfafive
 
Posts: 396
Joined: Tue Mar 18, 2008 9:41 pm
Location: Marbella

Re: MDI CHILD CON DIALOGOS DE WORKSHOP

Postby Willi Quintana » Thu Apr 09, 2009 2:16 pm

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.)
User avatar
Willi Quintana
 
Posts: 1002
Joined: Sun Oct 09, 2005 10:41 pm
Location: Cusco - Perú

Re: MDI CHILD CON DIALOGOS DE WORKSHOP

Postby Willi Quintana » Thu Apr 09, 2009 2:17 pm

PD,, te suguiero que te cambies a PellesC
Salu2
User avatar
Willi Quintana
 
Posts: 1002
Joined: Sun Oct 09, 2005 10:41 pm
Location: Cusco - Perú

Re: MDI CHILD CON DIALOGOS DE WORKSHOP

Postby jfafive » Thu Apr 09, 2009 2:54 pm

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?
Javier,
FWH 8.04 2008
jfafive
 
Posts: 396
Joined: Tue Mar 18, 2008 9:41 pm
Location: Marbella

Re: MDI CHILD CON DIALOGOS DE WORKSHOP

Postby Willi Quintana » Fri Apr 10, 2009 7:43 pm

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
User avatar
Willi Quintana
 
Posts: 1002
Joined: Sun Oct 09, 2005 10:41 pm
Location: Cusco - Perú

Re: MDI CHILD CON DIALOGOS DE WORKSHOP

Postby jfafive » Sat Apr 11, 2009 10:28 am

Gracias Willi

Tu ejemplo funcionó perfectamente.
:P
Javier,
FWH 8.04 2008
jfafive
 
Posts: 396
Joined: Tue Mar 18, 2008 9:41 pm
Location: Marbella


Return to FiveWin para Harbour/xHarbour

Who is online

Users browsing this forum: No registered users and 90 guests