Por ejemplo:
Code: Select all
@ 1,1 say oSay1 prompt "UNO" of oWnd
@ 1,1 say oSay2 prompt "DOS" of oWnd
Code: Select all
@ 1,1 say oSay1 prompt "UNO" of oWnd pixel
@ 5,15 say oSay2 prompt "DOS" of oWnd pixel
Code: Select all
@ 1,1 say oSay1 prompt "UNO" of oWnd
@ 1,1 say oSay2 prompt "DOS" of oWnd
Code: Select all
@ 1,1 say oSay1 prompt "UNO" of oWnd pixel
@ 5,15 say oSay2 prompt "DOS" of oWnd pixel
Gracias Antonio, pero la idea no es cambiar el tamaño, simplemente que se vea el say que quiero ver, has de cuenta algo asíAntonio Linares wrote:Quique,
No es necesario que les cambies el orden (zorder), lo resuelves usando la cláusula SIZE:
@ 1,1 say oSay1 prompt "UNO" of oWnd SIZE 80, 15 // por ejemplo
Prueba a cambiar el valor 15 por otros valores hasta que consigas las dimensiones deseadas
Code: Select all
@ 1, 1 say oSay1 prompt "UNO" of oWnd pixel
@ 5,15 say oSay2 prompt "DOS" of oWnd pixel
oSay1:lWantClick := .t.
oSay2:lWantClick := .t.
oSay1:bLClicked := { || subir( oSay1 ) }
oSay2:bLClicked := { || subir( oSay2 ) }
Code: Select all
#include "FiveWin.ch"
#define HWND_TOP 0
#define HWND_BOTTOM 1
#define HWND_TOPMOST -1
#define HWND_NOTOPMOST -2
static oWnd, oBmp, oSay, oBrush
function Main()
DEFINE BRUSH oBrush STYLE 'TILED'
DEFINE WINDOW oWnd
@20, 30 BITMAP oBmp FILENAME '' SIZE 200, 200 PIXEL OF oWnd
oBmp:oBrush := oBrush
@50, 10 SAY oSay PROMPT 'Hola mundo' SIZE 100, 16 PIXEL OF oWnd ;
COLOR CLR_YELLOW, CLR_RED DESIGN
oSay:blDblClick := {|| Swap( oSay ) }
oBmp:blDblClick := {|| Swap( oBmp ) }
ACTIVATE WINDOW oWnd
return nil
function Swap( oCtrl )
LOCAL nOption := Alert( 'Posicion', { 'Top', 'Bottom' } )
LOCAL nWidth, nHeight
oCtrl:CoorsUpdate()
if oCtrl:ClassName() == 'TBITMAP'
nWidth := oCtrl:nRight - oCtrl:nLeft
nHeight := oCtrl:nBottom - oCtrl:nTop
else
nWidth := oCtrl:nWidth
nHeight := oCtrl:nHeight
endif
do case
case nOption == 1
SetWindowPos( oCtrl:hWnd, HWND_TOP , oCtrl:nTop, oCtrl:nLeft, nWidth, nHeight )
case nOption == 2
SetWindowPos( oCtrl:hWnd, HWND_BOTTOM, oCtrl:nTop, oCtrl:nLeft, nWidth, nHeight )
endcase
oCtrl:SetFocus()
return nil
Hola! Estoy probando este código ya que necesito mostrar unos controles que solapen a los que hay "debajo", con el say funciona bien, pero si ponemos por ejemplo un botón, al repintarlo "solapa" encima del control que debería estar en la posición superior. ¿Alguna idea?Antonio Linares wrote:Quique,
Aqui tienes un ejemplo de como cambiar el zorder de los controles. Fijate que la clave está en llamar a la función SetWindowPos() con unos determinados parámetros. Te adjunto la documentación de ese parámetro:Code: Select all
#include "FiveWin.ch" #define HWND_TOP 0 #define HWND_BOTTOM 1 #define HWND_TOPMOST -1 #define HWND_NOTOPMOST -2 static oWnd, oBmp, oSay, oBrush function Main() DEFINE BRUSH oBrush STYLE 'TILED' DEFINE WINDOW oWnd @20, 30 BITMAP oBmp FILENAME '' SIZE 200, 200 PIXEL OF oWnd oBmp:oBrush := oBrush @50, 10 SAY oSay PROMPT 'Hola mundo' SIZE 100, 16 PIXEL OF oWnd ; COLOR CLR_YELLOW, CLR_RED DESIGN oSay:blDblClick := {|| Swap( oSay ) } oBmp:blDblClick := {|| Swap( oBmp ) } ACTIVATE WINDOW oWnd return nil function Swap( oCtrl ) LOCAL nOption := Alert( 'Posicion', { 'Top', 'Bottom' } ) LOCAL nWidth, nHeight oCtrl:CoorsUpdate() if oCtrl:ClassName() == 'TBITMAP' nWidth := oCtrl:nRight - oCtrl:nLeft nHeight := oCtrl:nBottom - oCtrl:nTop else nWidth := oCtrl:nWidth nHeight := oCtrl:nHeight endif do case case nOption == 1 SetWindowPos( oCtrl:hWnd, HWND_TOP , oCtrl:nTop, oCtrl:nLeft, nWidth, nHeight ) case nOption == 2 SetWindowPos( oCtrl:hWnd, HWND_BOTTOM, oCtrl:nTop, oCtrl:nLeft, nWidth, nHeight ) endcase oCtrl:SetFocus() return nil