Buttonbar en una posición fija

Buttonbar en una posición fija

Postby fespinoza » Mon Jan 11, 2010 4:33 am

Llevo 3 días peleando con el código, por poner una Buttonbar en una posición fija, dentro de un dialogo con un control RichEdit, la buttonbar se carga desde la clausula ON INIT; el código de la función que carga la ButtonBar es este:

Code: Select all  Expand view

STATIC FUNCTION CargaBarra(oDlg)
LOCAL oBar, oCursor, hDC, aFonts, oClp, oBold, oItalic, oUnderline, oItem, cFont, oSize, nSize:=10
hDC    := GetDC( oDlg:hWnd )
aFonts := ASort( GetFontNames( hDC ) )
ReleaseDC( oDlg:hWnd, hDC )
DEFINE CURSOR oCursor HAND
DEFINE CLIPBOARD oClp OF oDlg FORMAT TEXT
* Controles de la ButtonBar

@ 150,260 BUTTONBAR oBar OF oDlg 3DLOOK SIZE 480,27 BUTTONSIZE 24,24 FLOAT
   // 1
    DEFINE BUTTON RESOURCE "Cut" OF oBar MESSAGE "Cortar" NOBORDER ;
        WHEN ( ! Empty( oRtf:GetSel() ) .and. ! oRtf:lReadOnly ) ACTION ( oRtf:Cut(), oRtf:SetFocus() ) ;
        TOOLTIP "Cierra archivo abierto" TRANSPARENT CENTER
   // 2
    DEFINE BUTTON RESOURCE "Copy" OF oBar MESSAGE "Copiar" NOBORDER ;
        WHEN ( ! Empty( oRtf:GetSel() ) ) ACTION ( oRtf:Copy(), oRtf:SetFocus() ) ;
        TOOLTIP "Copiar" TRANSPARENT CENTER
   // 3
    DEFINE BUTTON RESOURCE "Paste" OF oBar MESSAGE "Pegar" NOBORDER ;
        WHEN ( ! Empty( oClp:GetText() ) .and. ! oRtf:lReadOnly ) ACTION ( oRtf:Paste(), oRtf:SetFocus() ) ;
        TOOLTIP "Pegar" TRANSPARENT CENTER
   // 4
    DEFINE BUTTON RESOURCE "Undo" OF oBar MESSAGE "Deshacer" NOBORDER ;
        WHEN ( oRtf:SendMsg( EM_CANUNDO ) != 0 ) ACTION ( oRtf:Undo(), oRtf:SetFocus() ) ;
        TOOLTIP "Deshacer" TRANSPARENT CENTER
   // 5
    DEFINE BUTTON RESOURCE "Redo" OF oBar MESSAGE "Rehacer" NOBORDER ;
        WHEN ( oRtf:SendMsg( EM_CANREDO ) != 0 ) ACTION ( oRtf:Redo(), oRtf:SetFocus() ) ;
        TOOLTIP "Rehacer" TRANSPARENT CENTER
   // 6
    DEFINE BUTTON oBold RESOURCE "Bold" OF oBar MESSAGE "Negrita" NOBORDER ;
        ACTION ( lBold := !lBold, oBold:lPressed := lBold, oBold:Refresh(), ;
                    oRtf:SetBold( lBold ), oRtf:SetFocus() ) ;
        TOOLTIP "Negrita" TRANSPARENT CENTER
   // 7
    DEFINE BUTTON oItalic RESOURCE "Italic" OF oBar MESSAGE "Italica" NOBORDER ;
        ACTION ( lItalic := !lItalic, oItalic:lPressed := lItalic, oItalic:Refresh(), ;
                    oRtf:SetItalic( lItalic ), oRtf:SetFocus() ) ;
        TOOLTIP "Italica" TRANSPARENT CENTER
   // 8
    DEFINE BUTTON oUnderline RESOURCE "Underline" OF oBar MESSAGE "Subrayado" NOBORDER ;
        ACTION ( lUnderline := !lUnderline, oUnderline:lPressed := lUnderline, oUnderline:Refresh(), ;
                    oRtf:SetUnderline( lUnderline ), oRtf:SetFocus() ) ;
        TOOLTIP "Subrayado" TRANSPARENT CENTER
   // 9
    DEFINE BUTTON RESOURCE "Left" OF oBar MESSAGE "Alinea a la izquierda" NOBORDER ;
        ACTION ( oRtf:SetAlign( PFA_LEFT ), oRtf:SetFocus() ) ;
        TOOLTIP "Alinea a la izquierda" TRANSPARENT CENTER
   // 10
    DEFINE BUTTON RESOURCE "Center" OF oBar MESSAGE "Alinea al centro" NOBORDER ;
        ACTION ( oRtf:SetAlign( PFA_CENTER ), oRtf:SetFocus() ) ;
        TOOLTIP "Alinea al centro" TRANSPARENT CENTER
   // 11
    DEFINE BUTTON RESOURCE "Right" OF oBar MESSAGE "Alinea a la derecha" NOBORDER ;
        ACTION ( oRtf:SetAlign( PFA_RIGHT ), oRtf:SetFocus() ) ;
        TOOLTIP "Alinea a la  derecha" TRANSPARENT CENTER
   // 12
    DEFINE BUTTON RESOURCE "Justify" OF oBar MESSAGE "Justifica a ambos lados" NOBORDER ;
        ACTION ( oRtf:SetAlign( PFA_JUSTIFY ), oRtf:SetFocus() ) ;
        TOOLTIP "Justifica a ambos lados" TRANSPARENT CENTER
   // 13
    @ 153,561 COMBOBOX oItem VAR cFont ITEMS aFonts OF oDlg:oBar PIXEL SIZE 133,120 FONT oFont3 ;
        ON CHANGE ( oRtf:SetFontName( oItem:VarGet() ), oRtf:SetFocus() )
        oItem:cToolTip := "Nombre de fuente"
   // 14
    @ 153,695 GET oSize VAR nSize OF oDlg:oBar FONT oFont3 PIXEL SIZE 21,21 PICTURE "99" SPINNER MIN 6 MAX 99 RIGHT ;
        ON CHANGE ( oRtf:SetFontSize( oSize:VarGet() ), oRtf:SetFocus() )
        oSize:Set3DLook()
        oSize:cToolTip := "Tamaño de fuente"

    AEval( oBar:aControls, { |x| x:nLeft += 226, x:nRight += 226 }, 14 )

    oBar:bLClicked := { || nil }
    oBar:bRClicked := { || nil }

    AEval( oBar:aControls, { |x| x:oCursor := oCursor } )

RETU .T.
 


Como veran son 14 elementos, pero no se porque causa se crea una buttonbar solo con los 12 primeros y deja afuera al Combobox y al Get del final. Esto luego provoca un error al cargar los controles de la ButtonBar al abrirse el dialogo.

Pero usando el mismo código con una Buttonbar fija, todo funciona bien (se crea una buttonbar con 14 elementos); pero necesito que la ButtonBar no este en las posiciones convencionales, sino en una posición fija en medio del dialogo.

Revisando el código de creación de la clase, cuando la ButtonBar es fija, se usa el metodo constructor New() y cuando va en una posición fija es NewAt(); pero no encuentro porque no funcionan de la misma forma.

Saludos

Fernando Espinoza
Saludos

Fernando Espinoza
User avatar
fespinoza
 
Posts: 188
Joined: Wed Feb 01, 2006 6:59 pm
Location: Ecuador

Re: Buttonbar en una posición fija

Postby Patricio Avalos Aguirre » Mon Jan 11, 2010 12:23 pm

Hola


Code: Select all  Expand view
@ 153,561 COMBOBOX oItem VAR cFont ITEMS aFonts OF oDlg:oBar PIXEL SIZE 133,120 FONT oFont3 ;
        ON CHANGE ( oRtf:SetFontName( oItem:VarGet() ), oRtf:SetFocus() )
        oItem:cToolTip := "Nombre de fuente"
 


Code: Select all  Expand view
puede que sea OF oDlg:oBar

cambia por OF oDlg
 
Saludos
Patricio

__________________________________________________________________
Version: Harbour 3.2.0dev (r1307082134),Compiler: Borland C++ 5.8.2 (32-bit)
PCode version: 0.3, FWH 13.2
http://www.sialm.cl
User avatar
Patricio Avalos Aguirre
 
Posts: 1060
Joined: Fri Oct 07, 2005 1:56 pm
Location: La Serena, Chile

Re: Buttonbar en una posición fija

Postby jrestojeda » Mon Jan 11, 2010 12:24 pm

Hola amigo...
Probaste crándola fija y luego hacerla float?

Code: Select all  Expand view
@ 150,260 BUTTONBAR oBar OF oDlg 3DLOOK SIZE 480,27 BUTTONSIZE 24,24 TOP

oBar:Float()
oBar:bRClicked:={||.f.}
 


Espero te sirva...
Ojeda Esteban Eduardo.
Buenos Aires - Argentina.
FWH - PellesC - DBF/CDX - ADS - Gloriosos .Bat - MySql - C# .net - FastReport
Skype: jreduojeda
User avatar
jrestojeda
 
Posts: 601
Joined: Wed Jul 04, 2007 3:51 pm
Location: Buenos Aires - Argentina

Re: Buttonbar en una posición fija

Postby horacio » Mon Jan 11, 2010 2:03 pm

No quiero ser pesimista pero a menos que toques el código de la clase no vas a poder porque la buttonbar se crea por defecto Top y solo puede manejar controles Button y no otros ( solo puedes fijar controles no button una vez creada ). Si intentas, una vez creada, cambiar su posición verás que tira un error ( es lo que te está pasando en este momento ). Lo que se me ocurre es que en la clase le pongas por defecto que sea Float. Espero te sirva.
horacio
 
Posts: 1363
Joined: Wed Jun 21, 2006 12:39 am
Location: Capital Federal Argentina

Re: Buttonbar en una posición fija

Postby fespinoza » Mon Jan 11, 2010 2:14 pm

Patricio

Probé, tu propuesta pero no funciona. Es porque si le pongo solo oDlg, ya los elementos no forman parte de la Buttonbar, porque esta solo permite incluir botones por definición; el poner oDlg:oBar es para que a pesar de no ser botones se incluyan en la barra.

jresojeda

Igual me bota error; creo que no es lo mismo crear la barra con New() que con NewAt(), revisando el codigo y la sintaxis de creación tienen diferencias.

Saludos y gracias por su respuesta

Fernando Espinoza
Saludos

Fernando Espinoza
User avatar
fespinoza
 
Posts: 188
Joined: Wed Feb 01, 2006 6:59 pm
Location: Ecuador

Re: Buttonbar en una posición fija

Postby jrestojeda » Mon Jan 11, 2010 2:49 pm

Amigo...
Quizá el problema es que la barra está en el diálogo. Yo lo pruebo en una ventana oWndChild y funciona bien.
Ojeda Esteban Eduardo.
Buenos Aires - Argentina.
FWH - PellesC - DBF/CDX - ADS - Gloriosos .Bat - MySql - C# .net - FastReport
Skype: jreduojeda
User avatar
jrestojeda
 
Posts: 601
Joined: Wed Jul 04, 2007 3:51 pm
Location: Buenos Aires - Argentina

Re: Buttonbar en una posición fija

Postby fespinoza » Mon Jan 11, 2010 3:05 pm

Eduardo

Podrías poner un poco de tu código de creación de la ventana, o enviarlo a mi correo: nanoespinoza@hotmail.com
Saludos

Fernando Espinoza
User avatar
fespinoza
 
Posts: 188
Joined: Wed Feb 01, 2006 6:59 pm
Location: Ecuador

Re: Buttonbar en una posición fija

Postby fespinoza » Mon Jan 11, 2010 3:47 pm

Eduardo

Ya probe con ventanas MDI y me sale el mismo error.

Voy a poner todo mi código (donde da error), y una imagen para q tengan una idea mas clara:

Code: Select all  Expand view

FUNCTION Bitacora()
#include "Fivewin.ch"
#include "RichEdit.ch"
#define FW_BOLD         700
LOCAL oFont, oFont2, oGet, hDLL := LoadLibrary( "Riched20.dll" )
PRIVATE oDlg, oPrueba1, cDatos:=cResultados:="", dFecha:=CToD("  /  /    "), m_FILE:=SPACE(8), oFont3
PRIVATE oRtf, oBtn[7], lBold, lItalic, lUnderline
SET _3DLOOK ON
* Lectura de datos y resultados del día de hoy
IF FILE(RUTRES+"BITACORA.DBF")
    USE &RUTRES.BITACORA
    INDEX ON DIA TO &RUTRES.BITACORA
    IF DBSeek( DATE() )
        cResultados=RESULTADOS
        cDatos=DATOS
    ELSE
        cResultados=""
        cDatos=""
    ENDIF
ELSE
    MsgInfo("No existe el archivo de bitácora"+CRLF+"Volveremos al menú principal", "Atención")
    FreeLibrary(hDLL)
    DBCloseArea()
    RETU .T.
ENDIF
DEFINE FONT oFont  NAME "Arial"         SIZE 0,-14
DEFINE FONT oFont2 NAME "Ms Sans Serif" SIZE 0,-11
DEFINE FONT oFont3 NAME "Ms Sans Serif" SIZE 0,-12
* Define dialogo
DEFINE DIALOG oDlg OF oVent FROM 10,10 TO 417,762 PIXEL TITLE "Bitácora de SicefWin"
    oDlg:nStyle := nOr( oDlg:nStyle, 4 )
    * Control MiCalendario
    oPrueba1:= TMiCalendario(): New ( 5, 5,120,120, oDlg, oFont)
    oPrueba1:FijaClrDomingo( {rgb( 255, 255, 255),;   //Color borde superior   // Para pintar los domingos de otro color...
                              rgb( 220, 220, 220),;   //Color relleno
                                      rgb( 128, 128, 128),;   //Color borde inferior
                                      rgb(   0,   0,   0) } ) //color texto....
    oPrueba1:bAction := { |dFechaControl| (LeeResultados(dFechaControl), oRtf:LoadAsRTF(cDatos), ;
        oRtf:SetText(cDatos), oDlg:Update() ) }
    oPrueba1:bCambioMes := { || FijarFestivos( oPrueba1 ) }        // Al cambiar de mes... se asignan nuevos festivos...

    * Say y Gets con los resultados en el día seleccionado
    @ 4,130 SAY "Resultados en el día seleccionado:" PIXEL SIZE 100,10 OF oDlg COLOR CLR_RED,GetSysColor(15)
    @ 11,130 GET oGet VAR cResultados MEMO OF oDlg READONLY PIXEL SIZE 240,55 UPDATE FONT oFont2 ;
        COLOR RGB(0,0,0), RGB(231,235,222)
        oGet:cToolTip := "Resultados en el día seleccionado"

    @ 68,130 SAY "HECHOS relevantes del día seleccionado:" PIXEL SIZE 120,10 OF oDlg COLOR CLR_RED,GetSysColor(15)

    * Editor de texto RichEdit para detalles o cronicas
    @ 89,130 RICHEDIT oRtf VAR cDatos OF oDlg FILE cDatos PIXEL SIZE 240,99 FONT oFont3
        *ON CHANGE IF( oRtf:IsModify(), oBtn[1]:Enable(), oBtn[1]:Disable() )
        *ON CHANGE ( RefreshButtonBar(oDlg), IF( oRtf:IsModify(), oBtn[1]:Enable(), oBtn[1]:Disable() ) )
        oRtf:cToolTip:="Vista de los hechos relevantes del día seleccionado"
        oRtf:nClrText:=CLR_GRAY
        oRtf:SetFontName("Ms Sans Serif")
        oRtf:SetFontSize(11)

    * Botones de control
    @ 188,310 BUTTONBMP oBtn[1] PROMPT "     &Grabar Datos" BITMAP "SAVE" TEXTRIGHT OF oDlg PIXEL SIZE 60,12 FONT oFont ;
        ACTION IF( oRTF:IsModify(), (cDatos:=oRTF:SaveAsRTF(), GrabaBtcr(oPrueba1:dFechaControl)), ;
        MsgInfo("No ha habido cambios en el texto","Atención") )
        oBtn[1]:cToolTip="Graba datos del campo Hechos relevantes del día"
        oBtn[1]:Disable()

    @ 147,5 BUTTON oBtn[2] PROMPT "Seleccionar &día" OF oDlg PIXEL SIZE 54,12 FONT oFont ;
        ACTION IF( oRTF:IsModify(), IF( MsgYesNo("¿Pierde los cambios que realizó en Hechos?","Atención"), ;
        (IF( MsgGet("Seleccionar día","Ingresar día a consultar:",@dFecha,), oPrueba1:IrFecha( dFecha ), ), ;
        LeeResultados(dFecha), oRTF:LoadAsRTF(cDatos), oRTF:SetText(cDatos), oDlg:Update()), ), ;
        (IF( MsgGet("Seleccionar día","Ingresar día a consultar:",@dFecha,), oPrueba1:IrFecha( dFecha ), ), ;
        LeeResultados(dFecha), oRTF:LoadAsRTF(cDatos), oRTF:SetText(cDatos), oDlg:Update()) )
        oBtn[2]:cToolTip="Seleccionar un día específico"

    @ 147,70 BUTTON oBtn[3] PROMPT "&Ir al día de hoy" OF oDlg PIXEL SIZE 54,12 FONT oFont ;
        ACTION IF( oRTF:IsModify(), IF( MsgYesNo("¿Pierde los cambios que realizó en Hechos?","Atención"), ;
        (oPrueba1:IrFecha(Date()), LeeResultados(Date()), oRTF:LoadAsRTF(cDatos), oRTF:SetText(cDatos), oDlg:Update()), ), ;
        (oPrueba1:IrFecha(Date()), LeeResultados(Date()), oRTF:LoadAsRTF(cDatos), oRTF:SetText(cDatos), oDlg:Update()))
        oBtn[3]:cToolTip="Ir al día de hoy"

    @ 166,5 BUTTON oBtn[4] PROMPT "Día &anterior" OF oDlg PIXEL SIZE 54,12 FONT oFont ;
        ACTION IF( oRTF:IsModify(), IF( MsgYesNo("¿Pierde los cambios que realizó en Hechos?","Atención"), ;
        (oPrueba1:IrFecha(oPrueba1:dFechaControl-1), LeeResultados(oPrueba1:dFechaControl), ;
        oRTF:LoadAsRTF(cDatos), oRTF:SetText(cDatos), oDlg:Update()) , ), ;
        (oPrueba1:IrFecha(oPrueba1:dFechaControl-1), LeeResultados(oPrueba1:dFechaControl), ;
        oRTF:LoadAsRTF(cDatos), oRTF:SetText(cDatos), oDlg:Update()) )
        oBtn[4]:cToolTip="Pasa al día anterior"

    @ 166,70 BUTTON oBtn[5] PROMPT "Día si&guiente" OF oDlg PIXEL SIZE 54,12 FONT oFont ;
        ACTION IF( oRTF:IsModify(), IF( MsgYesNo("¿Pierde los cambios que realizó en Hechos?","Atención"), ;
        (oPrueba1:IrFecha(oPrueba1:dFechaControl+1), LeeResultados(oPrueba1:dFechaControl), ;
        oRTF:LoadAsRTF(cDatos), oRTF:SetText(cDatos), oDlg:Update()) , ), ;
        (oPrueba1:IrFecha(oPrueba1:dFechaControl+1), LeeResultados(oPrueba1:dFechaControl), ;
        oRTF:LoadAsRTF(cDatos), oRTF:SetText(cDatos), oDlg:Update()) )
        oBtn[5]:cToolTip="Pasa al día siguiente"

    @ 185,5 BUTTON oBtn[6] PROMPT "&Regrabar resultados" OF oDlg PIXEL SIZE 68,12 FONT oFont ;
        ACTION MsgMeter({|oMet,oText,oDlg,lEnd| RegrabaRes(oMet,oText,oDlg,@lEnd)},"Procesando...", "Por favor, espere")
        oBtn[6]:cToolTip="Regraba todos los resultados históricos de todos los torneos"

    @ 185,79 BUTTONBMP oBtn[7] PROMPT "            &Salir" BITMAP "CANCELAR" TEXTRIGHT OF oDlg PIXEL SIZE 45,12 FONT oFont ;
        ACTION IF( oRTF:IsModify(), IF( MsgYesNo("¿Pierde los cambios que realizó en Hechos?","Atención"), ;
        oDlg:End(2), (cDatos:=oRTF:SaveAsRTF(), GrabaBtcr(oPrueba1:dFechaControl), oDlg:End(1)) ), oDlg:End(2) )
        oBtn[7]:cToolTip="Salir"
    oDlg:bInit  := { || RefreshBar() }
    *oDlg:bValid := { || RefreshBar() }
    oDlg:oClient = oRtf
    *oDlg:lHelpIcon:= .F.  // comentado al probar con Window
ACTIVATE DIALOG oDlg CENTERED ON INIT (oDlg:SetIcon(oApp:cIcono), Centra(oDlg), CargaBarra(oDlg), ;
    oRtf:LoadAsRTF(cDatos), oRtf:SetText(cDatos),  ;
    oRtf:bChange:={ || ( RefreshButtonBar(oDlg), IF( oRtf:IsModify(), oBtn[1]:Enable(), oBtn[1]:Disable() ) ) }, ;
    Eval( oRtf:bChange ), oRtf:SetFocus(), .F.)
    *oRtf:LoadAsRTF(cDatos), oRtf:SetText(cDatos), oRtf:bChange:={ || RefreshButtonBar(oDlg) }, Eval( oRtf:bChange ), ;
    // el valor .F. al final en ON INIT es para q cambie el focus inicial grabado en los recursos
    // la Button Bar en los dialog se carga a través de ON INIT
IF oDlg:nResult=1
    MsgInfo("Datos se grabaron con éxito","Atención")
ENDIF
RELEASE FONT oFont
RELEASE FONT oFont2
RELEASE FONT oFont3
FreeLibrary(hDLL)
DBCloseArea()
Return nil
*FDF Bitacora


STATIC FUNCTION RefreshBar()
    LOCAL oBar := oDlg:oBar:aControls
    IF Len( oDlg:oWndClient:aWnd ) == 1
        AEval( oBar, { |x, y| If( y == 1, x:Enable(), x:Disable() ) }, 1, 0 )   // no hace nada, porq la barra de botones está reducida, sin los primeros botones Save, ...
        AEval( oBar, { |x| x:Refresh() }, 1, 0 )
    ENDIF
RETURN .t.


STATIC FUNCTION RefreshButtonBar( oDlg )
    LOCAL oBar   := oDlg:oBar:aControls
    LOCAL aChar  := REGetCharFormat( oRtf:hWnd )
    LOCAL nAlign := REGetParaFormat( oRtf:hWnd )
    oBar[ 6]:lPressed := lBold      := aChar[5] == FW_BOLD
    oBar[ 7]:lPressed := lItalic    := aChar[6]
    oBar[ 8]:lPressed := lUnderline := aChar[7]
    oBar[ 9]:lPressed := nAlign == PFA_LEFT
    oBar[10]:lPressed := nAlign == PFA_CENTER
    oBar[11]:lPressed := nAlign == PFA_RIGHT
    oBar[12]:lPressed := nAlign == PFA_JUSTIFY
    oBar[13]:VarPut( aChar[14] )                 // Font
    oBar[14]:VarPut( aChar[ 1] )                 // Tamaño del font, es 9 por omisión
    AEval( oBar, { |x| IF( x:lWhen(), x:Enable(), x:Disable() ), x:Refresh() }, 1, 14 )
RETU .T.
*FDF RefreshButtonBar


STATIC FUNCTION CargaBarra(oDlg)
LOCAL oBar, oCursor, hDC, aFonts, oClp, oBold, oItalic, oUnderline, oItem, cFont, oSize, nSize:=10
hDC    := GetDC( oDlg:hWnd )
aFonts := ASort( GetFontNames( hDC ) )
ReleaseDC( oDlg:hWnd, hDC )
DEFINE CURSOR oCursor HAND
DEFINE CLIPBOARD oClp OF oDlg FORMAT TEXT
* Controles de la ButtonBar
@ 150,260 BUTTONBAR oBar OF oDlg 3DLOOK SIZE 480,27 BUTTONSIZE 24,24 TOP
   // 1
    DEFINE BUTTON RESOURCE "Cut" OF oBar MESSAGE "Cortar" NOBORDER ;
        WHEN ( ! Empty( oRtf:GetSel() ) .and. ! oRtf:lReadOnly ) ACTION ( oRtf:Cut(), oRtf:SetFocus() ) ;
        TOOLTIP "Cierra archivo abierto" TRANSPARENT CENTER
   // 2
    DEFINE BUTTON RESOURCE "Copy" OF oBar MESSAGE "Copiar" NOBORDER ;
        WHEN ( ! Empty( oRtf:GetSel() ) ) ACTION ( oRtf:Copy(), oRtf:SetFocus() ) ;
        TOOLTIP "Copiar" TRANSPARENT CENTER
   // 3
    DEFINE BUTTON RESOURCE "Paste" OF oBar MESSAGE "Pegar" NOBORDER ;
        WHEN ( ! Empty( oClp:GetText() ) .and. ! oRtf:lReadOnly ) ACTION ( oRtf:Paste(), oRtf:SetFocus() ) ;
        TOOLTIP "Pegar" TRANSPARENT CENTER
   // 4
    DEFINE BUTTON RESOURCE "Undo" OF oBar MESSAGE "Deshacer" NOBORDER ;
        WHEN ( oRtf:SendMsg( EM_CANUNDO ) != 0 ) ACTION ( oRtf:Undo(), oRtf:SetFocus() ) ;
        TOOLTIP "Deshacer" TRANSPARENT CENTER
   // 5
    DEFINE BUTTON RESOURCE "Redo" OF oBar MESSAGE "Rehacer" NOBORDER ;
        WHEN ( oRtf:SendMsg( EM_CANREDO ) != 0 ) ACTION ( oRtf:Redo(), oRtf:SetFocus() ) ;
        TOOLTIP "Rehacer" TRANSPARENT CENTER
   // 6
    DEFINE BUTTON oBold RESOURCE "Bold" OF oBar MESSAGE "Negrita" NOBORDER ;
        ACTION ( lBold := !lBold, oBold:lPressed := lBold, oBold:Refresh(), ;
                    oRtf:SetBold( lBold ), oRtf:SetFocus() ) ;
        TOOLTIP "Negrita" TRANSPARENT CENTER
   // 7
    DEFINE BUTTON oItalic RESOURCE "Italic" OF oBar MESSAGE "Italica" NOBORDER ;
        ACTION ( lItalic := !lItalic, oItalic:lPressed := lItalic, oItalic:Refresh(), ;
                    oRtf:SetItalic( lItalic ), oRtf:SetFocus() ) ;
        TOOLTIP "Italica" TRANSPARENT CENTER
   // 8
    DEFINE BUTTON oUnderline RESOURCE "Underline" OF oBar MESSAGE "Subrayado" NOBORDER ;
        ACTION ( lUnderline := !lUnderline, oUnderline:lPressed := lUnderline, oUnderline:Refresh(), ;
                    oRtf:SetUnderline( lUnderline ), oRtf:SetFocus() ) ;
        TOOLTIP "Subrayado" TRANSPARENT CENTER
   // 9
    DEFINE BUTTON RESOURCE "Left" OF oBar MESSAGE "Alinea a la izquierda" NOBORDER ;
        ACTION ( oRtf:SetAlign( PFA_LEFT ), oRtf:SetFocus() ) ;
        TOOLTIP "Alinea a la izquierda" TRANSPARENT CENTER
   // 10
    DEFINE BUTTON RESOURCE "Center" OF oBar MESSAGE "Alinea al centro" NOBORDER ;
        ACTION ( oRtf:SetAlign( PFA_CENTER ), oRtf:SetFocus() ) ;
        TOOLTIP "Alinea al centro" TRANSPARENT CENTER
   // 11
    DEFINE BUTTON RESOURCE "Right" OF oBar MESSAGE "Alinea a la derecha" NOBORDER ;
        ACTION ( oRtf:SetAlign( PFA_RIGHT ), oRtf:SetFocus() ) ;
        TOOLTIP "Alinea a la  derecha" TRANSPARENT CENTER
   // 12
    DEFINE BUTTON RESOURCE "Justify" OF oBar MESSAGE "Justifica a ambos lados" NOBORDER ;
        ACTION ( oRtf:SetAlign( PFA_JUSTIFY ), oRtf:SetFocus() ) ;
        TOOLTIP "Justifica a ambos lados" TRANSPARENT CENTER
   // 13
    @ 153,561 COMBOBOX oItem VAR cFont ITEMS aFonts OF oDlg:oBar PIXEL SIZE 133,120 FONT oFont3 ;
        ON CHANGE ( oRtf:SetFontName( oItem:VarGet() ), oRtf:SetFocus() )
        oItem:cToolTip := "Nombre de fuente"
   // 14
    @ 153,695 GET oSize VAR nSize OF oDlg:oBar FONT oFont3 PIXEL SIZE 21,21 PICTURE "99" SPINNER MIN 6 MAX 99 RIGHT ;
        ON CHANGE ( oRtf:SetFontSize( oSize:VarGet() ), oRtf:SetFocus() )
        oSize:Set3DLook()
        oSize:cToolTip := "Tamaño de fuente"

    AEval( oBar:aControls, { |x| x:nLeft += 226, x:nRight += 226 }, 14 )

    oBar:bLClicked := { || nil }
    oBar:bRClicked := { || nil }

    AEval( oBar:aControls, { |x| x:oCursor := oCursor } )

    * Solo para comprobar cuantos elementos tienen la barra
    ? "Elementos de la barra: "+Str( Len( oBar:aControls ), 3 )

RETU .T.
*FDF CargaBarra

 


La imagen de lo que quiero, justo antes del siguiente mensaje de error:
Aplicación
===========
Ruta y nombre: C:\SICEF_~1\SicefWin.Exe (32 bits)
Tama±o: 1,329,664 bytes
Tiempo desde inicio: 0 hours 1 mins 54 secs
Error ocurrido en: 11/01/2010, 10:42:52
Descripción de error: Error BASE/1004 Class: 'NIL' has no exported method: ACONTROLS
Args:
[ 1] = U

Stack Calls
===========
Llamado de ACONTROLS(0)
Llamado de REFRESHBUTTONBAR(0)
Llamado de (b)BITACORA(0)
Llamado de (b)BITACORA(0)
Llamado de TDIALOG:INITIATE(705)
Llamado de TDIALOG:HANDLEEVENT(912)
Llamado de DIALOGBOXINDIRECT(0)
Llamado de TDIALOG:ACTIVATE(273)
Llamado de BITACORA(0)
Llamado de (b)MENU_H(0)
Llamado de TMENU:COMMAND(437)
Llamado de TWINDOW:COMMAND(1003)
Llamado de TWINDOW:HANDLEEVENT(0)
Llamado de _FWH(3333)
Llamado de WINRUN(0)
Llamado de TWINDOW:ACTIVATE(952)
Llamado de INICIO(0)

[img]
http://img3.imageshack.us/img3/9493/pantallasicef.jpg
[/img]

Como verán es un dialogo, donde inserto un control MiCalendario y un control RichEdit, con la ButtonBar ubicada del medio a la derecha.
Saludos

Fernando Espinoza
User avatar
fespinoza
 
Posts: 188
Joined: Wed Feb 01, 2006 6:59 pm
Location: Ecuador

Re: Buttonbar en una posición fija

Postby Antonio Linares » Mon Jan 11, 2010 10:05 pm

Fernando,

> Pero usando el mismo código con una Buttonbar fija, todo funciona bien

Creala fija y luego haz:
Code: Select all  Expand view

oDlg:oBar = nil
oDlg:oTop = nil
oBar:Move( nRow, nCol ) // la posición en donde quieras situarla
 
regards, saludos

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

Re: Buttonbar en una posición fija

Postby fespinoza » Tue Jan 12, 2010 12:24 am

Antonio

Ya probé su sugerencia; creo la buttonbar fija al Tope (Top), no da error, la cargo desde ON INIT, se crea con los 14 controles; la muevo a la nueva posición luego de creada la barra, en ON INIT con los comandos que me indicaste; pero al moverse a la nueva posición y volver a ejecutarse la función RefreshButtonBar() cuando el control RichEdit tiene el foco, de nuevo aparece el error:

Aplicación
===========
Ruta y nombre: C:\SICEF_~1\SicefWin.Exe (32 bits)
Tama±o: 1,329,664 bytes
Tiempo desde inicio: 0 hours 1 mins 28 secs
Error ocurrido en: 11/01/2010, 19:16:57
Descripción de error: Error BASE/1004 Class: 'NIL' has no exported method: ACONTROLS
Args:
[ 1] = U

Stack Calls
===========
Llamado de ACONTROLS(0)
Llamado de REFRESHBUTTONBAR(0)
Llamado de (b)BITACORA(0)
Llamado de (b)TRICHEDIT:TRICHEDIT(64)
Llamado de TRICHEDIT:CHANGE(0)
Llamado de TCONTROL:HANDLEEVENT(1426)
Llamado de TRICHEDIT:HANDLEEVENT(623)
Llamado de _FWH(3333)
Llamado de DIALOGBOXINDIRECT(0)
Llamado de TDIALOG:ACTIVATE(273)
Llamado de BITACORA(0)
Llamado de (b)MENU_H(0)
Llamado de TMENU:COMMAND(437)
Llamado de TWINDOW:COMMAND(1003)
Llamado de TWINDOW:HANDLEEVENT(0)
Llamado de _FWH(3333)
Llamado de WINRUN(0)
Llamado de TWINDOW:ACTIVATE(952)
Llamado de INICIO(0)
Saludos

Fernando Espinoza
User avatar
fespinoza
 
Posts: 188
Joined: Wed Feb 01, 2006 6:59 pm
Location: Ecuador

Re: Buttonbar en una posición fija

Postby Antonio Linares » Tue Jan 12, 2010 1:50 am

Fernando,

Es que oDlg:oBar se hace nil y entonces la llamada a oDlg:oBar:aControls genera el error.

Deberias pasarle oBar a RefreshButtonBar( oBar ) en vez de pasarle oDlg
regards, saludos

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

Re: Buttonbar en una posición fija

Postby fespinoza » Tue Jan 12, 2010 4:58 am

Maestro Antonio; ahora si funciona muy bien, era como usted indico.

Solo un favor más, al mover de posición la barra, se muestra un marco que termina fuera del dialogo, como hago para que no se pinte ese marco.

Saludos y gracias
Saludos

Fernando Espinoza
User avatar
fespinoza
 
Posts: 188
Joined: Wed Feb 01, 2006 6:59 pm
Location: Ecuador


Return to FiveWin para Harbour/xHarbour

Who is online

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