|
|
|
|
- Presentación
- Declaración
- Ejemplo
- Reemplazar tabuladores por espacios
- Extensión de tipo Color
Procedimiento de extensió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 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 2024La 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)
RETURN WL.This.Format(ccUpCase)
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)
Trace(sText.ReplaceTABWithXSpace(4))
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
rLuminance = 1 - (0.299 * SourceColor..Red + ...
0.587 * SourceColor..Green + 0.114 * SourceColor..Blue)/255
IF rLuminance < 0.5 THEN
nLightness = 12
ELSE
nLightness = 88
END
ColorResult = HSL(ColorHue(SourceColor), ...
ColorSaturation(SourceColor), nLightness)
RETURN ColorResult
Llamada al procedimiento de extensión:
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
MyColor = HTMLToRGB(arrHTMLColors[Random(1, arrHTMLColors..Count)] )
STC_BackgroundColorTest.BackgroundColor = MyColor
STC_BackgroundColorTest.Color = MyColor.ReadableTextColor()
Esta página también está disponible para…
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|