Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Rellenar un ComboBox a partir de un archivo config.ini (https://www.clubdelphi.com/foros/showthread.php?t=26454)

developerManu 24-10-2005 13:24:01

Rellenar un ComboBox a partir de un archivo config.ini
 
Buenas,
Tengo un archivo de configuración como el siguiente (config.ini): (ejemplo)
[CONEXIONES]
T1=192.192.192.192::5900
T2=192.192.192.192::5915

Lo que quiero conseguir es que al crear el formulario (onCreate), se me generé automaticamente el TComboBox. Los datos de combo los sacará del archivo de configuración, pero solamente quiero el primer elemento de cada linia del archivo de configuración, es decir, T1, T2,... etc.

Y luego que al pulsar sobre T1, o T2, genere una conexión remota, que en el archivo de configuración es lo que hay detrás del "=", es decir:IP::PUERTO

Normalmente, programo en PHP, y HTML. En html el combobox tiene 2 propiedades, una que son los textos que quiere que aparezca en el combobox, y otra el valor que tiene cada elemento del combo, es decir: T1 (texto del combo) y 192.192.192.192::5900 (valor del primer elemento del combo)

No se si en delphi están estas 2 propiedades. He encontrado el items (que son los elementos del combo), pero donde puedo guardar sus valores. No se si se puede hacer?

Sino se puede hacer, lo que se me ha ocurrido es tener 2 combo, uno de los cuales estará oculto: el que contendrá los valores. Y dependiendo del elemento seleccionado del combo1 cogeré (hare la conexión) con el elemento del combo2.

Entonces para hacer esto, como puedo separar cada elemento del archivo de configuracion?

Para leer el archivo utilizo:
Fichero := TStringList.Create();
Fichero.LoadFromFile(Tecnicos);

Donde tecnicos es la url del archivo, y luego con Fichero.Strings[i] consigo la linea entera apuntada por 'i', y lo guardo en una varibale cadena. Por lo tanto, en cadena tendría por ejemplo : cadena := "T1=192.192.192.192::5900".

Ahora necesitaria separarlo en 2 (texto,valor), y para ello utilizo método Delimiter, pero no funciona, alguien me puede ayudar?

PD: No se si me he explicado, espero que si.

Muchas gracias por todo,
Un saludo.

Lepe 24-10-2005 15:16:08

La forma más simple de hacerlo es así:

Código Delphi [-]
var ini:Tinifile;
begin
  ini := Tinifile.Create('c:\miarchivo.ini');
  try 
    ini.ReadSection('CONEXIONES', combobox1.items);
  finally 
     ini.free;
  end;
end;

Con eso cargas los T1, T2, etc.

Cuando haces clic en un elemento del combo, abres el ini y lees con:
Código Delphi [-]
DireccionIpEnString:= ini.ReadStrings('CONEXIONES', 
           combobox1.items[combobox.itemindex],  // el T1, T2 etc.
           'sin direccion asignada');

Si realmente quieres tener el par de valores cargados en el combo para evitar tener que acceder al .ini, entonces mira la ayuda de TStringList.AddObject. Aqui se complica un poquito más la cosa, ya que tendrás que crear un objeto y asociarlo a cada T1.

Ten en cuenta que TStringList deriva de TStrings, por tanto, se puede guardar un objeto por cada elemento que se muestra en el combobox.

Una vez que decidas qué método te gusta más, ya nos preguntarás.

saludos

developerManu 24-10-2005 18:40:21

Muchísimas gracias,

AL final lo hago con un archivo ini, y voy leyendo según me convenga de ese archivo.

Una última cosa, se os ocurre alguna idea, para que no sea tan fácil de modificar el archivo ini. (que sólo se pueda modificar cuando sea necesario, por ejemplo porque se han cambiado las conexiones)?

Me explico, cambiando este archivo ini concretamente las [CONEXIONES], mi aplicación funcionaría sin ningún problema y la gente lo podría utilizar para ellos mismos.

Por ejemplo : SAT 01=192.192.192.192:5900, si cambias esta conexion por otra, el programa funciona sin problemas, y en lugar de conectarse a esa IP se conectaria a la nueva.

Estoy pensando de hacer un apartado version:
[VERSION]
ver=5.12

Y que este numero sea una operación matematica de haber sumado todas las conexiones(una vez pasado a ASCII caracter a caracter), y cogieno la parte entera.

Que os parece la idea? hay alguna forma más facil de implementarlo?

Un saludo,
Y otra vez, muchísimas gracias, no sabía que había un clase que trataba los archivos de configuraicion (*.ini).

PD: Hacia mas de 3 años que no programaba en Delphi, porque me había dedicado a la programación web (PHP+mysql,HTML...etc), ya empiezo a recordar porque me gustaba tanto esta herramienta de desarrollo.

dec 24-10-2005 22:13:34

Hola,


Cita:

Empezado por developerManu
Una última cosa, se os ocurre alguna idea, para que no sea tan fácil de modificar el archivo ini.

Si te refieres a lo que creo, tal vez pudieras cifrar/descifrar el archivo cuando te fuera menester.

Delfino 24-10-2005 23:17:13

Cita:

No se si en delphi están estas 2 propiedades
La propiedad Items (y cualquier desendiente de TStrings) se puede dividir en dos TStrings:Names y Values separados por defecto por el "=" aunque se puede cambiar el simbolo separador por la propiedad NameValueSeparator (a partir de Delphi7), asi q puedes cargar extraer solo las partes de la derecha (Names) o de la izquierda (Values) ..

developerManu 25-10-2005 09:42:10

Buenos días,

Ayer conseguir encriptarlo/desencriptarlo a mi gusto y funciona perfectamente.
Ahora voy a intentar hacer que se pueda bajar este archivo de configuración desde un FTP, como un "actualizar". En el FTP tendré siempre la ultima versión del config.ini, y cuando se cambie, intentaré que salga algún mensaje como "Hay una nueva versión", o algo parecido. Ya os contaré si me sale.

Sobre lo que comentas Delfino, lo intentaré tambien, porque esa es la idea que tenía al principio.

Sino me sale ya os iré pididendo ayuda.

Un saludo,
Y muchisimas gracias por todo.


La franja horaria es GMT +2. Ahora son las 05:23:12.

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