IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C++Builder Discussion :

Comment ouvrir un fichier en utilisant le composant "OpenDialog" ?


Sujet :

C++Builder

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    508
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Haute Vienne (Limousin)

    Informations forums :
    Inscription : Avril 2008
    Messages : 508
    Par défaut Comment ouvrir un fichier en utilisant le composant "OpenDialog" ?
    Bonjour à tous,

    je m'explique :

    j'utilise pour l'instant sur mon IHM les composants "DriveComboBox", "DirectoryListBox", "FileListBox".
    Lorsque je sélectionne un fichier dans ma "FileListBox" et que j'appuie sur le bouton "Ovrir" je mets certaines des informations contenues dans le fichier dans des "EditBox".

    Maintenant, j'aimerai changer de manière d'ouverture du fichier : cliquer sur le bouton "Ouvrir" de mon IHM, une "OpenDialog" apparaisse pour ensuite sélectionner un fichier, cliquer sur "ouvrir" de la "OpenDialog" et que les informations contenues dans le fichier soit mises comme avant dans mes "EditBox".

    Merci d'avance pour votre aide, à bientôt !!!

  2. #2
    Membre éclairé Avatar de jehrikhan
    Inscrit en
    Mars 2008
    Messages
    90
    Détails du profil
    Informations forums :
    Inscription : Mars 2008
    Messages : 90
    Par défaut
    Si j'ai bien compris ce que tu veux faire il faut mettre le code qui était derriere ton bouton ouvrir sur l'evenement OnCanClose.

    Le chemin vers le fichier sélectionné se trouve dans la propriété FileName de l'OpenDialog.

  3. #3
    Membre Expert
    Avatar de bakaneko
    Profil pro
    Inscrit en
    Février 2004
    Messages
    1 268
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France

    Informations forums :
    Inscription : Février 2004
    Messages : 1 268
    Par défaut
    Le TOpenDialog est un composant servant à l'affichage de la boite de dialogue de sélection d'un fichier. Il ne fait rien d'autre...

    Voici un exemple rapide :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    TOpenDialog* Open = new TOpenDialog();
     
    if (Open->Execute())//ouverture de la boite de dialogue
    {
     AnsiString FileName = Open->FileName;
     //mon traitement
    }
     
    delete Open;
    Tu peux également donner un titre à la fiche et faire des filtres sur le type de fichier à ouvrir

  4. #4
    Membre éclairé
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    508
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Haute Vienne (Limousin)

    Informations forums :
    Inscription : Avril 2008
    Messages : 508
    Par défaut
    Je vous poste le code qui est derrière mon bouton "ouvrir" :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
     
     
    void __fastcall TFormClient::FileListBoxFichiersChange(TObject *Sender)
    {
       FormClient->FileListBoxFichiers->Mask = "*.gm";
       DOC = FormClient->FileListBoxFichiers->FileName;
     
    }
     
    void __fastcall TFormClient::OuvrirClick(TObject *Sender)
    {
     
    // Création de la liste
    TStringList *Fichier;
     
     
    if(FileExists(DOC)) {
     
       // Chargement du fichier sélectionné dans la liste
       Fichier->LoadFromFile(DOC.c_str());
     
       FormClient->EditNom->Text = Fichier->Strings[1];
     
       [...]
     
       delete Fichier;
     
     
       }
     
    }
    Comment dois je m'y prendre avec ce code pour effectuer la même chose en utilisant le composant "OpenDialog" ???


  5. #5
    Membre éclairé
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    508
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Haute Vienne (Limousin)

    Informations forums :
    Inscription : Avril 2008
    Messages : 508
    Par défaut
    Ok, c'est bon : j'arrive à faire la même chose avec le composant "OpenDialog".

    Mais, lorsque j'ai ouvert un fichier et que je reclique sur le bouton "ouvrir" pour afficher la boite "OpenDialog" et ouvrir un autre fichier il y a une erreur : "Violation d'accès à l'adresse 00403278 dans le module PClient.exe. lecture de l'adresse 00000000".

    Qu'est ce que cela veut dire ???

    Comment dois je faire pour ne plus avoir cette erreur ????



  6. #6
    Membre Expert
    Avatar de bakaneko
    Profil pro
    Inscrit en
    Février 2004
    Messages
    1 268
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France

    Informations forums :
    Inscription : Février 2004
    Messages : 1 268
    Par défaut
    Ce genre d'erreur vient généralement d'une erreur de lecture mémoire.
    Regardes du côté de ta gestion des new/delete.

  7. #7
    Membre éclairé
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    508
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Haute Vienne (Limousin)

    Informations forums :
    Inscription : Avril 2008
    Messages : 508
    Par défaut
    Et bien, j'ai fait normalement ce qu'il fallait !!!!

    Lorsque je met "TOpenDialog* OpenDialog1 = new TOpenDialog();" et que je compile il y a une erreur : "Impossible de trouver une correspondance pour TOpenDialog::TOpenDialog()".
    Alors, je supprime cette ligne, ça compile, mais ça fait l'erreur de mon dernier post !!!!

    Je poste mon code pour que vous puissiez voir où est le problème :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
     
    void __fastcall TFormClient::Button1Click(TObject *Sender)
    {
     
     
     
            FastLineSeriePH->Clear();
    	FastLineSerieConductivite->Clear();
    	FastLineSerieTemperature->Clear();
    	FastLineSerieOxygene->Clear();
     
    	// Création de la liste
    	TStringList *Fichier;
     
    	//TOpenDialog* OpenDialog1;
    	//OpenDialog1 = new TOpenDialog ( );
     
     
    	if (OpenDialog1->Execute())//ouverture de la boite de dialogue
    	{
    		DOC = OpenDialog1->FileName;
     
    		//mon traitement
            AnsiString N;
    		Fichier = new TStringList();
     
    		// Chargement du fichier sélectionné dans la liste
    		Fichier->LoadFromFile(DOC.c_str());
     
    		for(int j = 0; j < Fichier->Count; j++)
            {
    			N = Fichier->Strings[j];
    			for(int i = 1; i <= N.Length(); i++)
    			{
    				if( (N[i] == '.') || (N[i] == ',') )
                    {
    					N[i] = DecimalSeparator;
                    }
                }
            	Fichier->Strings[j] = N;
    		}
     
     
     
     
    		AnsiString NumSerie;
    		int ConvInt;
    		AnsiString ConvHex;
     
     
    		FormClient->EditNom->Refresh();
     
     
    		// Nom de la bouée
    		FormClient->EditNom->Text = Fichier->Strings[1];
     
    		// Numéro de série de la bouée avec affichage en Héxadécimal
     
    		/*NumSerie = Fichier->Strings [2];
    		ConvInt = atoi (NumSerie.c_str());
    		ConvHex = IntToHex (ConvInt,2);
    		FormClient->EditNumSerie->Text = ConvHex;   */
     
    		FormClient->EditNumSerie->Text = Fichier->Strings[2]; 
     
     
    		// RAZ des tableaux
    		ZeroMemory(TabMoy, sizeof(double) * 4);
    		ZeroMemory(TabGraph, sizeof(double) * 4);
     
     
    		// Ligne par ligne
    		for(int i = 3; i < Fichier->Count ; i++) {
     
    			Colonnes(Fichier->Strings[i]);
     
    		}
     
    		 // CALCUL DES MOYENNES
    		for(int i = 0; i < 4; i++) {
     
    			TabMoy[i] = TabMoy[i] / (Fichier->Count-3);
     
    		}
     
    		// Affichage des différentes moyennes
    		FormClient->EditPH->Text = FormatFloat("0.000",TabMoy[0]) ;
    		FormClient->EditConductivite->Text = FormatFloat("0.000",TabMoy[1]) ;
    		FormClient->EditTemperature->Text = FormatFloat("0.0",TabMoy[2]);
    		//FormClient->EditOxygene->Text = FormatFloat("0.000",TabMoy[3]);
     
     
     
     
     
    		// Utilisation des graphes
     
    	   AnsiString asTMP;
     
     
    	   for(int i=3; i< Fichier->Count; i++)
    	   {
     
    		   asTMP = "Valeur " + IntToStr(i);
    		   Colonnes(Fichier->Strings[i]);
    		   FastLineSeriePH->AddXY(i , TabGraph[0], (i-2), clBlue);
    		   FastLineSerieConductivite->AddXY(i , TabGraph[1], (i-2), clGreen);
    		   FastLineSerieTemperature->AddXY(i , TabGraph[2], (i-2), clRed);
    		   //FastLineSerieOxygene->AddXY(i , TabGraph[3], (i-2), clPurple);
     
    	  }   
     
     
    		//Libération de la mémoire
    		Fichier->Clear();
     
    		delete Fichier;
     
     
    	}
     
     
    	delete OpenDialog1;
     
     
     
    }

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 3
    Dernier message: 12/10/2005, 13h53
  2. comment ouvrir un fichier excel ?
    Par vdavid1982 dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 13/07/2005, 12h05
  3. Réponses: 9
    Dernier message: 20/06/2005, 16h47
  4. Comment ouvrir un Fichier d'aide perso
    Par NoBru dans le forum Access
    Réponses: 4
    Dernier message: 09/12/2004, 08h43

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo