Dialog de recurso incrustada en una ventana

Dialog de recurso incrustada en una ventana

Postby jose_murugosa » Fri May 18, 2007 4:27 am

Amigos,

Ya se que está en la tapa del libro, pero arranqué el libro por la mitad y en mis aplicaciones siempre he usado Dialogs, con excepción de la ventana principal.

Por alguna parte vi que puedo pasar todas mis dialogs a "Child No Border" y luego incrustarlas en ventanas para utilizar estos recursos que ya tengo hechos dentro de ventanas, y dar a los mismos nuevas ventajas.

Pero...., como no me acuerdo donde lo leí, podrían comentarme como incrusto las dialogs sin bordes en las ventanas ajustándolas al tamaño de la misma?

Gracias desde ya, y disculpen mi ignorancia. :oops:
Saludos/Regards,
José Murugosa
FWH + Harbour + Bcc7. Una seda!
User avatar
jose_murugosa
 
Posts: 1145
Joined: Mon Feb 06, 2006 4:28 pm
Location: Uruguay

Postby Antonio Linares » Fri May 18, 2007 6:49 am

José,

Aqui tienes un ejemplo de una técnica mejor aún, que consiste en cambiar los controles del diálogo a la ventana, usando la función SetParent():
Code: Select all  Expand view
#include "FiveWin.ch"

#define COLOR_BTNFACE   15

function Main()

   local oWnd

   USE Customer

   DEFINE WINDOW oWnd TITLE "Test" MDI

   ACTIVATE WINDOW oWnd ;
      ON INIT BuildChild()

return nil

function BuildChild()

   local oChild
   
   DEFINE WINDOW oChild TITLE "A Child Window" MDICHILD ;
      COLOR 0, GetSysColor( COLOR_BTNFACE )
   
   ACTIVATE WINDOW oChild ;
      ON INIT BuildDialog( oChild )
   
return nil   

function BuildDialog( oChild )

   local oDlg, oBrw, oSay, cText := "Hello World!"

   DEFINE DIALOG oDlg RESOURCE "DE_HEADER_BROWSE" OF oChild
   
   oBrw = TXBrowse():New( oDlg )
   oBrw:CreateFromResource( 10 )
   oBrw:SetRDD()
   
   REDEFINE BUTTON ID 20 OF oDlg
   REDEFINE BUTTON ID 30 OF oDlg
   REDEFINE BUTTON ID 40 OF oDlg
   REDEFINE BUTTON ID 50 OF oDlg
   REDEFINE BUTTON ID 60 OF oDlg
   REDEFINE BUTTON ID 70 OF oDlg
   REDEFINE BUTTON ID 80 OF oDlg
   REDEFINE BUTTON ID 100 OF oDlg
   REDEFINE BUTTON ID   1 OF oDlg

   REDEFINE SAY oSay VAR cText ID 90 OF oDlg

   ACTIVATE DIALOG oDlg NOWAIT ;
      ON INIT ChangeParent( oDlg, oChild )
     
   oDlg:End()   
   oChild:bResized = { || oBrw:SetSize( oChild:nWidth - 117, oChild:nHeight - 60 ),;
                                     oSay:nTop := oChild:nHeight - 55, oSay:nLeft := ( oChild:nWidth / 2 ) - oSay:nWidth / 2 }
   oChild:SetSize( 800, 400 )
   
return nil   

function ChangeParent( oDlg, oChild )

   local n
   
   for n = 1 to Len( oDlg:aControls )
      SetParent( oDlg:aControls[ n ]:hWnd, oChild:hWnd )
      AAdd( oChild:aControls, oDlg:aControls[ n ] )
   next
   
return nil

Image
regards, saludos

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

Postby jose_murugosa » Fri May 18, 2007 11:54 am

Muchas gracias Antonio por tu rápida respuesta :D , lo voy a probar.
Saludos/Regards,
José Murugosa
FWH + Harbour + Bcc7. Una seda!
User avatar
jose_murugosa
 
Posts: 1145
Joined: Mon Feb 06, 2006 4:28 pm
Location: Uruguay

Postby Raymundo Islas M. » Fri May 18, 2007 3:30 pm

Hola Antonio

Estaba tambien buscando algo como esto, pero tal y como lo comenta Jose, es posible quitarle el borde al dialogo que salga sin el caption ?

Lo que busco, es que al momento de presentar las hijas, estas salgan en una posicion determinada y sin caption ni bordes.

Saludos
FWH 10.6 + xHarbour + Borland 582
User avatar
Raymundo Islas M.
 
Posts: 592
Joined: Tue Mar 14, 2006 11:34 pm
Location: Acapulco, Gro. MEXICO

Postby Alfredo Arteaga » Fri May 18, 2007 5:35 pm

Ray, lo uso de esta forma:

DEFINE ICON oIcon RESOURCE "IconSys"
DEFINE WINDOW oWChld MDIChild FROM 1,2 TO 2,2 OF oWnd TITLE cTitle NOZOOM ICON oIcon
DEFINE DIALOG oDlg RESOURCE "Dialogo" FONT oWnd:oFont OF oWChld
...
ACTIVATE DIALOG oDlg NOWAIT VALID (oWChld:End(),.T.)
ACTIVATE WINDOW oWChld ;
ON INIT (oDlg:Move(0,0)) ;
ON RESIZE (oWChld:SetSize(oDlg:nWidth+nW,oDlg:nHeight+nH)) ;
VALID (oWChld:=Nil,Close_Dlg(),.T.)

