funcion genérica para cargar combos
Hola a todos de nuevo,
Como ya comenté en otro post, suelo diseñar las aplicaciones haciendo que cada opción del programa active el frame que corresponda. Al seleccionar la opción del menú, se llama al procedimiento init, que siempre pongo en todos los frames. Este procedimiento se encarga de limpiar los formularios si es preciso, cargar los combos que pueda haber y por último, de mostrar el formulario. Para cargar los combos (con datos de una tabla mysql) suelo hacer lo siguiente: he declarado una variable en private como valores: array of integer; y para cargar el combo hago: Código:
procedure TFrame.Cargar_valores(); cargarCombo(NombreCombo, ArrayValores, Tabla, CampoTexto, CampoValor) He intentado hacerlo, pero cometo algún error al pasar el array. Imagino que el problema estará en que paso el array por valor y se debe pasar por referencia. No estoy seguro. También he intentado hacerlo con una función y que la llamada fuera así: ArrayValores := CargarCombo(NombreCombo,Tabla, CampoTexto, CampoValor) Pero no puedo definir la función para que devuelva un array de enteros. ¿A Alguien se le ocurre cómo podría realizar esta tarea? Me ahorraría muchas horas de tecleo. Gracias y un saludo. |
una forma para hacerlo con valores de tipo integer y un combo;
cuando quieras recuperar el entero de la posicion 2 haces lo siguiente
Por cierto no necesariamente tiene que ser un TComboBox, cualquier derivado de TStrings (por ejemplo TStringList) tiene la propiedad objects. para valores de otro tipo creas un TList (no confundir con ListBox) y haces que los objects apunten a los items del TList |
La idea de droguerman se puede simplificar un poquito:
Saludos |
|
Cita:
|
Gracias, Doguerman,
Me ha venido de perlas tu explicación. También agradezco el resto de aportaciones desde luego. Desconocía la propiedad objects y que se lo podía dar este uso. Ahora ya tengo hecha una función "genérica", que pasandole el nombre de la tabla, el campo que quiero almacenar y el campo que quiero mostrar en el combo, me permite cargar un combo. Esto me va a ahorrar mucho trabajo. Gracias de nuevo. En todo caso, y ya solo por curiosidad, pregunto: Si tu tienes una variable global en un unit, pongamos un array de enteros y quieres hacer una función que haga alguna cosa con ellos ¿cómo se ha de pasar el parámetro?. Para ser más específicos. Imaginemos que tengo una variable que es un array de enteros [1,2 y 3] y quiero hacer una función que multiplique ese array por dos (evidentemente, y que los datos permanezcan almacenados en dicho array). Código:
miarray: array[0..2] of integer = (1,2,3); Gracias de nuevo y un saludo. |
Cuando se tiene que optener un resultado de tipo string y se tiene el combobox ordenado, se debe relacionar el combobox con el StringList para recuperar los datos de lista
Gracias |
para el tema de arrays, mira aqui
Usa High(nombreArray) y Low(nombreArray) para saber los índices superior e inferior respectivamente. Saludos |
La franja horaria es GMT +2. Ahora son las 06:30:14. |
Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi