Consulta sobre centrar un dialogo.

Consulta sobre centrar un dialogo.

Postby José Camilo » Sun Jul 30, 2023 7:08 pm

Buenas Tardes Foro!!
Necesito saber si es posible centrar un Dialogo de forma horizontal solamente.
De ser posible como seria?

Gracias
José Camilo
 
Posts: 180
Joined: Wed Apr 07, 2021 3:56 pm

Re: Consulta sobre centrar un dialogo.

Postby Antonio Linares » Sun Jul 30, 2023 9:18 pm

Estimado José,

Prueba así:

oDlg:Move( oDlg:nTop, ( WndWidth( GetDesktopWindow() ) / 2 ) - ( oDlg:nWidth / 2 ), oDlg:nWidth, oDlg:nHeight, .T. )
regards, saludos

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

Re: Consulta sobre centrar un dialogo.

Postby José Camilo » Mon Jul 31, 2023 1:25 am

Gracias Maestro por su tiempo.
Lo que me sugiere provoca el mismo efecto que el CENTERED del dialogo, o sea centra horizontal y verticalmente el dialogo.
yo busco centrar solo en forma Horizontal <--- ---->.

Gracias nuevamente por su tiempo.

José Camilo
José Camilo
 
Posts: 180
Joined: Wed Apr 07, 2021 3:56 pm

Re: Consulta sobre centrar un dialogo.

Postby Antonio Linares » Mon Jul 31, 2023 4:50 am

Prueba asi:

oDlg:Move( 50, ( WndWidth( GetDesktopWindow() ) / 2 ) - ( oDlg:nWidth / 2 ), oDlg:nWidth, oDlg:nHeight, .T. )

y dime si el diálogo se posiciona hacia lo alto de la pantalla, gracias
regards, saludos

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

Re: Consulta sobre centrar un dialogo.

Postby karinha » Mon Jul 31, 2023 3:24 pm

¿Usando RECURSOS? Elimine el "CENTERED": ACTIVAR DIALOG oDlg... y en el EDITOR DE RECURSOS, informar las coordenadas deseadas.

Si no entendí su pregunta, explíquelo mejor a través de un pequeño .PRG.

Regards, saludos.
João Santos - São Paulo - Brasil - Phone: +55(11)95150-7341
User avatar
karinha
 
Posts: 7214
Joined: Tue Dec 20, 2005 7:36 pm
Location: São Paulo - Brasil

Re: Consulta sobre centrar un dialogo.

Postby José Camilo » Tue Aug 01, 2023 1:51 am

Buenas noches!!!
Antonio, con la segunda sugerencia el dialogo se ubica mas arriba que con la primera sugerencia.

Joao: buenas noches. gracias por tu interes. te comento mi problema.
He desarrollado un pequeño sistema, el tema es que ya 2 usuarios tienen pantallas de distinto tamaño que la mia y por lo tanto usan dsitintas resoluciones.
al preguntar como se hacia para centrar en las distintas resoluciones el Maestro Antonio me comento que lo usual es realizar distintos dialogos para las distintas resoluciones.
en el alto de los dialogos no tuve mayor problema, esl problema se me presenta al centrar ese dialogo en forma HORIZONTAL o sea centrar en el ancho de la pantalla.
Mi dialogo esta definido asi:
//-------------------------------------------------------------------------------------------------------------------------------------------------------------*/
function AbmCorregir()
local napu
local aBotones := {}

local oDlg, oBrw, cAlias := cGetNewAlias( "CORREGIR" )
local oBr, oFont

local titgral := 'Información Sobre Correcciones'
local atitcol := ''
local acampos := {}
local lcampos
local aBmp := { "TildeR.bmp", "TildeA.bmp", "TildeV.bmp" }

Private oBar2

acampos := {|| {str(Corregir->Numero,4),dtoc(Corregir->FechaError),Corregir->Tema,if(Corregir->Estado=1,aBtms[1], if(Corregir->Estado=2,aBtms[2],aBtms[3]) ),left(Corregir->Detalle,35),' ' } }
lcampos := {|| str(Corregir->Numero,4),dtoc(Corregir->FechaError),Corregir->Tema,if(Corregir->Estado=1,aBtms[1], if(Corregir->Estado=2,aBtms[2],aBtms[3]) ) }
atitcol := {"Numero","Fecha","Tema","Est","Detalle"," "}

// imagen tooltip en boton en tooltip
aBotones := { {"User.bmp" ,"Agrego Registro " , "Agregar" , {|| (EditCorrijo(.t.),oBrw:SetFocus(),oBrw:refresh()) },VK_INSERT,"<Insert>",.f.},;
{"Borrar.bmp" ,"Borro Registro " , "Borrar" , {|| (if(Borro(),dbdelete(),NIL),oBrw:SetFocus(),oBrw:refresh()) },VK_DELETE,"<Delete>",.f.},;
{"Editar.bmp" ,"Modifico Registro" , "Modificar" , {|| (EditCorrijo(.f.),oBrw:refresh()),oBrw:SetFocus() },VK_RETURN,"<Return>",.f.},;
{"Exit.bmp" ,"Sale de Browse " , "Salir" , {|| oDlg:end() },VK_ESCAPE,"<Escape>",.t.} ;
}

SET DATE ITALIAN
SET CENTURY ON
XBrNumFormat( 'E', .t. )
SetBalloon( .t. )

dbcloseall()
use colorfw new
use tecnico new
use acciones index accione1 new
use corregir index corregi1 new
dbgoTOP()

DEFINE FONT oFont NAME "TAHOMA" SIZE 0,-15
DEFINE BRUSH oBr RESOURCE "beige2"

// con esta definicion es lo mas cerca del medio que logro
// DEFINE DIALOG oDlg FROM 110, 370 TO 668, 990 FONT oFont TITLE 'Correcciones' PIXEL

// con esta que esta decentrada es para la prueba con lo que sugirio ANTONIO
DEFINE DIALOG oDlg FROM 110, 70 TO 668, 690 FONT oFont TITLE 'Correcciones' PIXEL

@ 4,5 XBROWSE oBrw ;
COLUMNS "Numero", "FechaError","Tema",{|| aBmp[ Corregir->Estado ] } ;
HEADERS " Nro ","Fecha","Tema","Estado";
COLSIZES 50,20,290,50 OF oDlg ;
SIZE 300,238 PIXEL ;
JUSTIFY .T.,.f.,.f.,.t. ;
ALIAS cAlias AUTOSORT FOOTERS LINES CELL NOBORDER ;
Font oFont;
BACKGROUND aGrad VERTICAL

oBrw:nStretchCol := 2
oBrw:nRowHeight := 30
oBrw:nMarqueeStyle := 4
// anulo el doble color d los registros
oBrw:lContrastClr := .f.

// quitar barra horizontal
oBrw:lHScroll := .F.

oBrw:aCols[ 4 ]:cDataType := "F"
oBrw:aCols[ 2 ]:nWidth := 20

oBrw:bKeyDown:={|nKey,nFlag|iif(veo(@nApu,@oBrw,aBotones,nKey),eval(aBotones[nApu,4]),NIL)}
oBrw:bLDblClick := { |nRow,nCol,nKeyFlags|/*EditCorrijo(.f.),*/oBrw:Refresh()}

oBrw:nHeadStrAligns := AL_CENTER // alinea al centro las cabeceras de columnas

oBrw:CreateFromCode()

cGrad := PadR( GradStr( BrwGrad( oBrw ) ), 128 )
ACTIVATE DIALOG oDlg on INIT (BtnBarNew( oBrw, @oDlg, aBotones),oDlg:Move( oDlg:nTop, ( WndWidth( GetDesktopWindow() ) / 2 ) - ( oDlg:nWidth / 2 ), oDlg:nWidth, oDlg:nHeight, .T. ))
// ACTIVATE DIALOG oDlg on INIT (BtnBarNew( oBrw, @oDlg, aBotones),oDlg:Move( 50, ( WndWidth( GetDesktopWindow() ) / 2 ) - ( oDlg:nWidth / 2 ), oDlg:nWidth, oDlg:nHeight, .T. ))


//oDlg:Move( oDlg:nTop, ( WndWidth( GetDesktopWindow() ) / 2 ) - ( oDlg:nWidth / 2 ), oDlg:nWidth, oDlg:nHeight, .T. ) primera

//oDlg:Move( 50, ( WndWidth( GetDesktopWindow() ) / 2 ) - ( oDlg:nWidth / 2 ), oDlg:nWidth, oDlg:nHeight, .T. )

RELEASE BRUSH oBr
RELEASE FONT oFont

dbcloseall()
return nil
//-------------------------------------------------------------------------------------------------------------------------------------------------------------//

espero haberte aclarado mi problema.

Gracias
un Abrazo
José Camilo
 
Posts: 180
Joined: Wed Apr 07, 2021 3:56 pm

Re: Consulta sobre centrar un dialogo.

Postby José Camilo » Tue Aug 01, 2023 2:00 am

Le pido disculpas Antonio por mi lentitud de entendimiento.!!!!
su ejemplo se reduce a poner como la primera variable ( oDlg:nTop ) lo que yo ya tengo resuelto, el resto de su ejemplo es lo que hace lo que necesito que es centrar el dialogo en el ancho de la pantalla. :oops: !!!!

Gracias!!!! y disculpas nuevamente.!!!

José Camilo
José Camilo
 
Posts: 180
Joined: Wed Apr 07, 2021 3:56 pm

Re: Consulta sobre centrar un dialogo.

Postby karinha » Tue Aug 01, 2023 1:47 pm

Prueba asi:

Code: Select all  Expand view

// Cambiado por: kapiabafwh@gmail.com - 17/11/2020 - Covid-19.

#Include "fivewin.ch"
#Include "constant.ch"
#Include "ttitle.ch"
#Include "Combos.ch"

#Define CLR_LGREEN     nRGB( 190, 215, 190 )

STATIC cSeek   := ''
STATIC oSeek
STATIC nField
STATIC cIniFile

REQUEST HB_Lang_IT
REQUEST HB_CODEPAGE_ITWIN

ANNOUNCE RDDSYS
REQUEST OrdKeyNo, OrdKeyCount, OrdCreate, OrdKeyGoto
REQUEST DBFCDX, DBFFPT

FUNCTION Main()

   FIELD FIRST, LAST, CITY, STATE, CUST

   LOCAL cDbf    := "Cust"
   LOCAL aBrowse := ARRAY( 10 )
   LOCAL BEDIT

   HB_LangSelect( "IT" )
   HB_SetCodePage( "ITWIN" )

   SET CENTURY ON
   SET DATE ITALIAN
   SET EPOCH TO YEAR( DATE() ) - 30

   RDDSetDefault( 'DBFCDX' )

   // ??? Para que sirve, Silvio?
   cIniFile := cFilePath( GetModuleFileName( GetInstance() ) ) + "tabledb.ini"

   USE CUSTOMER NEW ALIAS CUST

   INDEX ON FIRST TAG FIRST TO TMFIRST  MEMORY
   INDEX ON LAST  TAG LAST  TO TMPLAST  MEMORY
   INDEX ON CITY  TAG CITY  TO TMPCITY  MEMORY
   INDEX ON STATE TAG STATE TO TMPSTATE MEMORY

   GO TOP

   // { field, header, picture, size, justify, sortorder }

   aBrowse   := { { "CUST->FIRST",  "First",,   120, }, ;
                  { "CUST->LAST",   "Last", ,   120, }, ;
                  { "CUST->STREET", "Street", , 180, }, ;
                  { "CUST->CITY",   "City", ,   150, }, ;
                  { "CUST->STATE",  "State", ,   50, } }

   bedit := { || MsgInfo( "modify" ) }

   TableDb( aBrowse, cDbf, "Customers table", "Cust", bedit )

RETURN NIL

