FiveTech Support Forums

FiveWin / Harbour / xBase community
Board index FiveWin para Harbour/xHarbour MDI CHILD CON DIALOGOS DE WORKSHOP
Posts: 199
Joined: Fri Apr 18, 2008 04:21 PM
MDI CHILD CON DIALOGOS DE WORKSHOP
Posted: Fri Apr 18, 2008 06: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

Posts: 782
Joined: Wed Dec 19, 2007 07:50 AM
Re: MDI CHILD CON DIALOGOS DE WORKSHOP
Posted: Sat Apr 19, 2008 01: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
manuelmercado at prodigy dot net dot mx
Posts: 44162
Joined: Thu Oct 06, 2005 05:47 PM
MDI CHILD CON DIALOGOS DE WORKSHOP
Posted: Sat Apr 19, 2008 07: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
Posts: 199
Joined: Fri Apr 18, 2008 04:21 PM
MDICHILD
Posted: Wed Apr 30, 2008 03: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

Posts: 396
Joined: Tue Mar 18, 2008 09:41 PM
Re: MDI CHILD CON DIALOGOS DE WORKSHOP
Posted: 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
Posts: 44162
Joined: Thu Oct 06, 2005 05:47 PM
Re: MDI CHILD CON DIALOGOS DE WORKSHOP
Posted: 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
Posts: 396
Joined: Tue Mar 18, 2008 09:41 PM
Re: MDI CHILD CON DIALOGOS DE WORKSHOP
Posted: Thu Apr 09, 2009 01: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
Posts: 1054
Joined: Sun Oct 09, 2005 10:41 PM
Re: MDI CHILD CON DIALOGOS DE WORKSHOP
Posted: Thu Apr 09, 2009 02: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.)
Posts: 1054
Joined: Sun Oct 09, 2005 10:41 PM
Re: MDI CHILD CON DIALOGOS DE WORKSHOP
Posted: Thu Apr 09, 2009 02:17 PM

PD,, te suguiero que te cambies a PellesC
Salu2

Posts: 396
Joined: Tue Mar 18, 2008 09:41 PM
Re: MDI CHILD CON DIALOGOS DE WORKSHOP
Posted: Thu Apr 09, 2009 02: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 (fw): Select all Collapse
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
Posts: 1054
Joined: Sun Oct 09, 2005 10:41 PM
Re: MDI CHILD CON DIALOGOS DE WORKSHOP
Posted: Fri Apr 10, 2009 07: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

Posts: 396
Joined: Tue Mar 18, 2008 09:41 PM
Re: MDI CHILD CON DIALOGOS DE WORKSHOP
Posted: Sat Apr 11, 2009 10:28 AM

Gracias Willi

Tu ejemplo funcionó perfectamente.

:P

Javier,

FWH 8.04 2008

Continue the discussion