AYUDA EN LÍNEA
 WINDEVWEBDEV Y WINDEV MOBILE

Ayuda / WLanguage / Sintaxis WLanguage / Procedimientos WLanguage
  • Presentación
  • Declaración
  • Ejemplo
  • Reemplazar tabuladores por espacios
  • Extensión de tipo Color
WINDEV
WindowsLinuxUniversal Windows 10 AppJavaReportes y ConsultasCódigo de Usuario (UMC)
WEBDEV
WindowsLinuxPHPWEBDEV - Código Navegador
WINDEV Mobile
AndroidWidget Android iPhone/iPadIOS WidgetApple WatchMac CatalystUniversal Windows 10 App
Otros
Procedimientos almacenados
Presentación
Los procedimientos de extensión permiten agregar procedimientos WLanguage personalizados a diferentes tipos de variables (string, date, color etc.). Estos procedimientos pueden llamarse como funciones nativas de WLanguage. Por lo tanto, el tipo básico de WLanguage se "extiende".
Para indicar que un procedimiento es de extensión, deben cumplirse las siguientes condiciones:
  • el primer parámetro es del tipo que debe ser "extendido",
  • el prototipo del procedimiento tiene el atributo <extension>.
Declaración
Declaración de un procedimiento de extensión del tipo String:
PROCEDURE MyCustomProcedure(s is string) <extension>
Observaciones:
  • Los procedimientos de extensión aparecen en las sugerencias de código del tipo extendido.
  • Los procedimientos de extensión no pueden utilizarse con tipos como Boolean, Integer, Real, Numeric, etc. (cualquier tipo utilizado para manipular valores numéricos).
  • Solo se pueden extender los tipos WLanguage.
  • Solo los procedimientos globales pueden tener el atributo <extension>.
  • Si el procedimiento de extensión sobrescribe una función WLanguage, también se sobrescribirá la sintaxis estándar de dicha función. Por ejemplo, la creación de un procedimiento de extensión "Format" para el tipo String sobrescribirá las funciones <Cadena>.Format y StringFormat.
  • También es posible encadenar las llamadas a los procedimientos de extensión.
  • Novedad versión 2024
    La palabra clave 'This' tiene el mismo comportamiento que en las clases o controles: hace referencia al objeto actual.
    En un procedimiento de extensión, la palabra clave 'This' hace referencia al primer parámetro.
    Por lo tanto, puede utilizar 'This' precedido de 'WL' para hacer referencia a las funciones estándar de WLanguage y evitar llamadas a una función sobrecargada.
    Ejemplo:
    PROCÉDURE Format(x is string): string <extension>
    Trace(This) // equivalent to Trace(x)
    RETURN WL.This.Format(ccUpCase) // Calls the standard Format function
Ejemplo

Reemplazar tabuladores por espacios

Procedimiento para reemplazar tabuladores por espacios:
PROCÉDURE ReplaceTABWithXSpace(s is string, n is int) <extension>: string
RETURN s.Replace(TAB, RepeatString(" ", n))
Llamada al procedimiento de extensión:
sText is string = TAB + "XXX"
Trace(sText) // <TAB>XXX
Trace(sText.ReplaceTABWithXSpace(4)) //     XXX

Extensión de tipo Color

Procedimiento de extensión de tipo Color, utilizado para obtener un color de texto legible sobre un color de fondo determinado.
PROCÉDURE ReadableTextColor(SourceColor is Color) <extension>: Color

nLightness is int
rLuminance is real
ColorResult is Color


// Calculate the luminance of the color passed as parameter
rLuminance = 1 - (0.299 * SourceColor..Red + ...
0.587 * SourceColor..Green + 0.114 * SourceColor..Blue)/255

// According to the luminance, the text color must have a low or high lightness
IF rLuminance < 0.5 THEN
// Low luminosity
nLightness = 12
ELSE
// High luminosity
nLightness = 88
END

// The returned color keeps the shade and the saturation
ColorResult = HSL(ColorHue(SourceColor), ...
ColorSaturation(SourceColor), nLightness)

RETURN ColorResult
Llamada al procedimiento de extensión:
// Array of colors
arrHTMLColors is array of strings
arrHTMLColors.Add("#F48FB1")
arrHTMLColors.Add("#C2185B")
arrHTMLColors.Add("#64B5F6")
arrHTMLColors.Add("#1565C0")
arrHTMLColors.Add("#81C784")
arrHTMLColors.Add("#2E7D32")

MyColor is Color

// Gets a random color
MyColor = HTMLToRGB(arrHTMLColors[Random(1, arrHTMLColors..Count)] )

// Sets the initial color as background color
STC_BackgroundColorTest.BackgroundColor = MyColor

// Sets an easily readable color as text color
STC_BackgroundColorTest.Color = MyColor.ReadableTextColor()
Versión mínima requerida
  • Versión 28
Esta página también está disponible para…
Comentarios
Haga clic en [Agregar] para publicar un comentario

Última modificación: 08/09/2023

Señalar un error o enviar una sugerencia | Ayuda local