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

  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;
     
     
     
    }

  8. #8
    Expert confirm�

    Avatar de pottiez
    Homme Profil pro
    D�veloppeur C++
    Inscrit en
    Novembre 2005
    Messages
    7 152
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 40
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activit� : D�veloppeur C++
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2005
    Messages : 7 152
    Par d�faut
    Il faut un TComponent en param�tre, cela d�finit le propri�taire du composant que tu vient d'instancier.

    Tu peut mettre NULL ou this :
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
     
        TOpenDialog* OpenDialog1;
        OpenDialog1 = new TOpenDialog (this);

  9. #9
    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
    Si c'est ce code que tu as dans ton source, je vois ton erreur.

    Ton OpenDialog1 est un composant TOpenDialog que tu as pos� sur ta fiche. Hors, � la fin de ta m�thode, tu fais un delete OpenDialog1 donc, tu supprimes ta d�claration de ton OpenDialog.

    Tu as 2 options :
    1/ supprimer le delete � la fin de ta m�thode
    2/ supprimer le composant pos� sur ta fiche et passer par un composant instanci� comme l'indique pottiez.

  10. #10
    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 merci les amis !!!


    J'ai opt� pour la m�thode de cr�ation instanci�e !!!

    Tout fonctionne tr�s bien !!!

    A bient�t !!!


+ 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