SingleLineEdit en tiempo de ejecución

Quisiera saber si es posible crear controles SingleLineEdit en tiempo de ejecución, es más seria preferible si se pudiera crear un array de controles como en visual basic, e estado buscando pero no he encontrado información.
Si alguien tuviera información le estaría muy agradecido
1

1 Respuesta

143.800 pts. Ingeniero en Sistemas con amplia experiencia en...
Viendo lo que querés hacer yo te recomiendo usar una dw externa del tipo N-up que te permite agregar filas como si fueran columnas.
Lo que si deberías saber es la cantidad máxima de nodos para la capa con más nodos. Esto para establecer la cota superior (que en las dw nup es la cantidad de filas por detalle, la propiedad se modifica de esta forma: dw_control. Object. DataWindow. Rows_Per_Detail)
Creo que esta propiedad se puede modificar directamente en tiempo de ejecución pero sino podrías crear la dw dinámicamente en tiempo de ejecución con la fx syntaxfromsql().
---
Lo que yo haría sería tratar de cargar los valores que generás en el programa en una tabla en una BD y después hacer un retrieve con un NUP creada dinámicamente o bien recorrer la tabla y llenar la NUP a mano con un for-next.
Por ej. tener una tabla con 3 columnas (red, nodo, valor) simulando una matriz, cosa de después llenar la dw. Si bien la dw solamente necesita los valores de fila, la red te sirve para identificar cuando tenés que cambiar de "renglón". Esto lo estoy pensando sin probar pero tal vez sabiendo la red con más nodos podes generar valores para todos los casos dejando en nulo aquellos que no quieres mostrar. En tu ejemplo generarías 25 registros:
Las 2 primeras filas serían
Red nodo valor
1 1 +
1 2 +
1 3 null
1 4 null
1 5 null
2 6 +
2 7 +
2 8 +
2 9 +
2 10 null
Etc.
//Depende como lo resuelvas red o nodo puede estar de más
Espero que se entienda el concepto, sino escribime que sigo aclarando.
La forma óptima de hacer lo que pedís en PB es crear una dw externa con un campo string y colocarla en la ventana en la que estás trabajando.
Después cada vez que necesitás un nuevo ingreso de datos simplemente insertás un nuevo registro (dw_1. InsertRow(0)). Después cuando necesitás acceder a los datos lo hacés mediante el object o con un getItemString().
Tenés también la ventaja adicional de poder programar validaciones genéricas sobre los datos ingresados, los distintos eventos del control dw, etc.
También podes recorrer la dw como lo harías con un arreglo y finalmente, podes obtener todos los datos ingresados en la dw y ponerlos en un arreglo con la propiedad object de la dw (dwcontrol. Object. columnname {. buffer } {.datasource } { [ rownum ] }).
Cualquier cosa preguntame.
Y se podrá colocar cada registro insertado en una intentar especifica dentro de la ventana es decir, estas celdas yo las utilizaría para simular una red que tendría varias capas y cada capa varios nodos, y así sabiendo estas cantidades lo que haría es crear una cantidad de celdas(registros en dw) = a la cantidad total de nodos y después tener que darles una intentar dentro de un contenedor por ejemplo:
Red con 5 capas y 17 nodos totales.
(+ = celda)
+ +
+ + + +
+ + + + +
+ + + +
+ +
Esta es la intentar que tendría que darles en tiempo de ejecución, donde cada celda(+) mostraría valores que se generan en tiempo de ejecución.
Como tu dices podría ser empleando un DW external y seria freform pero no se si sepueda asignar una intentar especifica.
Espero tu respuesta, muchas gracias por tu tiempo.
Hola aldob, entendí lo que me mencionaste, cree el dw NUP incluso ya hice un algoritmo usando campos null para que solo me muestre las cantidad de celdas que quiero pero esto creando un dw nup en tiempo de diseño, lo que necesito crearlo en tiempo de ejecución, intente cambiar la propiedad :
.Rows_Per_Detail en tiempo de ejecución pero parece que no puede ser alterado, la otra posibilidad es crear el dw en tiempo de ejecución como me dijiste pero no me sale, he probado con la función SyntaxFromSQL :
n=5 //ejemplo
sql='select nodos from red'
dw_control.SyntaxFromSQL(sql, &
'DataWindow(Rows_Per_Detail = n )', & errstring) ,
Que es la sintaxis mostrada en el help del power, pero sale error que no reconoce la función syntaxfromsl para un dw, en el help habla de código Java
Tambien probe con
sql='select nodos from red'
syntax=sqlca.syntaxfromsql( sql,'Style(Type=NUP)',errorsql)
dw_control.create(syntax,errorsyntax)
aqui se crea el dw nup pero en donde le asigno un valor para Rows_Per_Detail.
Espero tu respuesta y de anticipado muchas gracias .
En el primer ejemplo que ponés te sale el error porque SyntaxFromSQL NO es una función de las dw sino que es de las transacciones, por eso en el segundo ejemplo si anda.
Estuve probando y resulta que si especificás el rows_per_detail te la toma como NUp directamente. Yo usé el siguiente código y me anduvo.
string ls_sql = "SELECT id_articulo, codigo_unidad FROM articulos"
string dwsyntax_str, errors, errstring
string ls_cant = "5"
dwsyntax_str = SQLCA.SyntaxFromSQL(ls_sql,'DataWindow(Rows_Per_Detail = '+ls_cant+' )', errstring)
messagebox ("syntax", dwsyntax_str)//para ver que sale
messagebox ("errstring", errstring)//acá chequeá error
dw_2.Create( dwsyntax_str, ERRORS)
IF Len(ERRORS) > 0 THEN
MessageBox("Caution", &
"Create cause these errors: " + ERRORS)
RETURN
END IF
dw_2.settransobject(sqlca)
dw_2.retrieve()
Cualquier cosa escribí

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas