Ver Mensaje Individual
  #10  
Antiguo 01-04-2015
Avatar de Angel.Matilla
Angel.Matilla Angel.Matilla is offline
Miembro
 
Registrado: ene 2007
Posts: 1.350
Reputación: 19
Angel.Matilla Va por buen camino
Cita:
Empezado por Casimiro Notevi Ver Mensaje
¿No limpiarás las variables antes de volver a leerlas?
No. Las inicializo al principio de la función. No quería extenderme en exceso proque hay llamadas a funciones externas y demás, pero este es el código completo que estoy usando:
Código:
void __fastcall TfPersona::FormCreate(TObject *Sender)
{
    BROWSEINFO bi;
    int nDirectorio = 0;
    LPITEMIDLIST ItemID;
    TStringList *slIniFile = new TStringList();
    UnicodeString cInicio;
    wchar_t WDir[MAX_PATH], FolderName[MAX_PATH];

    UnicodeString cAcceso  = "";
    UnicodeString cEntorno = "";
    UnicodeString cTablas  = "";

    cAux = ChangeFileExt(Application->ExeName, ".ini");
    if (!FileExists(cAux))
    {
        slBotones->Clear();
        slBotones->Text = "Buscar\r\nCancelar";
        if (Mensaje(this, String("Instalación"), String("Indique la situación de la base de datos"), tdiShield, slBotones) == mrCancel)
        {
            slBotones->Text = "Abandonar";
            Mensaje(this, String("Instalación"), String("No puede iniciarse la sesión.\r\nDesconozco la situación de los ficheros."), tdiError, slBotones);
            Application->Terminate();
            return;
        }

        while (nDirectorio == 0)
        {
            memset(&bi, 0, sizeof(BROWSEINFO));
            memset(WDir, 0, MAX_PATH);
            bi.hwndOwner = NULL;
            bi.pszDisplayName = FolderName;
            bi.lpszTitle = String("Seleccione la situación de la base de datos").c_str();
            ItemID = SHBrowseForFolder(&bi);
            SHGetPathFromIDList(ItemID, WDir);
            GlobalFreePtr(ItemID);
            cInicio = String(WDir);

            if (cInicio == "")
            {
                slBotones->Text = "Abandonar";
                Mensaje(this, String("Instalación"), String("No puede iniciarse la sesión.\r\nDesconozco la situación de los ficheros."), tdiError, slBotones);
                Application->Terminate();
                return;
            }

            if (cInicio[1] > 'B')
               {
                    if (cInicio.LastDelimiter("\\") == cInicio.Length())
                         cInicio = cInicio.SubString(1, cInicio.LastDelimiter("\\") - 1);

                    cAux = "La base de datos de afiliados se ";
                    if (DirectoryExists(cInicio + "\\DatAfi21"))
                         cAux = cAux + "encuentra";
                    else
                         cAux = cAux + "creará";
                    cAux = cAux + " en:\r\n\r\n" + cInicio + "\\DatAfi21\r\n\r\n¿Es correcta la elección?";
                slBotones->Text = "Es correcta\r\nCambiar ubicación";
                if (Mensaje(this, String("Instalación"), cAux, tdiNone, slBotones) == 100)
                {
                    nDirectorio = 1;
                    try
                    {
                        System::ChDir(cInicio);
                    }
                    catch(...)
                    {
                        slBotones->Text = "Volver";
                        Mensaje(this, String("Instalación"), String("La vía seleccionada no está accesible.\r\nRevise su elección, por favor."), tdiError, slBotones);
                              nDirectorio = 0;
                         }
                    }
               }
               else
            {
                slBotones->Text = "Volver";
                Mensaje(this, String("Instalación"), String("La vía seleccionada no está accesible.\r\nRevise su elección, por favor."), tdiError, slBotones);
                nDirectorio = 0;
               }
        }

        TIniFile *fIni = new TIniFile(ChangeFileExt(Application->ExeName, ".ini"));
        fIni->WriteString("DATOS", "Entorno", cInicio + "\\DatAfi21\\Gia.ini");
        fIni->WriteString("DATOS", "Acceso" , cInicio + "\\DatAfi21\\Acceso");
        fIni->WriteString("DATOS", "Tablas" , cInicio + "\\DatAfi21\\Tablas");
        delete fIni;
    }

    TIniFile *fIni = new TIniFile(ChangeFileExt(Application->ExeName, ".ini"));
    fIni->ReadSectionValues(UnicodeString("DATOS"), slIniFile);
    cEntorno = UnicodeString(fIni->ReadString(UnicodeString("DATOS"), "Entorno", cEntorno));
    cAcceso  = UnicodeString(fIni->ReadString(UnicodeString("DATOS"), "Acceso" , cAcceso));
    cTablas  = UnicodeString(fIni->ReadString(UnicodeString("DATOS"), "Tablas" , cTablas));
    delete fIni;
}
Responder Con Cita