Aquí un truco en las datawindows que determina si existen registros duplicados en la datawindow. Lo que puede ser útil, por ejemplo, antes de actualizar en base de datos. En el ejemplo de abajo, la llave primaria (única) es "user_id", entonces lo que se hace es ordenarlas por ésta llave, para posteriormente filtrarlas de manera que solo queden las líneas duplicadas. Si el RowCount posterior al filtrado es mayor a cero, detectamos el o los duplicados, y sin necesidad de recorrer todos los registros.
// la datawindow o datastore en este caso es lds_bufer // ahora usamos el ordenamiento y filtrado para solo dejar los duplicados lds_buffer.SetSort ("user_id A") lds_buffer.Sort() lds_buffer.SetFilter ("user_id = user_id[-1]") lds_buffer.Filter()
if lds_buffer.RowCount() > 0 then //Tenemos un duplicado, y avisamos al usuario. al_row = lds_buffer.GetItemNumber (1, "row_num") as_colname = "user_id" as_error = "Usuario duplicado." return -4 end if
//No hay duplicados, limpiamos el filtro y continuamos con nuestro proceso. lds_buffer.SetFilter ("") lds_buffer.Filter() Explicación:
La formula para combinar los valores de colores promarios en un número es: 256*256*azul + 256*verde + rojo = número donde el valor de cada color primario esta especificado como un valor entre 0 y 255. Por ejemplo, para especificar el cyan, sustituye 255 por azul, 255 por verde y 0 por rojo. El resultado sería 16776960.
En la tabla debajo se enlistan los valores de azul, verde y rojo que puedes usar en la formula para especificar otros colores.
Colores del Sistema En las librerias PFC, hay un servicio de colores que te permite obtener los colores del sistema. Para usarlo, se tiene que llamar a la estructura inv_datacolors.
long ll_selected_text
IF NOT IsValid(gnv_cst_app_object.inv_datacolors) THEN gnv_cst_app_object.of_SetDataColors(True) END IF
gnv_cst_app_object.inv_datacolors.of_SelectedColor( ) // Selected background gnv_cst_app_object.inv_datacolors.of_EnterableColor( ) // Window text gnv_cst_app_object.inv_datacolors.of_ReadOnlyColor( ) // Buttonface gnv_cst_app_object.inv_datacolors.of_SelectedTextColor // Selected Text Color
Para no tener que realizar la fórmula descrita al principio para obtener el valor y asignarlo a una variable, puedes simplemente utilizar la función rgb(rojo INT, verde INT, azul INT). La función admite tres valores numéricos, que equivalen a los valores de rojo, verde y azul, en ese orden. Por ejemplo: rgb(255,255,255) daría como resultado el blanco. rgb(255,0,0) daría como resultado el rojo, rgb(0,255,0) daría como resultado el verde, rgb(0,0,255) daría como resultado el azul y rgb(0,0,0) daría como resultado el negro.
Puedes utilizar la función RGB directamente en las propiedades de color de una datawindow:
O utilizarla al asignarle el valor a alguna constante de color de un objeto en la interfaz gráfica:
Por último, una lista de colores que te ayudaran: BUTTONFACE = 78682240 WINDOW_BACKGROUND = 1087434968 WINDOW_TEXT = 33554592 APPLICATION_WORKSPACE = 268435456 TRANSPARENT = 553648127