FiveTech Support Forums

FiveWin / Harbour / xBase community
Board index FiveWin para Harbour/xHarbour Buttonbar en una posici贸n fija
Posts: 188
Joined: Wed Feb 01, 2006 06:59 PM

Buttonbar en una posici贸n fija

Posted: Mon Jan 11, 2010 04: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 (fw): Select all Collapse
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
Posts: 1074
Joined: Fri Oct 07, 2005 01:56 PM

Re: Buttonbar en una posici贸n fija

Posted: Mon Jan 11, 2010 12:23 PM
Hola


Code (fw): Select all Collapse
@ 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 (fw): Select all Collapse
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
Posts: 601
Joined: Wed Jul 04, 2007 03:51 PM

Re: Buttonbar en una posici贸n fija

Posted: Mon Jan 11, 2010 12:24 PM
Hola amigo...
Probaste cr谩ndola fija y luego hacerla float?

Code (fw): Select all Collapse
@ 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
Posts: 1364
Joined: Wed Jun 21, 2006 12:39 AM

Re: Buttonbar en una posici贸n fija

Posted: Mon Jan 11, 2010 02: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.

Posts: 188
Joined: Wed Feb 01, 2006 06:59 PM

Re: Buttonbar en una posici贸n fija

Posted: Mon Jan 11, 2010 02: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
Posts: 601
Joined: Wed Jul 04, 2007 03:51 PM

Re: Buttonbar en una posici贸n fija

Posted: Mon Jan 11, 2010 02: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
Posts: 188
Joined: Wed Feb 01, 2006 06:59 PM

Re: Buttonbar en una posici贸n fija

Posted: Mon Jan 11, 2010 03: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
Posts: 188
Joined: Wed Feb 01, 2006 06:59 PM

Re: Buttonbar en una posici贸n fija

Posted: Mon Jan 11, 2010 03: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 (fw): Select all Collapse
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)

http://img3.imageshack.us/img3/9493/pantallasicef.jpg
" alt="" loading="lazy">

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
Posts: 44162
Joined: Thu Oct 06, 2005 05:47 PM

Re: Buttonbar en una posici贸n fija

Posted: 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 (fw): Select all Collapse
oDlg:oBar = nil
oDlg:oTop = nil
oBar:Move( nRow, nCol ) // la posici贸n en donde quieras situarla
regards, saludos

Antonio Linares
www.fivetechsoft.com
Posts: 188
Joined: Wed Feb 01, 2006 06:59 PM

Re: Buttonbar en una posici贸n fija

Posted: 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
Posts: 44162
Joined: Thu Oct 06, 2005 05:47 PM

Re: Buttonbar en una posici贸n fija

Posted: Tue Jan 12, 2010 01: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
Posts: 188
Joined: Wed Feb 01, 2006 06:59 PM

Re: Buttonbar en una posici贸n fija

Posted: Tue Jan 12, 2010 04: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

Continue the discussion