Puedes quitara el caption y bordes con tu editor de recursos.
User avatar
Alfredo Arteaga
 
Posts: 326
Joined: Sun Oct 09, 2005 5:22 pm
Location: Mexico

Postby Antonio Linares » Fri May 18, 2007 5:38 pm

Raymundo,

Con esta nueva forma de hacerlo (SetParent()) no se llega a mostrar el diálogo. Solo se crea, se pasan sus controles a la ventana de destino y luego se destruye el diálogo
regards, saludos

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

Postby wmormar » Fri May 18, 2007 6:03 pm

Antonio Linares wrote:Raymundo,

Con esta nueva forma de hacerlo (SetParent()) no se llega a mostrar el diálogo. Solo se crea, se pasan sus controles a la ventana de destino y luego se destruye el diálogo


Antonio,

funciona con cualquier versión de FWH?

saludos
William, Morales
Saludos

méxico.sureste
User avatar
wmormar
 
Posts: 1074
Joined: Fri Oct 07, 2005 10:41 pm
Location: México

Postby Antonio Linares » Fri May 18, 2007 6:04 pm

William,

Si :-)
regards, saludos

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

Postby wmormar » Fri May 18, 2007 6:06 pm

Antonio Linares wrote:William,

Si :-)


Gracias antonio
William, Morales
Saludos

méxico.sureste
User avatar
wmormar
 
Posts: 1074
Joined: Fri Oct 07, 2005 10:41 pm
Location: México

Postby Raymundo Islas M. » Fri May 18, 2007 7:34 pm

Hola Alfredo y Antonio :

Gracias Masters :)


Empezare a probar con estas opciones antes mencionadas por uds.


Saludos
FWH 10.6 + xHarbour + Borland 582
User avatar
Raymundo Islas M.
 
Posts: 592
Joined: Tue Mar 14, 2006 11:34 pm
Location: Acapulco, Gro. MEXICO

Postby Raymundo Islas M. » Fri May 18, 2007 8:33 pm

Alfredo :

No se hice o como lo hice ( todo seguramente mal :? ) pero me salen 2 childs entrelazadas. :D , seguire probando.


Antonio :

Hay forma de "pasar" los controles del dialogo a la child que no sean "necesarios" de REDEFINIR ? i.e. los say con -1 yo uso algunos groups solo como "separadores".

Por que me paso solo los controles que estan Redefinidos.


Saludos
FWH 10.6 + xHarbour + Borland 582
User avatar
Raymundo Islas M.
 
Posts: 592
Joined: Tue Mar 14, 2006 11:34 pm
Location: Acapulco, Gro. MEXICO

Postby Antonio Linares » Sat May 19, 2007 10:26 pm

Esta función cambia de padre a todos los controles, incluyendo los que no estén redefinidos:

Code: Select all  Expand view
#define GW_CHILD      5
#define GW_HWNDNEXT   2

function ChangeParent( oDlg, oChild )

   local hCtrl := GetWindow( oDlg:hWnd, GW_CHILD )
   local n

   while hCtrl != 0
      SetParent( hCtrl, oChild:hWnd )
      hCtrl = GetWindow( hCtrl, GW_HWNDNEXT )
   end

   for n = 1 to Len( oDlg:aControls )
      AAdd( oChild:aControls, oDlg:aControls[ n ] )
   next

return nil
regards, saludos

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

Postby Raymundo Islas M. » Sun May 20, 2007 1:55 am

Antonio :

Al aplicar la nueva funcion que comentas, muestra solo el 1er control.

Saludos
FWH 10.6 + xHarbour + Borland 582
User avatar
Raymundo Islas M.
 
Posts: 592
Joined: Tue Mar 14, 2006 11:34 pm
Location: Acapulco, Gro. MEXICO

Postby Antonio Linares » Sun May 20, 2007 8:07 am

Raymundo,

Prueba así:
Code: Select all  Expand view
#define GW_CHILD      5
#define GW_HWNDNEXT   2

function ChangeParent( oDlg, oWnd )

   local hCtrl := GetWindow( oDlg:hWnd, GW_CHILD )
   local n, aChilds := {}

   while hCtrl != 0
      AAdd( aChilds, hCtrl )
      hCtrl = GetWindow( hCtrl, GW_HWNDNEXT )
   end

   AEval( aChilds, { | hCtrl | SetParent( hCtrl, oWnd:hWnd ) } )

   for n = 1 to Len( oDlg:aControls )
      AAdd( oWnd:aControls, oDlg:aControls[ n ] )
   next

return nil
regards, saludos

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

Postby fgondi » Mon May 21, 2007 10:53 am

Hola Antonio,

Gracias por esta nueva aportación

Tengo unos problemas con esta función:

1º Desde un get no funciona ni el tabulador ni el intro para cambiar a otro.

2º Uso groupbox sin redifinir en el programa (-1) para mostrar datos agrupados y con esta función no refrescan el fondo.
Image
Un saludo
Fernando González Diez
ALSIS Sistemas Informáticos
User avatar
fgondi
 
Posts: 694
Joined: Fri Oct 07, 2005 6:58 am
Location: Palencia, España

Next

Return to FiveWin para Harbour/xHarbour

Who is online

Users browsing this forum: Garbi, Google [Bot] and 40 guests