FUNCTION TableDb( aBrowse, cDbf, cTitle, cPrefix, bedit )

   LOCAL oTabella, oBar, oCol, I, oImg, oTitle
   LOCAL oBrw, oSay1, oSay2
   LOCAL oFont, oFontSmall, oBold
   LOCAL oCursorBtn := TCursor():New( , 'HAND' )
   LOCAL nBottom  := 28
   LOCAL nRight   := 99.9
   LOCAL nWidth   :=  Max( nRight * DLG_CHARPIX_W, 180 )
   LOCAL nHeight  := nBottom * DLG_CHARPIX_H
   LOCAL aBtnBrow := array( 4 )
   LOCAL aBtnNav  := array( 4 )
   LOCAL cSearch  := SPACE( 20 )
   LOCAL aGet     := ARRAY( 5 )
   LOCAL cField   := ""
   LOCAL aHdrs    := {}  //Headers
   LOCAL aColumns := {}
   LOCAL n
   // da personalizzare
   // LOCAL cImage := "C:\Work\fwh\bitmaps\contact.bmp"
   LOCAL cImage := "C:\FWH1905\bitmaps\browse.bmp"
   LOCAL cTitle1 := "Customers"
   // LOCAL cTitle2 := "Insert the customer to search"
   LOCAL cTitle2 := "Busqueda Incremental:"
   LOCAL cSelected   := ";"

   IF File( "CUSTSEL.TXT" )
      cSelected   := MEMOREAD( "CUSTSEL.TXT" )
   ENDIF

   IF Empty( cSelected )
      cSelected   := ";"
   ENDIF

   nField  := 1

   //header
   FOR n = 1 TO Len( aBrowse )
      AAdd( aHdrs, aBrowse[n][2] )
      AAdd( aColumns, aBrowse[n][1] )
   NEXT

   SetGetColorFocus( CLR_LGREEN )

   SetBalloon( .T. ) // Balloon shape required for tooltips
   SkinButtons()     // Botoes Coloridos nas novas versoes

   DEFINE FONT oFont      NAME 'Tahoma' SIZE 0, -16
   DEFINE FONT oFontSmall NAME 'Tahoma' SIZE 0, -14
   DEFINE FONT oBold      NAME 'Tahoma' SIZE 0, -14 BOLD

   DEFINE DIALOG oTabella  TITLE cTitle SIZE nWidth, nHeight FONT oFont      ;
      PIXEL TRUEPIXEL RESIZABLE COLOR CLR_BLACK,  nRgb( 245, 244, 234 )

   @ 0, 0 TITLE oTitle SIZE oTabella:nwidth, 60 OF oTabella SHADOW NOSHADOW  ;
      GRADIENT { { 0.5, RGB(0xfa,0xfc,0xfd), RGB(0xe6,0xf0,0xfa) },          ;
                 { 0.5, RGB(0xdc,0xe6,0xf4), RGB(0xdd,0xe9,0xf7) } }

   @ 10, 12 TITLETEXT OF oTitle TEXT cTitle1 FONT oBold COLOR CLR_GRAY

   @ 28, 12 TITLETEXT OF oTitle TEXT cTitle2 FONT oFont COLOR CLR_HGRAY

   @ 10, 12  TITLEIMG oImg  OF oTitle  BITMAP cImage  SIZE 50, 50 TRANSPARENT

   @ 66, 3 SAY oSay1 PROMPT "Busqueda:" FONT oBold SIZE 120, 20 PIXEL        ;
      OF oTabella TRANSPARENT COLORS CLR_CYAN, CLR_WHITE UPDATE

   // IN
   @ 42, 180 SAY oSay2 PROMPT "Por:" FONT oBold SIZE 55, 20 PIXEL OF oTabella ;
       TRANSPARENT COLORS CLR_CYAN, CLR_WHITE UPDATE

   DEFINE BUTTONBAR oBar OF oTabella SIZE 70, 70  BOTTOM NOBORDER 2007 //2010

   oBar:bClrGrad := { | lPressed | If( ! lPressed,         ;
      { { 1,  nRgb( 233,229,206 ),nRgb( 233,229,206 ) } }, ;
      { { 1, nRgb( 245,244,234 ), nRgb( 245,244,234 ) } } ) }

   DEFINE BUTTON OF oBar PROMPT "New"                                        ;
      ACTION If( oBrw:bEdit == nil, oBrw:Edit( .T. ), oBrw:EditSource( .T. ) )

   DEFINE BUTTON OF oBar PROMPT "Modify" GROUP                               ;
      ACTION If( oBrw:bEdit == nil, oBrw:Edit(), oBrw:EditSource() )

   DEFINE BUTTON OF oBar PROMPT "Delete"                                     ;
     ACTION ( If( MsgNoYes( "Delete Record?" ), oBrw:Delete(), nil ), oBrw:SetFocus() )

   DEFINE BUTTON OF oBar PROMPT "Print"                                      ;
      ACTION  If( Empty( oBrw:bPrint ), oBrw:Report(), oBrw:Print() )

   DEFINE BUTTON OF oBar PROMPT "Exit" GROUP ACTION( oTabella:End() )

   @ 100, 5 XBROWSE oBrw  ;
      SIZE 385, 130 PIXEL;
      OF oTabella ;
      ALIAS cDbf COLUMNS aBrowse NOBORDER  FOOTERS

   FOR i := 1 TO LEN( oBrw:aCols )
      oCol := oBrw:aCols[ i ]
      oCol:bClrSelFocus  := { || { CLR_BLACK, nRGB( 202,224,252 ) } }
   NEXT

   WITH OBJECT oBrw

      WITH OBJECT oBrw:InsCol( 1 )

         :nwidth := 30
         :bEditValue    := { || AScan( oBrw:aSelected, oBrw:BookMark ) > 0 }
         :SetCheck( nil, .T. )
         :nHeadBmpNo    := { || If( Len( oBrw:aSelected ) == oBrw:nLen, 1, 2 ) }
         :bFooter       := { || ltrim( Str( Len(oBrw:aSelected ) ) ) }
         :bLClickHeader := { || oBrw:SelectRow( If( Len( oBrw:aSelected ) == oBrw:nLen, 0, 4 ) ), oBrw:Refresh() }

      End

      :bLClicked := { |r, c, f, oBrw| If( oBrw:MouseColPos( c ) == 1 , ;
         If( ( f := AScan( oBrw:aSelected, oBrw:BookMark ) ) == 0, ;
         AAdd( oBrw:aSelected, oBrw:BookMark ), ;
         ADel( oBrw:aSelected, f, .T. ) ), Nil ), ;
         oBrw:RefreshCurrent() }

      WITH OBJECT oBrw:aCols[ 2 ]

         :bFooter   := { || Ltrim( Str( oBrw:KeyNo() ) ) + " / " + LTrim( Str( oBrw:KeyCount() ) ) + " customers" }

      END

      :bChange  := { |o| o:RefreshFooters() }
      :bKeyChar   := { |k| If( k == VK_SPACE, ( oBrw:oCol( 1 ):CheckToggle(), oBrw:RefreshCurrent(), 0 ), nil ) }
      :bLDblClick := { || oBrw:oCol( 1 ):CheckToggle(), oBrw:RefreshCurrent() }
      :bClrStd    := { || { CLR_BLACK, If( oBrw:oCol( 1 ):Value, 0x80ffff, CLR_WHITE ) } }

      :l2007 := .F.
      :lColDividerComplete := .T.
      :lRecordSelector     := .T.
      :lHScroll            := .F.
      :nHeaderHeight       := 30
      :nRowHeight          := 30
      :nFooterHeight       := 30
      :nStretchCol         := - 1
      :lDrawBorder := .T.
      // :lIncrFilter   := .t.
      // :lSeekWild     := .f.
      :lAllowColHiding := .F.

      :nRecSelColor     :=   nRgb( 245, 244, 234 )

      :bClrHeader       := {|| { ,nRgb( 233,229,206 ) } }
      :bClrFooter       := {|| { ,nRgb( 245,244,234 ) } }

      :nColDividerStyle := LINESTYLE_LIGHTGRAY
      :nRowDividerStyle := LINESTYLE_LIGHTGRAY

   END

   IF Set( _SET_INSERT, ! Set( _SET_INSERT ) )
      Set( _SET_INSERT, ! Set( _SET_INSERT ) )
   ENDIF

   @ 40,  45  GET aGet[1] VAR cSearch  SIZE  250,  25  PIXEL OF oTabella     ;
      ON CHANGE  ( oBrw:cSeek := AllTrim( cSearch )   ) UPDATE

   // EN:( IN )
   @ 40, 195 COMBOBOX aGet[2] VAR nField ITEMS aHdrs  SIZE  130, 90  PIXEL   ;
      OF oTabella STYLE CBS_DROPDOWN HEIGHTGET 20 UPDATE                     ;
      ON CHANGE ( RETORNE_FOCUS( aGet ) )  // NEW

   //aGet[1]:bKeyDown := { | nKey | KeyChar( oBrw, nKey, nField, cDbf, acolumns[nField], aGet[1] ) }
   aGet[1]:bKeyDown := { | nKey | KeyChar( oBrw, nKey, nField, cDbf, acolumns[nField] ) }

   oBrw:CreateFromCode()

   @ 40, oBrw:nWidth - 20  BTNBMP aBtnBrow[1]             ;
      FLAT SIZE 30, 30  OF oTabella   PIXEL               ;
      COLOR  nRgb( 203, 225, 252 ), nRgb( 238, 236, 219 ) ;
      BITMAP "C:\FWH1701\bitmaps\new3.bmp" NOROUND        ;
      tooltip "Clear the search"                          ;
      ACTION ( ( cDbf )->( DbClearFilter() )            , ;
               ( cDbf )->( Dbgotop() )                  , ;
               oBrw:refresh()                           , ;
               cSearch := space( 60 )                   , ;
               aGet[1]:SetText( cSearch )               , ;
               aGet[1]:refresh()                        , ;
               cSeek   := ''                            , ;
               oBrw:cSeek := AllTrim( cSearch )         , ;
               aGet[1]:setfocus() )

   @ oBrw:nBottom + 2, oBrw:nWidth - 50 BTNBMP aBtnBrow[2] ;
      FLAT  SIZE 30, 30  OF oTabella   PIXEL               ;
      COLOR  nRgb( 238, 236, 219 ), nRgb( 238, 236, 219 )  ;
      BITMAP "c:\fwh1701\bitmaps\new3.bmp" NOROUND         ;
      ACTION oBrw:KeyDown( VK_UP, 0 )

   @ oBrw:nBottom + 2, oBrw:nWidth - 35 BTNBMP aBtnBrow[3] ;
      FLAT  SIZE 30, 30  OF oTabella   PIXEL               ;
      COLOR  nRgb( 238, 236, 219 ), nRgb( 238, 236, 219 )  ;
      BITMAP "c:\fwh1701\bitmaps\new3.bmp" NOROUND         ;
      ACTION oBrw:KeyDown( VK_DOWN, 0 )

   @ oBrw:nBottom + 2, oBrw:nWidth - 20 BTNBMP aBtnBrow[4] ;
      FLAT  SIZE 30, 30  OF oTabella   PIXEL               ;
      COLOR  nRgb( 238, 236, 219 ), nRgb( 238, 236, 219 )  ;
      BITMAP "c:\fwh1701\bitmaps\new3.bmp" NOROUND         ;
      ACTION ::ShowPopUp( { |oBtn| MenuContextual( oBtn,oBrw,cPrefix + "Aux",cDbf,aGet )  } )

   FOR n = 1 TO 4
      aBtnBrow[n]:bClrGrad = { | lInvert | If( ! lInvert, ;
         { { 1, RGB( 225, 225, 225 ), RGB( 225, 225, 225 ) } }, ;
         { { 1, RGB( 229,241,251 ), RGB( 229,241,251 ) } } ) }
      aBtnBrow[n]:nClrBorder := nRgb( 218, 214, 179 )
      aBtnBrow[n]:oCursor :=   oCursorBtn
   NEXT

   // No comprendo esto. Mucho trabajo por nada.
   oTabella:bResized := < ||
   LOCAL oRect       := oTabella:GetCliRect()

   oTitle:nWidth     := oRect:nRight

   oBrw:nWidth       := oRect:nRight - 10
   oBrw:nHeight      := oRect:nbottom - 210

   oImg:aImgs[2]     := oRect:nRight - 60

   aGet[1]:nTop      := oTitle:nBottom + 5
   aGet[1]:nLeft     := oRect:nLeft + 90

   oSay1:nTop        := oTitle:nBottom + 7
   oSay1:nLeft       := oRect:nLeft + 10

   oSay2:nTop        := oTitle:nBottom + 7
   oSay2:nLeft       := oRect:nLeft + 350  // 360  // EN/IN/POR

   // Controle del GET
   aGet[2]:nTop      := oTitle:nBottom + 5
   aGet[2]:nLeft     := oRect:nLeft + 385  // 380

   aBtnBrow[1]:nTop  := oTitle:nBottom + 5
   aBtnBrow[1]:nLeft := oRect:nRight - 37
   aBtnBrow[2]:nTop  := oBrw:nBottom + 5
   aBtnBrow[2]:nLeft := oRect:nRight - 112
   aBtnBrow[3]:nTop  := oBrw:nBottom + 5
   aBtnBrow[3]:nLeft := oRect:nRight - 75
   aBtnBrow[4]:nTop  := oBrw:nBottom + 5
   aBtnBrow[4]:nLeft := oRect:nRight - 37

   RETURN nil

   >

   oTabella:aMinMaxInfo := { nil, nil, nil, nil, 650, 350, nil, nil }

   oBrw:bSeek  := nil

   ACTIVATE DIALOG oTabella CENTER  ;
      ON INIT ( otabella:resize(), EVAL( oTabella:bResized )  )

   IF Set( _SET_INSERT, ! Set( _SET_INSERT ) )
      Set( _SET_INSERT, ! Set( _SET_INSERT ) )
   ENDIF

   oFont:End()
   oFontSmall:End()
   oBold:End()

RETURN nil

FUNCTION RETORNE_FOCUS( aGet )

   aGet[1]:Refresh()

   XFOCUS( aGet[1] )

RETURN( .T. )
//-------------------------------------------------------------------------//
// As vezes simples SetFocus( oObj ) nao faz um objeto ganhar foco
// neste caso pode apelar para estas duas funcoes a seguir
// Forcar foco para um objeto especifico - Ednaldo Rolim... yes!
//-------------------------------------------------------------------------//
FUNCTION xFocus( oObj )

   xSetFocus( oObj )
   xSetFocus( oObj )

RETURN( .T. )

FUNCTION xSetFocus( oObj )    

   LOCAL _oWnd := oObj:oWnd, _oTempo := ""

   DEFINE TIMER _oTempo INTERVAL 10 OF _oWnd ;
          ACTION ( oObj:SetFocus(), _oTempo:End() )

   ACTIVATE TIMER _oTempo

RETURN( .T. )

/*
FUNCTION ChangeBrowse( oBrw, oControl )

   LOCAL aItems := {}

   AEval( oBrw:aCols, { |o| If( o:lHide,,AAdd( aItems, o:cHeader ) ) } )

   oControl[2]:setItems( aItems )
   oControl[2]:refresh()

RETURN nil
*/


Function ChangeBrowse( oBrw, oControl )

   local aItems:= {}

   AEval( oBrw:aCols, { |o| If( o:lHide,, iif( len(alltrim(o:cHeader))>0, AAdd( aItems, o:cHeader ) , ) ) } )

   oControl[2]:setItems(aItems)
   oControl[2]:refresh()

   oBrw:Setfocus()

return nil

FUNCTION SelectColumns( oBrowse )

   LOCAL oDlg, oBrw, oFont, oBold, oBar
   LOCAL aSave    := aCopy( oBrowse:aCols )
   LOCAL cSaveState := oBrowse:SaveState()

   DEFINE FONT oFont NAME 'Tahoma' SIZE 0, - 16
   DEFINE FONT oBold NAME 'Tahoma' SIZE 0, - 14 BOLD

   DEFINE DIALOG oDlg SIZE 400, 400 PIXEL TRUEPIXEL ;
      TITLE "Position  Columns";
      COLOR CLR_BLACK, nRgb( 245, 244, 234 )

   DEFINE BUTTONBAR oBar OF oDlg SIZE 64, 70 2010 BOTTOM NOBORDER

   DEFINE BUTTON OF oBar PROMPT "Exit"     FILE "NO_DLG";
      ACTION ( oDlg:end( IDCANCEL ) )

   DEFINE BUTTON OF oBar PROMPT "ok"  FILE "OK_DLG";
      ACTION ( oDlg:end( IDOK ) )   BTNRIGHT

   oBar:bClrGrad := { | lPressed | If( ! lPressed, ;
      { { 1, nRgb( 233,229,206 ),nRgb( 233,229,206 ) } }, ;
      { { 1, nRgb( 245,244,234 ), nRgb( 245,244,234 ) } } ) }

   @ 10, 20 XBROWSE oBrw SIZE - 10, - 90 PIXEL OF oDlg ;
      DATASOURCE oBrowse:aCols ;
      COLUMNS "cHeader", "lHide";
      HEADERS "Columns", "" ;
      COLSIZES 100, 40 ;
      NOBORDER FONT oFont

   WITH OBJECT oBrw

      :l2007 := .F.
      :nStretchCol      := STRETCHCOL_WIDEST
      :lDrawBorder      := .T.
      :bClrHeader       := {|| { ,nRgb( 233,229,206 ) } }
      :bClrFooter       := {|| { ,nRgb( 245,244,234 ) } }
      :nColDividerStyle := LINESTYLE_LIGHTGRAY
      :lRecordSelector  := .F.
      :lHScroll         := .F.

      WITH OBJECT :aCols[ 2 ]
         :bEditValue    := { |x| If( x == nil, !oBrw:aRow:lHide, oBrw:aRow:lHide := !x ) }
         :SetCheck( nil, .T. )
         :nHeadBmpNo    := 2
      END

      :CreateFromCode()

   END

   ACTIVATE DIALOG oDlg CENTERED ;
      ON INIT ( oDlg:resize() )

   RELEASE oFont, oBold

   IF oDlg:nresult == IDOK
      oBrowse:refresh()
   ENDIF

RETURN nil

#define EM_GETSEL          176

STATIC FUNCTION KeyChar( oBrw, nKey, n, cdbf, cField, oControl, oSayCounter )

   LOCAL nPos, cText

   //If nKey == VK_BACK .and. ! Empty( cSeek )

   IF nKey == VK_BACK .AND. cSeek != nil .AND. Len( cSeek ) > 0
      ( oBrw:cAlias )->( IncrFilter( oBrw, Left( cSeek, Len( cSeek ) - 1 ),n,cdbf,cField,oControl ) )

      //nPos     = nLoWord( oControl:SendMsg( EM_GETSEL ) ) + 1
      //oGet1:KeyChar(VK_BACK)

      /*
      IF nPos < 1
         RETURN 0
      ENDIF
      */

       /*
      cText    = oControl:GetText()
      cText    := HB_UTF8LEFT( cText, nPos - 2 ) + HB_UTF8SUBSTR( cText, nPos )

      oControl:SetText( cText )
      oControl:oGet:buffer = oControl:GetText()
      oControl:oGet:pos := oControl:nPos := --nPos
      oControl:SetPos( nPos )


      oControl:setfocus() //get
      */


      RETURN 0

      // elseIf nKey > 31
   ELSEIF nKey > 31   .AND. nKey != Asc( '*' ) .AND. nKey != Asc( '?' )


      ( oBrw:cAlias )->( IncrFilter( oBrw, cSeek + Chr( nKey ),n,cdbf,cField,oControl ) )

      // oControl:setfocus()  //get



      RETURN 0
   ENDIF

RETURN nil

STATIC FUNCTION IncrFilter( oBrw, cPattern, n, cdbf, cField, oControl, oSayCounter )

   LOCAL cFilter := "", lFound := .F.
   LOCAL nRecNo, cSaveFilt, lStay
   LOCAL cField_name := alltrim( cField )

   //   ( cdbf )->( OrdSetFocus( n ) )

   IF ValType( cPattern ) == 'C'

      IF Empty( cPattern )

         cSeek := ""

         //
         // oSeek:SetText( cSeek )
         // oSeek:cText( cSeek )
         // oSeek:REFRESH()

         //
         SET FILTER TO .NOT. DELETED()

         GO TOP

         oBrw:Refresh()

         lFound      := .T.

      ELSE

         cFilter     := 'WildMatch( "*' + Upper( cPattern ) + '*", Upper( ' + cField_name + '))  .AND. .NOT. DELETED()'

         cSaveFilt   := DBFILTER()

         nRecNo      := RECNO()

         lStay       := &cFilter

         SET FILTER TO &cFilter

         GO TOP

         IF OrdKeyCount() == 0

            SET FILTER TO &cSaveFilt
            GO TOP

            DBGOTO( nRecNo )

         ELSE

            // ( cdbf )->( OrdSetFocus( n ) )

            cSeek    := cPattern

            // oSeek:cText( cSeek )
            // oSeek:REFRESH()

            IF lStay

               DBGOTO( nRecNo )

               oBrw:Refresh()

            ELSE

               oBrw:Refresh( .T. )

            ENDIF

            lFound   := .T.

         ENDIF

      ENDIF

   ENDIF

RETURN lFound

FUNCTION MenuContextual( oControl, oBrw, cIniEntry, cDbf, aGet )

   LOCAL oMenu

   MENU oMenu POPUP
   MENUITEM "Seleziona la linea corrente" ;
      ACTION  NIL

   MENUITEM "Seleziona tutto"

   MENUITEM "Esporta" Action NIL

   MENUITEM "Colonne" ACTION ( SelectColumns( oBrw ), ;
      ChangeBrowse( oBrw, aGet ) )

   ENDMENU

RETURN oMenu

// FIN / END
 


Regards, saludos.
João Santos - São Paulo - Brasil - Phone: +55(11)95150-7341
User avatar
karinha
 
Posts: 7214
Joined: Tue Dec 20, 2005 7:36 pm
Location: São Paulo - Brasil

Re: Consulta sobre centrar un dialogo.

Postby karinha » Tue Aug 01, 2023 1:54 pm

Code: Select all  Expand view

#include "fivewin.ch"
#include "XBrowse.Ch"

ANNOUNCE RDDSYS
REQUEST OrdKeyNo, OrdKeyCount, OrdCreate, OrdKeyGoto
REQUEST DBFCDX, DBFFPT

STATIC oBrw

FUNCTION Main()

   SET DATE ITALIAN
   SET CENTURY ON
   SET DELETED ON

   RDDSETDEFAULT( "DBFCDX" )

   SetGetColorFocus()

   Sample2()

RETURN nil

