::SetControl() para 2 controles. Cómo?

::SetControl() para 2 controles. Cómo?

Postby FiveWiDi » Fri Sep 17, 2010 12:55 pm

Hola a todos,

Si quiero que un control se redimensione automáticamente (usando toda la ventana) cuando se cambia el tamaño de su ventana contenedora MDICHILD, debo usar oWnd:Setcontrol( omiCtrl ). Esto es lo normal.

Ahora bien, si tengo 2 controles RICHEDIT que quiero que ocupen la mitad horizontal de la ventana cada uno y que cuando se cambia el tamaño de su ventana contenedora MDICHILD, cómo debo hacerlo?

Es decir SetControl() me sirve para un solo control, y yo quiero utilizar 2 controles con la mitad de la ventana para cada uno. Se les ocurre como hacerlo?

Muchas gracias.
Carlos G.[url][/url]
Un Saludo
Carlos G.

FiveWin 24.02 + Harbour 3.2.0dev (r2403071241), BCC 7.7 Windows 10
FiveWiDi
 
Posts: 1078
Joined: Mon Oct 10, 2005 2:38 pm

Re: ::SetControl() para 2 controles. Cómo?

Postby FranciscoA » Fri Sep 17, 2010 1:38 pm

FiveWidi:
Creo que tendrías que usar los SPLITTERS. Busca en el foro por la palabra splitter.
Saludos.
Francisco J. Alegría P.
Chinandega, Nicaragua.

Fwxh-MySql-TMySql
User avatar
FranciscoA
 
Posts: 2112
Joined: Fri Jul 18, 2008 1:24 am
Location: Chinandega, Nicaragua, C.A.

Re: ::SetControl() para 2 controles. Cómo?

Postby FranciscoA » Fri Sep 17, 2010 3:07 pm

Hola, aquí te dejo un ejemplo de como puedes hacerlo. Espero te sea útil.
Saludos

//00000000000000000000000000000000000000000000000000
//-----------------------------
FUNCTION MISBROWSES()
local oBrw,oBrw2,oCol,oCol2,n,oDlg,oBt2
local aObjetos,nAltoIniDlg,nAnchoIniDlg,aLinColCtrls, aLinCtrls, aColCtrls
local nAltoIniLbx,nAnchoIniLbx
local Area1,Area2

local nWidthRes := GetSysMetrics(SM_CXSCREEN)
local nHeightRes := GetSysMetrics(SM_CYSCREEN)


DEFINE DIALOG oDlg RESOURCE "MISBROWSES" //debes crearlo 2 browses horizont y botones en la parte de abajo.

//EL PRIMER BROWSE
dbUseArea(.t.,,"Base1","Base1",.f.)
Area1:=Alias()

oBrw := TXBrowse():New( oDlg )
oBrw:cAlias:=(Area1)

(oBrw:cAlias)->(dbgotop())

//Tu codigo para definiciones y creacion de columnas de oBrw
* oCol = oBrw:AddCol()
* .....
* .....

oBrw:CreateFromResource(180)
oBrw:SetRDD()


//EL SEGUNDO BROWSE
dbUseArea(.t.,,"Base2","Base2",.f.)
Area2:=Alias()

oBrw2 := TXBrowse():New( oDlg )
oBrw2:cAlias:=(Area2)

(oBrw2:cAlias)->(dbgotop())

//Tu codigo para definiciones y creacion de columnas de oBrw2
* oCol2 = oBrw:AddCol()
* .....
* .....

oBrw2:CreateFromResource(181)
oBrw2:SetRDD()

REDEFINE BUTTONBMP oBt2 ID 236 OF oDlg ACTION ( oDlg:End() ) CANCEL BITMAP "SALIR" TEXTRIGHT

//Para mover los objetos deseados
aObjetos :={oBrw,oBrw2,oBt2} //los controles a mover

ACTIVATE DIALOG oDlg CENTERED ;
ON INIT ( nAltoIniDlg:=oDlg:nHeight,nAnchoIniDlg:=oDlg:nWidth,;
nAltoIniLbx:=oBrw:nHeight,nAnchoIniLbx:=oBrw:nWidth,;
aLinColCtrls:=LinColCtrl(aObjetos), aLinCtrls:=aLinColCtrls[1], aColCtrls:=aLinColCtrls[2] ,;
oDlg:SetSize(nWidthRes,nHeightRes), oDlg:Move(0,0) ,;
Posicionarlos(oDlg,oBrw,oBrw2,aObjetos,nAltoIniDlg,nAnchoIniDlg,nAltoIniLbx,nAnchoIniLbx,aLinCtrls,aColCtrls) )

//Cerrar tus dbfs?
dbCloseall()
RETURN NIL

//------------------------------------------------------------------------
Function Posicionarlos(oDlg,oBrw,oBrw2,aObjetos,nAltoIniDlg,nAnchoIniDlg,nAltoIniLbx,nAnchoIniLbx,aLinCtrls,aColCtrls)
local n:=0, nNvasLineas:=0,nNvasColumn:=0

//Conocer diferencia del tamaño que adquiere el oDlg (Resize)
nNvasLineas:= oDlg:nHeight - nAltoIniDlg
nNvasColumn:= oDlg:nWidth - nAnchoIniDlg

//colocar controles deseados en nuevas coordenadas
//Si es un listbox, cambia alto y ancho, a diferencia de los demas.
for n:=1 to len(aObjetos)
if upper(aObjetos[n]:ClassName()) == 'TWBROWSE' ; // Si es un listbox
.or. upper(aObjetos[n]:ClassName()) == 'TXBROWSE'
oBrw:nWidth := nAnchoIniLbx + nNvasColumn
oBrw:nHeight:= nAltoIniLbx + nNvasLineas
oBrw2:nWidth := oBrw:nWidth
oBrw2:Move( oBrw:nHeight+56,oBrw:nLeft() )
else
aObjetos[n]:Move( aLinCtrls[n]+nNvasLineas, aColCtrls[n] )
endif
next

oDlg:Refresh()
SysRefresh()
RETURN NIL
//00000000000000000000000000000000000000000000000000
Francisco J. Alegría P.
Chinandega, Nicaragua.

Fwxh-MySql-TMySql
User avatar
FranciscoA
 
Posts: 2112
Joined: Fri Jul 18, 2008 1:24 am
Location: Chinandega, Nicaragua, C.A.

Re: ::SetControl() para 2 controles. Cómo?

Postby FiveWiDi » Sat Sep 18, 2010 1:44 pm

FranciscoA wrote:Hola, aquí te dejo un ejemplo de como puedes hacerlo. Espero te sea útil.
Saludos


Gracias por el código, lo revisaré para adaptarlo a mi necesidad.

Un saludo
Carlos G.
Un Saludo
Carlos G.

FiveWin 24.02 + Harbour 3.2.0dev (r2403071241), BCC 7.7 Windows 10
FiveWiDi
 
Posts: 1078
Joined: Mon Oct 10, 2005 2:38 pm


Return to FiveWin para Harbour/xHarbour

Who is online

Users browsing this forum: Otto and 65 guests