Dialog de recurso incrustada en una ventana

User avatar
jose_murugosa
Posts: 943
Joined: Mon Feb 06, 2006 4:28 pm
Location: Uruguay
Contact:

Dialog de recurso incrustada en una ventana

Post by jose_murugosa »

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
Antonio Linares
Site Admin
Posts: 37481
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain
Contact:

Post by Antonio Linares »

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

#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
jose_murugosa
Posts: 943
Joined: Mon Feb 06, 2006 4:28 pm
Location: Uruguay
Contact:

Post by jose_murugosa »

Muchas gracias Antonio por tu rápida respuesta :D , lo voy a probar.
Saludos/Regards,
José Murugosa
FWH + Harbour + Bcc7. Una seda!
User avatar
Raymundo Islas M.
Posts: 590
Joined: Tue Mar 14, 2006 11:34 pm
Location: Acapulco, Gro. MEXICO

Post by Raymundo Islas M. »

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
Alfredo Arteaga
Posts: 326
Joined: Sun Oct 09, 2005 5:22 pm
Location: Mexico
Contact:

Post by Alfredo Arteaga »

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
Antonio Linares
Site Admin
Posts: 37481
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain
Contact:

Post by Antonio Linares »

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
wmormar
Posts: 1050
Joined: Fri Oct 07, 2005 10:41 pm
Location: México
Contact:

Post by wmormar »

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
Antonio Linares
Site Admin
Posts: 37481
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain
Contact:

Post by Antonio Linares »

William,

Si :-)
regards, saludos

Antonio Linares
www.fivetechsoft.com
User avatar
wmormar
Posts: 1050
Joined: Fri Oct 07, 2005 10:41 pm
Location: México
Contact:

Post by wmormar »

Antonio Linares wrote:William,

Si :-)
Gracias antonio
William, Morales
Saludos

méxico.sureste
User avatar
Raymundo Islas M.
Posts: 590
Joined: Tue Mar 14, 2006 11:34 pm
Location: Acapulco, Gro. MEXICO

Post by Raymundo Islas M. »

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: 590
Joined: Tue Mar 14, 2006 11:34 pm
Location: Acapulco, Gro. MEXICO

Post by Raymundo Islas M. »

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
Antonio Linares
Site Admin
Posts: 37481
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain
Contact:

Post by Antonio Linares »

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

Code: Select all

#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
Raymundo Islas M.
Posts: 590
Joined: Tue Mar 14, 2006 11:34 pm
Location: Acapulco, Gro. MEXICO

Post by Raymundo Islas M. »

Antonio :

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

Saludos
FWH 10.6 + xHarbour + Borland 582
User avatar
Antonio Linares
Site Admin
Posts: 37481
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain
Contact:

Post by Antonio Linares »

Raymundo,

Prueba así:

Code: Select all

#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
fgondi
Posts: 636
Joined: Fri Oct 07, 2005 6:58 am
Location: Palencia, España
Contact:

Post by fgondi »

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 GHE Sistemas Informáticos
Post Reply