776 lines
25 KiB
Plaintext
776 lines
25 KiB
Plaintext
*--------------------------------------------------------------------------------------------------------------------------------------------------------
|
|
* (EN) AUTOGENERATED - ATTENTION!! - NOT INTENDED FOR EXECUTION!! USE ONLY FOR MERGING CHANGES AND STORING WITH SCM TOOLS!!
|
|
*--------------------------------------------------------------------------------------------------------------------------------------------------------
|
|
*< FOXBIN2PRG: Version="1.21" SourceFile="messagebox.vcx" CPID="1252" /> (Solo para binarios VFP 9 / Only for VFP 9 binaries)
|
|
*
|
|
*
|
|
DEFINE CLASS messagebox_boton AS _commandbutton OF "_baza.vcx"
|
|
*< CLASSDATA: Baseclass="commandbutton" Timestamp="" Scale="Pixels" Uniqueid="" />
|
|
|
|
*<PropValue>
|
|
Caption = "Command1"
|
|
FontCharSet = 238
|
|
Name = "messagebox_boton"
|
|
Width = 80
|
|
*</PropValue>
|
|
|
|
PROCEDURE Click
|
|
THIS.PARENT.Boton_Click(THIS)
|
|
|
|
ENDPROC
|
|
|
|
ENDDEFINE
|
|
|
|
DEFINE CLASS messagebox_edtmensaje AS _editbox OF "_baza.vcx"
|
|
*< CLASSDATA: Baseclass="editbox" Timestamp="" Scale="Pixels" Uniqueid="" />
|
|
|
|
*<PropValue>
|
|
BackColor = 236,233,216
|
|
BackStyle = 0
|
|
BorderStyle = 0
|
|
DisabledBackColor = 236,233,216
|
|
FontCharSet = 238
|
|
Height = 23
|
|
Name = "messagebox_edtmensaje"
|
|
ReadOnly = .T.
|
|
SpecialEffect = 1
|
|
TabStop = .F.
|
|
Width = 165
|
|
*</PropValue>
|
|
|
|
ENDDEFINE
|
|
|
|
DEFINE CLASS messagebox_form AS form && Sustituye al messagebox y acepta timeout
|
|
*< CLASSDATA: Baseclass="form" Timestamp="" Scale="Pixels" Uniqueid="" />
|
|
|
|
*-- OBJECTDATA items order determines ZOrder / El orden de los items OBJECTDATA determina el ZOrder
|
|
*< OBJECTDATA: ObjPath="cmgBotones" UniqueID="" Timestamp="" />
|
|
*< OBJECTDATA: ObjPath="edtMensaje" UniqueID="" Timestamp="" />
|
|
|
|
*<DefinedPropArrayMethod>
|
|
*m: boton_click && Este evento se dispara cuando se hace click en un botón de comando.
|
|
*p: idopcion && Guarda el ID de la opción elegida
|
|
*</DefinedPropArrayMethod>
|
|
|
|
*<PropValue>
|
|
AlwaysOnTop = .T.
|
|
AutoCenter = .T.
|
|
BorderStyle = 3
|
|
Caption = "Form2"
|
|
ControlBox = .F.
|
|
DoCreate = .T.
|
|
FontCharSet = 238
|
|
Height = 88
|
|
idopcion = 2
|
|
MaxButton = .F.
|
|
MinButton = .F.
|
|
Name = "messagebox_form"
|
|
ShowWindow = 1
|
|
Width = 198
|
|
*</PropValue>
|
|
|
|
ADD OBJECT 'cmgBotones' AS messagebox_grupobotones WITH ;
|
|
Height = 29, ;
|
|
Left = 8, ;
|
|
Name = "cmgBotones", ;
|
|
Top = 44, ;
|
|
Width = 94
|
|
*< END OBJECT: ClassLib="messagebox.vcx" BaseClass="commandgroup" />
|
|
|
|
ADD OBJECT 'edtMensaje' AS messagebox_edtmensaje WITH ;
|
|
Left = 18, ;
|
|
Name = "edtMensaje", ;
|
|
ScrollBars = 2, ;
|
|
Top = 9
|
|
*< END OBJECT: ClassLib="messagebox.vcx" BaseClass="editbox" />
|
|
|
|
PROCEDURE boton_click && Este evento se dispara cuando se hace click en un botón de comando.
|
|
LPARAMETERS toBoton
|
|
THISFORM.oImp.Boton_Click(@toBoton)
|
|
|
|
ENDPROC
|
|
|
|
PROCEDURE Init
|
|
LPARAMETERS tcMensaje, tiBotones, tcTitulo, tcFont, tnTimeout ,tnTimeoutValue
|
|
|
|
THIS.NEWOBJECT("oImp", "messagebox_Implem", "MessageBox.vcx", "", ;
|
|
@tcMensaje, @tiBotones, @tcTitulo, @tcFont, @tnTimeout ,@tnTimeoutValue)
|
|
ENDPROC
|
|
|
|
PROCEDURE QueryUnload
|
|
NODEFAULT
|
|
THISFORM.oImp.Form_Hide()
|
|
|
|
ENDPROC
|
|
|
|
PROCEDURE Resize
|
|
THISFORM.oImp.Form_Resize()
|
|
|
|
ENDPROC
|
|
|
|
ENDDEFINE
|
|
|
|
DEFINE CLASS messagebox_form_desktop AS messagebox_form OF "messagebox.vcx"
|
|
*< CLASSDATA: Baseclass="form" Timestamp="" Scale="Pixels" Uniqueid="" />
|
|
|
|
*<PropValue>
|
|
Desktop = .T.
|
|
DoCreate = .T.
|
|
Name = "messagebox_form_desktop"
|
|
cmgBotones.Name = "cmgBotones"
|
|
edtMensaje.Name = "edtMensaje"
|
|
*</PropValue>
|
|
|
|
ENDDEFINE
|
|
|
|
DEFINE CLASS messagebox_grupobotones AS commandgroup
|
|
*< CLASSDATA: Baseclass="commandgroup" Timestamp="" Scale="Pixels" Uniqueid="" />
|
|
|
|
*<DefinedPropArrayMethod>
|
|
*m: boton_click
|
|
*</DefinedPropArrayMethod>
|
|
|
|
*<PropValue>
|
|
BackStyle = 0
|
|
BorderStyle = 0
|
|
ButtonCount = 0
|
|
Height = 66
|
|
Name = "messagebox_grupobotones"
|
|
SpecialEffect = 1
|
|
Value = 0
|
|
Width = 94
|
|
*</PropValue>
|
|
|
|
PROCEDURE boton_click
|
|
LPARAMETERS toBoton
|
|
|
|
IF VARTYPE(toBoton) = "O" AND NOT ISNULL(toBoton)
|
|
THIS.PARENT.Boton_Click(toBoton)
|
|
ENDIF
|
|
|
|
ENDPROC
|
|
|
|
PROCEDURE Click
|
|
*THIS.PARENT.Boton_Click(THIS.VALUE)
|
|
|
|
ENDPROC
|
|
|
|
ENDDEFINE
|
|
|
|
DEFINE CLASS messagebox_icono AS image
|
|
*< CLASSDATA: Baseclass="image" Timestamp="" Scale="Pixels" Uniqueid="" />
|
|
|
|
*<PropValue>
|
|
BackStyle = 0
|
|
Height = 32
|
|
Name = "messagebox_icono"
|
|
Stretch = 1
|
|
Width = 32
|
|
*</PropValue>
|
|
|
|
ENDDEFINE
|
|
|
|
DEFINE CLASS messagebox_implem AS custom && Implementación del messagebox
|
|
*< CLASSDATA: Baseclass="custom" Timestamp="" Scale="Pixels" Uniqueid="" />
|
|
|
|
#INCLUDE "messagebox.h"
|
|
*<DefinedPropArrayMethod>
|
|
*m: boton_click && Este evento ocurre cuando se clickea un botón de opción
|
|
*m: form_activate && Ocurre cuando un objeto FormSet, Form o Page se activa o cuando se muestra un objeto ToolBar.
|
|
*m: form_hide && Método para ocultart el form
|
|
*m: form_resize && Este evento se dispara cuando se hace un resize del form
|
|
*m: get_estilofuente
|
|
*m: timeout && Este evento se dispara al finalizar el tiempo de timeout, si es que se indicó un valor de timeout para el mensaje.
|
|
*p: botones && Valor numérico que indica que botones mostrar, icono y botón por defecto
|
|
*p: cmgbotones_mbot
|
|
*p: edtmensaje_mbot
|
|
*p: edtmensaje_mright
|
|
*p: form_activated && Indica si ya se ejecutó el Activate del form
|
|
*p: timeoutvalue && Valor por defecto a usar si se alcanza el timeout del mensaje.
|
|
*p: titulo && Titulo de la ventana
|
|
*</DefinedPropArrayMethod>
|
|
|
|
*<PropValue>
|
|
botones = 0
|
|
cmgbotones_mbot = 0
|
|
edtmensaje_mbot = 0
|
|
edtmensaje_mright = 0
|
|
Height = 31
|
|
Name = "messagebox_implem"
|
|
timeoutvalue = 0
|
|
titulo =
|
|
Width = 100
|
|
*</PropValue>
|
|
|
|
PROCEDURE boton_click && Este evento ocurre cuando se clickea un botón de opción
|
|
LPARAMETERS toBoton
|
|
|
|
LOCAL lcNombreBoton
|
|
lcNombreBoton = STRTRAN(UPPER(toBoton.NAME), "\<", "")
|
|
|
|
DO CASE
|
|
CASE VARTYPE(toBoton) = "N"
|
|
THISFORM.IDOpcion = toBoton
|
|
CASE lcNombreBoton = "CMDOK"
|
|
THISFORM.IDOpcion = 1
|
|
CASE lcNombreBoton = "CMDABORT"
|
|
THISFORM.IDOpcion = 3
|
|
CASE lcNombreBoton = "CMDRETRY"
|
|
THISFORM.IDOpcion = 4
|
|
CASE lcNombreBoton = "CMDIGNORE"
|
|
THISFORM.IDOpcion = 5
|
|
CASE lcNombreBoton = "CMDYES"
|
|
THISFORM.IDOpcion = 6
|
|
CASE lcNombreBoton = "CMDNO"
|
|
THISFORM.IDOpcion = 7
|
|
OTHERWISE && CANCEL
|
|
THISFORM.IDOpcion = 2
|
|
ENDCASE
|
|
|
|
THIS.Form_Hide()
|
|
|
|
ENDPROC
|
|
|
|
PROCEDURE form_activate && Ocurre cuando un objeto FormSet, Form o Page se activa o cuando se muestra un objeto ToolBar.
|
|
WITH THIS
|
|
IF NOT .Form_Activated
|
|
.Form_Activated = .T.
|
|
.PARENT.SETALL("TABSTOP", .T.)
|
|
ENDIF
|
|
ENDWITH && THIS
|
|
|
|
ENDPROC
|
|
|
|
PROCEDURE form_hide && Método para ocultart el form
|
|
IF PEMSTATUS(THIS, "tmrTarea", 5)
|
|
THIS.tmrTarea.ResetParams()
|
|
ENDIF
|
|
|
|
THISFORM.HIDE()
|
|
|
|
ENDPROC
|
|
|
|
PROCEDURE form_resize && Este evento se dispara cuando se hace un resize del form
|
|
WITH THIS.PARENT
|
|
.edtMensaje.MOVE(.edtMensaje.LEFT, ;
|
|
.edtMensaje.TOP, ;
|
|
.WIDTH - THIS.edtMensaje_mRight - .edtMensaje.LEFT, ;
|
|
.HEIGHT - THIS.edtMensaje_mBot - .edtMensaje.TOP)
|
|
|
|
.cmgBotones.MOVE((.WIDTH - .cmgBotones.WIDTH) / 2, ;
|
|
.HEIGHT - THIS.cmgBotones_mBot)
|
|
ENDWITH
|
|
|
|
ENDPROC
|
|
|
|
PROCEDURE get_estilofuente
|
|
LPARAMETERS tlFontBold, tlFontItalic, tlFontUnderline, tlFontStrikeThru
|
|
*-- Devuelve un código de Estilo de Fuente para uso de FONTMETRIC u otras
|
|
*-- funciones que requieren este tipo de código.
|
|
*-- PARAMETROS:
|
|
*-- tlFontBold Referencia de Objeto del control de edición o letra Negrita
|
|
*-- tlFontItalic Si tlFontBold indica letra Negrita, indica letra Itálica (Cursiva)
|
|
*-- tlFontUnderline Si tlFontBold indica letra Negrita, indica letra Subrayada
|
|
*-- tlFontStrikeThru Si tlFontBold indica letra Negrita, indica letra Tachada
|
|
LOCAL ;
|
|
lcEstilo, ;
|
|
llFontBold, ;
|
|
llFontItalic, ;
|
|
llFontUnderline, ;
|
|
llFontStrikeThru
|
|
|
|
lcEstilo = ""
|
|
|
|
DO CASE
|
|
CASE PCOUNT() = 0
|
|
=MESSAGEBOX("No se indicaron parámetros", MB_OK + MB_ICONEXCLAMATION, PROGRAM())
|
|
|
|
CASE VARTYPE(tlFontBold) = "O" AND NOT PEMSTATUS(tlFontBold, "FONTNAME", 5)
|
|
=MESSAGEBOX("El objeto indicado no es un control de Edición de datos", MB_OK + MB_ICONEXCLAMATION, PROGRAM())
|
|
|
|
CASE VARTYPE(tlFontBold) = "O"
|
|
*-- Se indicó un Objeto
|
|
llFontBold = tlFontBold.FONTBOLD
|
|
llFontItalic = tlFontBold.FONTITALIC
|
|
llFontUnderline = tlFontBold.FONTUNDERLINE
|
|
llFontStrikeThru = tlFontBold.FONTSTRIKETHRU
|
|
OTHERWISE
|
|
*-- Se indicó un Nombre de Fuente
|
|
llFontBold = tlFontBold
|
|
llFontItalic = tlFontItalic
|
|
llFontUnderline = tlFontUnderline
|
|
llFontStrikeThru = tlFontStrikeThru
|
|
ENDCASE
|
|
lcEstilo = lcEstilo + IIF(llFontBold, "B", "")
|
|
lcEstilo = lcEstilo + IIF(llFontItalic, "I", "N")
|
|
lcEstilo = lcEstilo + IIF(llFontUnderline, "U", "")
|
|
lcEstilo = lcEstilo + IIF(llFontStrikeThru, "-", "")
|
|
|
|
RETURN lcEstilo
|
|
|
|
ENDPROC
|
|
|
|
PROCEDURE Init
|
|
LPARAMETERS tcMensaje, tiBotones, tcTitulo, tcFont, tnTimeout, tnTimeoutValue
|
|
|
|
WITH THIS.PARENT
|
|
LOCAL lnMargen, lnLeft_Anterior, lnTamañoIcono, lnBotonesWidth, lnMaxTxtWidth, lnAnchoScrollbar, ;
|
|
laLines(1), lnEditboxWidth, lnEditboxHeight, I, lnCantLineas, lnAnchoMedioFuente, lnTotalTXTHeight, ;
|
|
lnFormWidth, lnFormHeight, lnBotonesHeight, lcFontName, liFontSize, lcFontStyle, lnMargenEditbox, ;
|
|
llSalidaDeEmergencia, lnAreaWidth, lnAreaHeight, llExisteActiveForm
|
|
|
|
lnMargen = 10 && Margen de los controles al borde del form
|
|
lnAnchoScrollbar = SYSMETRIC(5)
|
|
|
|
IF !EMPTY(tcFont) AND VARTYPE(tcFont) = [C]
|
|
.edtMensaje.FONTNAME = tcFont
|
|
ENDIF
|
|
|
|
*!* modificare 16.01.2014 : diacritice
|
|
If Afont(laFontMsgBox,.FontName,238,1)
|
|
.FontCharSet = 238
|
|
Endif
|
|
For i = 1 To .Objects.Count
|
|
If Pemstatus(.Objects[i],"FontName",5)
|
|
If Afont(laFontMsgBox,.Objects[i].FontName,238,1)
|
|
.Objects[i].FontCharSet = 238
|
|
Endif
|
|
Endif
|
|
Endfor
|
|
Release laFontMsgBox
|
|
*!* modificare 16.01.2014 : diacritice ^
|
|
|
|
IF EMPTY(tiBotones)
|
|
tiBotones = 0
|
|
ENDIF
|
|
|
|
*-- MENSAJE
|
|
IF EMPTY(tcMensaje)
|
|
tcMensaje = "(nimic)"
|
|
ELSE
|
|
*!* 12.02.2008
|
|
&& DACA AM IN MESAJ DOAR LF-URI SE STRICA FORMATAREA
|
|
&& TREBUIE FACUT CU REGEX DA - DACA EXISTA DOAR LF-UL LA SFARSITUL LINIEI SA IL INLOCUIASCA CU CRLF
|
|
IF .F.
|
|
tcMensaje = STRTRAN(tcMensaje, LF, "")
|
|
tcMensaje = STRTRAN(tcMensaje, CR, CRLF)
|
|
ENDIF
|
|
*!* 12.02.2008 ^
|
|
ENDIF
|
|
.edtMensaje.VALUE = tcMensaje
|
|
|
|
*-- TITULO
|
|
.CAPTION = IIF(EMPTY(tcTitulo), APPLICATION.CAPTION, tcTitulo)
|
|
|
|
*-- GUARDO LOS VALORES DE LOS PARÁMETROS
|
|
THIS.Botones = tiBotones
|
|
THIS.Titulo = tcTitulo
|
|
THIS.TimeoutValue = tnTimeoutValue
|
|
|
|
*-- Este timer ejecuta una tarea por única vez, que consiste en activar
|
|
*-- los TabStop de todos los controles, que están en .F. excepto
|
|
*-- el botón por defecto, que ya tiene .T.
|
|
*-- Este truco es para ubicar el foco en el botón por defecto
|
|
*-- sin usar SETFOCUS, ya que como la intención de esta ventana es
|
|
*-- que sirva para mostrar mensajes de error, de ocurrir uno
|
|
*-- en el VALID de algún control, el SETFOCUS causaría otro error más.
|
|
THIS.ADDOBJECT("tmrFoco", "o_Timer_Tareas")
|
|
THIS.tmrFoco.DOCMD("Form_Activate", THIS, 100, 1)
|
|
|
|
*-- BOTONES DE OPCIÓN
|
|
WITH .cmgBotones
|
|
DO CASE
|
|
CASE BITAND(tiBotones, 5) = 5 && RETRY/CANCEL
|
|
.ADDOBJECT("cmdRetry", "messagebox_Boton")
|
|
.cmdRetry.CAPTION = MB_CAPTION_RETRY
|
|
.ADDOBJECT("cmdCancel", "messagebox_Boton")
|
|
.cmdCancel.CAPTION = MB_CAPTION_CANCEL
|
|
.cmdCancel.CANCEL = .T.
|
|
CASE BITAND(tiBotones, 4) = 4 && YES/NO
|
|
.ADDOBJECT("cmdYes", "messagebox_Boton")
|
|
.cmdYes.CAPTION = MB_CAPTION_YES
|
|
.ADDOBJECT("cmdNo", "messagebox_Boton")
|
|
.cmdNo.CAPTION = MB_CAPTION_NO
|
|
.cmdNo.CANCEL = .T.
|
|
.PARENT.CLOSABLE = .F.
|
|
CASE BITAND(tiBotones, 3) = 3 && YES/NO/CANCEL
|
|
.ADDOBJECT("cmdYes", "messagebox_Boton")
|
|
.cmdYes.CAPTION = MB_CAPTION_YES
|
|
.ADDOBJECT("cmdNo", "messagebox_Boton")
|
|
.cmdNo.CAPTION = MB_CAPTION_NO
|
|
.ADDOBJECT("cmdCancel", "messagebox_Boton")
|
|
.cmdCancel.CAPTION = MB_CAPTION_CANCEL
|
|
.cmdCancel.CANCEL = .T.
|
|
CASE BITAND(tiBotones, 2) = 2 && ABORT/RETRY/IGNORE
|
|
.ADDOBJECT("cmdAbort", "messagebox_Boton")
|
|
.cmdAbort.CAPTION = MB_CAPTION_ABORT
|
|
.ADDOBJECT("cmdRetry", "messagebox_Boton")
|
|
.cmdRetry.CAPTION = MB_CAPTION_RETRY
|
|
.ADDOBJECT("cmdIgnore", "messagebox_Boton")
|
|
.cmdIgnore.CAPTION = MB_CAPTION_IGNORE
|
|
.PARENT.CLOSABLE = .F.
|
|
CASE BITAND(tiBotones, 1) = 1 && OK/CANCEL
|
|
.ADDOBJECT("cmdOk", "messagebox_Boton")
|
|
.cmdOK.CAPTION = MB_CAPTION_OK
|
|
.ADDOBJECT("cmdCancel", "messagebox_Boton")
|
|
.cmdCancel.CAPTION = MB_CAPTION_CANCEL
|
|
.cmdCancel.CANCEL = .T.
|
|
OTHERWISE && OK
|
|
.ADDOBJECT("cmdOk", "messagebox_Boton")
|
|
.cmdOK.CAPTION = MB_CAPTION_OK
|
|
.cmdOK.CANCEL = .T.
|
|
ENDCASE
|
|
ENDWITH && .cmgBotones
|
|
|
|
*-- ICONOS
|
|
DO CASE
|
|
CASE BITAND(tiBotones, 64) = 64 && ICONINFORMATION
|
|
.ADDOBJECT("imgIcono", "messagebox_Icono")
|
|
.imgIcono.PICTURE = MB_ICONINFORMATION_BMP
|
|
CASE BITAND(tiBotones, 48) = 48 && ICONEXCLAMATION
|
|
.ADDOBJECT("imgIcono", "messagebox_Icono")
|
|
.imgIcono.PICTURE = MB_ICONEXCLAMATION_BMP
|
|
CASE BITAND(tiBotones, 32) = 32 && ICONQUESTION
|
|
.ADDOBJECT("imgIcono", "messagebox_Icono")
|
|
.imgIcono.PICTURE = MB_ICONQUESTION_BMP
|
|
CASE BITAND(tiBotones, 16) = 16 && ICONSTOP
|
|
.ADDOBJECT("imgIcono", "messagebox_Icono")
|
|
.imgIcono.PICTURE = MB_ICONSTOP_BMP
|
|
ENDCASE
|
|
|
|
IF PEMSTATUS(THIS.PARENT, "ImgIcono", 5)
|
|
.imgIcono.MOVE(5, 5, 32, 32)
|
|
.imgIcono.VISIBLE = .T.
|
|
lnTamañoIcono = 32 &&+ lnMargen
|
|
ELSE
|
|
lnTamañoIcono = 0
|
|
ENDIF
|
|
|
|
IF TYPE('oChatBot') = 'O'
|
|
.ADDOBJECT("imgChatBot", "messagebox_Icono")
|
|
.imgChatBot.PICTURE = MB_ICONCHATBOT_BMP
|
|
|
|
.imgChatBot.MOVE(5, 35, 32, 32)
|
|
.imgChatBot.VISIBLE = .T.
|
|
.imgChatBot.ToolTipText = "Click pentru ChatBot Suport Tehnic"
|
|
|
|
BINDEVENT(.imgChatBot,"Click", oChatbot, "launch")
|
|
ENDIF
|
|
|
|
|
|
*-- CALCULO EL TAMAÑO DEL EDITBOX
|
|
lcFontName = .edtMensaje.FONTNAME
|
|
liFontSize = .edtMensaje.FONTSIZE
|
|
lcFontStyle = THIS.Get_EstiloFuente(.edtMensaje)
|
|
lnAnchoMedioFuente = FONTMETRIC(6, lcFontName, liFontSize, lcFontStyle) && Ancho medio fuente
|
|
lnAnchoMedioFuente = lnAnchoMedioFuente * 1.5 && maresc cu 20% pentru cazul in care am multe caractere inguste
|
|
lnAlturaMaxFuente = FONTMETRIC(1, lcFontName, liFontSize, lcFontStyle) && Alto fuente
|
|
lnEditboxWidth = 0
|
|
lnMaxTxtWidth = 0
|
|
lnMargenEditbox = .edtMensaje.MARGIN * 2 + .edtMensaje.BORDERSTYLE * 2
|
|
lnCantLineas = ALINES(laLines, .edtMensaje.VALUE, .T.)
|
|
lnTotalTXTHeight = lnCantLineas * lnAlturaMaxFuente + lnMargenEditbox
|
|
|
|
lnBotonesHeight = .cmgBotones.BUTTONS(1).HEIGHT
|
|
lnBotonesWidth = .cmgBotones.BUTTONCOUNT * (.cmgBotones.BUTTONS(1).WIDTH + lnMargen) - lnMargen
|
|
|
|
*-- Calculo el ancho en pixels de la línea más larga del mensaje
|
|
FOR I = 1 TO lnCantLineas
|
|
lnMaxTxtWidth = MAX(lnMaxTxtWidth, TXTWIDTH(laLines(I), lcFontName, liFontSize, lcFontStyle) * lnAnchoMedioFuente)
|
|
ENDFOR
|
|
|
|
*-- Determino respecto de qué contenedor muestro el mensaje:
|
|
*-- Objeto _SCREEN, Objeto u ActiveForm.
|
|
*-- IMPORTANTE: En el caso de que no se pueda mostrar el mensaje
|
|
*-- se creará automáticamente un timeout para que salga por Cancelar.
|
|
*| llExisteActiveForm = TYPE("_SCREEN.ACTIVEFORM") = "O"
|
|
*| DO CASE
|
|
*| CASE _SCREEN.VISIBLE AND (NOT llExisteActiveForm OR llExisteActiveForm AND _SCREEN.ACTIVEFORM.SHOWWINDOW = 0)
|
|
*| *-- Centro respecto de _Screen (cuando _SCREEN es visible y el form activo
|
|
*| *-- se muestra dentro de la pantalla principal de VFP)
|
|
*| lnAreaWidth = _SCREEN.WIDTH
|
|
*| lnAreaHeight = _SCREEN.HEIGHT
|
|
*|
|
|
*| CASE llExisteActiveForm AND _SCREEN.ACTIVEFORM.SHOWWINDOW > 0
|
|
*| *-- Centro respecto del Form activo (cuando el form activo se muestra
|
|
*| *-- en un formulario de nivel superior o como un formulario de nivel superior)
|
|
*| lnAreaWidth = _SCREEN.ACTIVEFORM.WIDTH
|
|
*| lnAreaHeight = _SCREEN.ACTIVEFORM.HEIGHT
|
|
*|
|
|
*| OTHERWISE
|
|
*| *-- SALIDA DE EMERGENCIA: No puedo determinar
|
|
*| *-- respecto de qué container mostrar el mensaje,
|
|
*| *-- el el container no es visible.
|
|
*| llSalidaDeEmergencia = .T.
|
|
*| ENDCASE
|
|
*|
|
|
*| IF llExisteActiveForm
|
|
*| _SCREEN.ACTIVEFORM.LOCKSCREEN = .F. && SI ESTAN BLOQUEADAS LAS ACTUALIZACIONES NO SE VE EL MENSAJE
|
|
*| ENDIF
|
|
*| _SCREEN.LOCKSCREEN = .F. && SI ESTAN BLOQUEADAS LAS ACTUALIZACIONES NO SE VE EL MENSAJE
|
|
*|
|
|
*| IF llSalidaDeEmergencia
|
|
*| *-- SALIDA DE EMERGENCIA
|
|
*| IF EMPTY(THIS.TimeoutValue)
|
|
*| THIS.TimeoutValue = 2 && Es CANCEL si no se indicó valor por defecto.
|
|
*| ENDIF
|
|
*| THIS.ADDOBJECT("tmrTarea", "o_Timer_Tareas")
|
|
*| THIS.tmrTarea.DOCMD("TimeOut", THIS, 100, 1)
|
|
*| ELSE
|
|
*-- SI SE INDICO UN TIMEOUT AGREGO UN TIMER
|
|
IF NOT EMPTY(tnTimeout)
|
|
THIS.ADDOBJECT("tmrTarea", "o_Timer_Tareas")
|
|
THIS.tmrTarea.DOCMD("TimeOut", THIS, tnTimeout * 1000, 1)
|
|
ENDIF
|
|
*| ENDIF
|
|
|
|
lnAreaWidth = SYSMETRIC(1)
|
|
lnAreaHeight = SYSMETRIC(2)
|
|
*| lnAreaWidth = _SCREEN.WIDTH
|
|
*| lnAreaHeight = _SCREEN.HEIGHT
|
|
|
|
|
|
|
|
*-- Calculo el ancho de la ventana del mensaje
|
|
lnFormWidth = MAX(lnBotonesWidth + lnMargen * 2, MIN(lnAreaWidth - SYSMETRIC(3) * 2 - 40, ;
|
|
lnMaxTxtWidth + lnMargenEditbox + lnAnchoScrollbar + IIF(lnTamañoIcono = 0, 0, lnTamañoIcono + lnMargen) + lnMargen * 2 + SYSMETRIC(3) * 0))
|
|
lnFormHeight = MIN(lnAreaHeight - SYSMETRIC(4) * 2 - 40, (MAX(lnTamañoIcono, lnTotalTXTHeight) + lnBotonesHeight + lnMargen * 3 + SYSMETRIC(4) * 0))
|
|
*!* 14.05.2007
|
|
*!* Inaltimea formularului sa nu depaseasca 2/3 din ecran
|
|
lnFormHeight = MIN(lnFormHeight, ROUND(_SCREEN.Height * 0.66, 0))
|
|
lnEditboxHeight = lnFormHeight - lnBotonesHeight - lnMargen * 3
|
|
lnEditboxWidth = lnFormWidth - lnMargen * 2 - IIF(lnTamañoIcono = 0, 0, lnTamañoIcono + lnMargen)
|
|
.edtMensaje.MOVE(IIF(lnTamañoIcono = 0, 0, lnTamañoIcono + lnMargen) + lnMargen, lnMargen, lnEditboxWidth, lnEditboxHeight)
|
|
|
|
*-- Determino si mostrar las Scrollbars en el Editbox
|
|
.edtMensaje.SCROLLBARS = IIF(lnTotalTXTHeight > lnEditboxHeight, 2, 0)
|
|
|
|
*-- Ubico la ventana del mensaje
|
|
.MOVE((lnAreaWidth - lnFormWidth - SYSMETRIC(3) * 2) / 2, ;
|
|
(lnAreaHeight - lnFormHeight - SYSMETRIC(4) * 2 - SYSMETRIC(9)) / 2, ;
|
|
lnFormWidth, ;
|
|
lnFormHeight)
|
|
.AutoCenter = .T.
|
|
|
|
WITH .cmgBotones
|
|
*-- Ubico cada botón, uno al lado del otro
|
|
FOR EACH loBoton IN .BUTTONS
|
|
loBoton.MOVE(loBoton.WIDTH * (loBoton.TABINDEX - 1) + (loBoton.TABINDEX - 1) * lnMargen)
|
|
loBoton.VISIBLE = .T.
|
|
ENDFOR
|
|
|
|
*-- Ubico el grupo de botones de la ventana del mensaje
|
|
.MOVE((lnFormWidth - lnBotonesWidth) / 2, lnFormHeight - lnBotonesHeight - lnMargen, lnBotonesWidth, lnBotonesHeight)
|
|
|
|
DO CASE
|
|
CASE (BITAND(tiBotones, 2) = 2 ;
|
|
OR BITAND(tiBotones, 3) = 3) ;
|
|
AND BITAND(tiBotones, 512) = 512
|
|
*-- 3er.BOTÓN POR DEFECTO
|
|
loBoton = .BUTTONS(3)
|
|
|
|
CASE (BITAND(tiBotones, 1) = 1 ;
|
|
OR BITAND(tiBotones, 2) = 2 ;
|
|
OR BITAND(tiBotones, 3) = 3 ;
|
|
OR BITAND(tiBotones, 4) = 4 ;
|
|
OR BITAND(tiBotones, 5) = 5) ;
|
|
AND BITAND(tiBotones, 256) = 256
|
|
*-- 2do.BOTÓN POR DEFECTO
|
|
loBoton = .BUTTONS(2)
|
|
|
|
OTHERWISE && First button is DEFAULT
|
|
*-- 1er.BOTÓN POR DEFECTO
|
|
loBoton = .BUTTONS(1)
|
|
ENDCASE
|
|
ENDWITH && .cmgBotones
|
|
|
|
loBoton.TABSTOP = .T.
|
|
.TABINDEX = 1
|
|
|
|
*-- Asigno el ID por defecto
|
|
LOCAL lcNombreBoton
|
|
lcNombreBoton = STRTRAN(UPPER(loBoton.NAME), "\<", "")
|
|
DO CASE
|
|
CASE lcNombreBoton = "CMDOK"
|
|
.IDOpcion = 1
|
|
CASE lcNombreBoton = "CMDCANCEL"
|
|
.IDOpcion = 2
|
|
CASE lcNombreBoton = "CMDABORT"
|
|
.IDOpcion = 3
|
|
CASE lcNombreBoton = "CMDRETRY"
|
|
.IDOpcion = 4
|
|
CASE lcNombreBoton = "CMDIGNORE"
|
|
.IDOpcion = 5
|
|
CASE lcNombreBoton = "CMDYES"
|
|
.IDOpcion = 6
|
|
CASE lcNombreBoton = "CMDNO"
|
|
.IDOpcion = 7
|
|
ENDCASE
|
|
|
|
|
|
*-- Guardo las posiciones de los controles
|
|
*-- para usarlas en caso de Resize del usuario
|
|
.MINWIDTH = lnBotonesWidth + lnMargen * 2 + lnMargenEditbox
|
|
.MINHEIGHT = MAX(lnAlturaMaxFuente, lnTamañoIcono) + lnBotonesHeight + lnMargenEditbox + lnMargen * 3
|
|
THIS.cmgBotones_mBot = .HEIGHT - .cmgBotones.TOP
|
|
THIS.edtMensaje_mBot = .HEIGHT - (.edtMensaje.TOP + .edtMensaje.HEIGHT)
|
|
THIS.edtMensaje_mRight = .WIDTH - (.edtMensaje.LEFT + .edtMensaje.WIDTH)
|
|
ENDWITH && THIS.PARENT
|
|
|
|
ENDPROC
|
|
|
|
PROCEDURE timeout && Este evento se dispara al finalizar el tiempo de timeout, si es que se indicó un valor de timeout para el mensaje.
|
|
WITH THIS
|
|
*-- Si no hay asignado un valor por defecto para el timeout, le asigno uno.
|
|
IF NOT EMPTY(.TimeOutValue)
|
|
.PARENT.IDOpcion = .TimeOutValue
|
|
ENDIF
|
|
|
|
.Form_Hide()
|
|
ENDWITH && THIS.PARENT
|
|
|
|
ENDPROC
|
|
|
|
ENDDEFINE
|
|
|
|
DEFINE CLASS o_timer_tareas AS timer
|
|
*< CLASSDATA: Baseclass="timer" Timestamp="" Scale="Pixels" Uniqueid="" />
|
|
|
|
*<DefinedPropArrayMethod>
|
|
*m: docmd && Ejecuta un método en el objeto indicado. Parámetros: cMetodo, eContexto, iIntervalo, iIteración
|
|
*m: resetparams
|
|
*p: cmetodo && Nombre del método a ejecutar (P.Ej: Actualizar)
|
|
*p: econtexto && Nombre o Referencia del contexto donde ejecutar el método (P.Ej: THIS)
|
|
*p: icontador
|
|
*p: iiteracion && Cantidad de veces que se debe ejecutar el método (Por defecto: 1)
|
|
*p: lerror
|
|
*p: locupado && Flag que indica si el timer está libre u ocupado.
|
|
*p: nsaltearerror
|
|
*a: aerrores[1,7]
|
|
*</DefinedPropArrayMethod>
|
|
|
|
*<PropValue>
|
|
cmetodo =
|
|
econtexto = THIS
|
|
Height = 23
|
|
icontador = 0
|
|
iiteracion = 1
|
|
Name = "o_timer_tareas"
|
|
nsaltearerror = 0
|
|
Width = 23
|
|
*</PropValue>
|
|
|
|
PROCEDURE Destroy
|
|
THIS.ResetParams()
|
|
*_SCREEN.PRINT(PROGRAM() + CHR(13))
|
|
|
|
ENDPROC
|
|
|
|
PROCEDURE docmd && Ejecuta un método en el objeto indicado. Parámetros: cMetodo, eContexto, iIntervalo, iIteración
|
|
LPARAMETERS tcMetodo, teContexto, tiIntervalo, tiIteracion
|
|
|
|
*-- Parámetros:
|
|
*-- cMetodo Nombre del método a ejecutar (P.Ej: Actualizar)
|
|
*-- eContexto Nombre o Referencia del contexto donde ejecutar el método (P.Ej: THIS)
|
|
*-- iIntervalo Valor del intervalo en milisegundos
|
|
*-- iIteracion Cantidad de veces que se debe ejecutar el método (Por defecto: 1)
|
|
*-- Si se indica iIteracion = 0 el timer permanecerá activo hasta que
|
|
*-- se le asigne otra tarea.
|
|
|
|
*-- EJEMPLO DE USO:
|
|
*-- * Ejecutar el método 'Actualizar_Imagen' del control actual.
|
|
*-- * Sintaxis: oTimer.DoCmd(cMétodo, oObjeto, nMilisegundos [,iIteración])
|
|
*-- _SCREEN.oTimer_ControlesXP.DoCmd("Actualizar_Imagen", THIS, 200, 1)
|
|
|
|
WITH THIS
|
|
IF PCOUNT() = 0
|
|
*STRTOFILE(TTOC(DATETIME()) + " - Pedido de Cancelación de tarea" + CHR(13) + CHR(10), "TIMER.TXT", .T.)
|
|
.ResetParams()
|
|
ELSE
|
|
IF tiIteracion = 0
|
|
*STRTOFILE(TTOC(DATETIME()) + " - Pedido de Asignación de tarea sin fin" + CHR(13) + CHR(10), "TIMER.TXT", .T.)
|
|
ELSE
|
|
*STRTOFILE(TTOC(DATETIME()) + " - Pedido de Asignación de tarea" + CHR(13) + CHR(10), "TIMER.TXT", .T.)
|
|
ENDIF
|
|
IF .lOcupado AND .iIteracion > 0
|
|
*STRTOFILE(TTOC(DATETIME()) + " - Se quiso asignar una tarea, pero el timer está ocupado." + CHR(13) + CHR(10), "TIMER.TXT", .T.)
|
|
ELSE
|
|
IF .iIteracion = 0
|
|
IF tiIteracion = 0
|
|
*STRTOFILE(TTOC(DATETIME()) + " - Reemplazo de tarea sin fin e Inicio de Tarea sin fin" + CHR(13) + CHR(10), "TIMER.TXT", .T.)
|
|
ELSE
|
|
*STRTOFILE(TTOC(DATETIME()) + " - Reemplazo de tarea sin fin e Inicio de Tarea" + CHR(13) + CHR(10), "TIMER.TXT", .T.)
|
|
ENDIF
|
|
ELSE
|
|
*STRTOFILE(TTOC(DATETIME()) + " - Inicio de tarea" + CHR(13) + CHR(10), "TIMER.TXT", .T.)
|
|
ENDIF
|
|
.ResetParams()
|
|
.cMetodo = tcMetodo
|
|
.eContexto = teContexto
|
|
.INTERVAL = tiIntervalo
|
|
.iIteracion = tiIteracion
|
|
.lOcupado = .T.
|
|
.ENABLED = .T.
|
|
ENDIF
|
|
ENDIF
|
|
ENDWITH && THIS
|
|
|
|
ENDPROC
|
|
|
|
PROCEDURE resetparams
|
|
WITH THIS
|
|
.ENABLED = .F.
|
|
.INTERVAL = 0
|
|
.iIteracion = 1
|
|
.iContador = 0
|
|
.cMetodo = ""
|
|
.eContexto = NULL
|
|
.eContexto = "THIS"
|
|
.lOcupado = .F.
|
|
.RESET()
|
|
ENDWITH && THIS
|
|
|
|
ENDPROC
|
|
|
|
PROCEDURE Timer
|
|
WITH THIS
|
|
IF .lOcupado
|
|
LOCAL lcMetodo
|
|
.RESET()
|
|
LOCAL loContexto
|
|
IF VARTYPE(.eContexto) = "O"
|
|
loContexto = .eContexto
|
|
ELSE
|
|
loContexto = EVALUATE(.eContexto)
|
|
ENDIF
|
|
|
|
IF .lError
|
|
.lError = .F.
|
|
.ResetParams()
|
|
RETURN
|
|
ENDIF
|
|
lcMetodo = IIF("(" $ .cMetodo, .cMetodo, .cMetodo + "()")
|
|
WITH loContexto
|
|
*=EVALUATE("." + THIS.cMetodo + "()")
|
|
=EVALUATE("." + lcMetodo)
|
|
ENDWITH && loContexto
|
|
IF .lError
|
|
.ResetParams()
|
|
RETURN
|
|
ENDIF
|
|
.iContador = .iContador + 1
|
|
IF .iContador = .iIteracion
|
|
.lError = .F.
|
|
.ResetParams()
|
|
*STRTOFILE(TTOC(DATETIME()) + " - Fin de tarea" + CHR(13) + CHR(10), "TIMER.TXT", .T.)
|
|
ENDIF
|
|
ELSE
|
|
.RESET()
|
|
*STRTOFILE(TTOC(DATETIME()) + " - Se intentó ejecutar una tarea retrasada luego de haber finalizado." + CHR(13) + CHR(10), "TIMER.TXT", .T.)
|
|
ENDIF
|
|
ENDWITH && THIS
|
|
|
|
ENDPROC
|
|
|
|
ENDDEFINE
|