FUNCTION Sample2()

   LOCAL oDlg, oBar, oFont, oBold
   LOCAL n
   LOCAL oBtnTab[3]
   LOCAL oCursorBtn := TCursor():New( , 'HAND' )

   USE CUSTOMER NEW SHARED
   GO TOP

   DEFINE FONT oFont NAME "TAHOMA" SIZE 0, - 12
   DEFINE FONT oBold NAME "TAHOMA" SIZE 0, - 12 BOLD

   DEFINE DIALOG oDlg SIZE 800, 500 PIXEL TRUEPIXEL ;
      FONT oFont TITLE "test table"

   DEFINE BUTTONBAR oBar OF oDlg SIZE 64, 80 2013

   DEFINE BUTTON OF oBar PROMPT "Nuovo"     FILE "MOD_NUOVO"     ACTION NIL
   DEFINE BUTTON OF oBar PROMPT "Modifica"  FILE "MOD_MODIFICA"  ACTION NIL
   DEFINE BUTTON OF oBar PROMPT "Cancella"  FILE "MOD_CANCELLA"  ACTION NIL
   DEFINE BUTTON OF oBar PROMPT "Duplica"   FILE "MOD_DUPLICA"   ACTION NIL
   DEFINE BUTTON OF oBar PROMPT "Stampa"    FILE "MOD_STAMPA"    ACTION NIL

   @ 60, 5 XBROWSE oBrw SIZE - 5, 200 PIXEL OF oDlg         ;
      COLUMNS  "FIRST" ;
      HEADERS  "Descrizione" ;
      COLSIZES  200 ;
      CELL LINES NOBORDER ;
      DATASOURCE "CUSTOMER"

   oBrw:aCols[1]:uBarGetVal := Space( 60 )
   oBrw:aCols[1]:cBarGetBmp := "find.png"

   oBrw:lGetBar   := .F.

   WITH OBJECT  oBrw
      :nHeaderHeight    := 40 // optional
      :oHeaderFonts     := oBold
      :bClrEdits        := { || { CLR_BLACK, CLR_YELLOW } }
      :AutoFit()
      //
      :CreateFromCode()
   END

   @ 60, 20 BTNBMP oBtnTab[1] PROMPT { || If( oBrw:lGetBar, "Hide GetBar", "ShowGetBar" ) } ;
      SIZE 90, 28 PIXEL OF oDlg FLAT ;
      ACTION ( oBrw:lGetBar := .NOT. oBrw:lGetBar, oBrw:Refresh() )

   @ 60, 140 BTNBMP oBtnTab[2] PROMPT "Set Filter" ;
      SIZE 90, 28 PIXEL OF oDlg FLAT ;
      ACTION ( oBrw:cAlias )->( SetFilter( oBrw ) )  WHEN oBrw:lGetBar

   @ 60, 250 BTNBMP oBtnTab[3] PROMPT "Clear Filter" ;
      SIZE 90, 28 PIXEL OF oDlg FLAT WHEN oBrw:lGetBar;
      ACTION ( oBrw:cAlias )->( DBCLEARFILTER(), oBrw:Refresh(), oBrw:SetFocus() )

   FOR n = 1 TO 3
      oBtnTab[n]:bClrGrad = { | lInvert | If( .NOT. lInvert, ;
         { { 0.25, RGB( 238,236,219 ), RGB( 238,236,219 ) }, ;
         { 0.75, RGB( 238, 236, 219 ), RGB( 238, 236, 219 ) } }, ;
         { { 0.25, RGB( 238,236,219 ), RGB( 238,236,219 ) }, ;
         { 0.75, RGB( 238, 236, 219 ), RGB( 238, 236, 219 ) } } ) }
      oBtnTab[n]:nClrBorder := nRgb( 218, 214, 179 )
      oBtnTab[n]:oCursor :=   oCursorBtn
   NEXT


   oDlg:bResized    := < ||
   LOCAL oRect      := oDlg:GetCliRect()
   oBrw:nTop        := oRect:nTop + 130
   oBrw:nWidth      := oRect:nRight - 10
   oBrw:nHeight     := oRect:nbottom - 150
   oBtnTab[1]:nTop  := oRect:nTop + 100
   oBtnTab[1]:nLeft := oRect:nWidth - 300
   oBtnTab[2]:nTop  := oRect:nTop + 100
   oBtnTab[2]:nLeft := oRect:nWidth - 200
   oBtnTab[3]:nTop  := oRect:nTop + 100
   oBtnTab[3]:nLeft := oRect:nWidth - 100

   RETURN nil

   >

   ACTIVATE DIALOG oDlg CENTERED ON INIT ( EVAL(  oDlg:bResized ) )

   RELEASE FONT oFont, oBold

RETURN nil

//----------------------------------------------------------------------------//

STATIC FUNCTION SetFilter( oBrw )

   FIELD FIRST

   LOCAL cFilter := ""
   LOCAL n, oCol, uVal, cType

   FOR n := 1 TO Len( oBrw:aCols )

      oCol  := oBrw:aCols[ n ]

      IF .NOT. Empty( uVal := oCol:uBarGetVal )

         IF .NOT.Empty( cFilter )
            cFilter  += " .AND. "
         ENDIF

         cType    := ValType( uVal )

         DO CASE
         CASE cType == 'C'
            uVal     := Upper( AllTrim( uVal ) )
            cFilter += '"' + uVal + '" $ UPPER( ' + FieldName( n ) + " )"
         OTHERWISE
            cFilter  += FieldName( n ) + " == " + cValToChar( uVal )
         ENDCASE
      ENDIF

   NEXT

   IF Empty( cFilter )

      IF .NOT. Empty( DBFILTER() )

         DBCLEARFILTER()

         oBrw:Refresh()

      ENDIF

   ELSE

      IF .NOT. ( DBFILTER() == cFilter )

         // SET FILTER TO &cFilter

         SET FILTER TO FIRST == UPPER( cFilter )

         GO TOP

         oBrw:Refresh()

      ENDIF
   ENDIF

   oBrw:SetFocus()

RETURN nil
 


Regards, saludos.
João Santos - São Paulo - Brasil - Phone: +55(11)95150-7341
User avatar
karinha
 
Posts: 7214
Joined: Tue Dec 20, 2005 7:36 pm
Location: São Paulo - Brasil

Re: Consulta sobre centrar un dialogo.

Postby karinha » Tue Aug 01, 2023 2:03 pm

Mira samples\GETTIME.PRG.

Ejemplo:

Code: Select all  Expand view

   DEFINE DIALOG oDlg SIZE GetSysMetrics(0) * 0.9,400 PIXEL FONT oFont
 


Saludos.
João Santos - São Paulo - Brasil - Phone: +55(11)95150-7341
User avatar
karinha
 
Posts: 7214
Joined: Tue Dec 20, 2005 7:36 pm
Location: São Paulo - Brasil


Return to FiveWin para Harbour/xHarbour

Who is online

Users browsing this forum: Google [Bot] and 80 guests