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

Delphi Discussion :

bug du programme apres utilisation de dialog


Sujet :

Delphi

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de avogadro
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    412
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 412
    Par défaut bug du programme apres utilisation de dialog
    Bonjour,

    j'ai un gros probleme, a chaque fois que j'utilise un savedialog, opendialog, ou meme la fonction qui permet de faire un sreenshot de mon application, en fait tout ce qui écrit en dehors de l'application me donne pas mal de probleme notamment lorsque je veux afficher une image externe au programme (dans un dossier a part), ou bien lorsque je veux a nouveau utiliser une opendialog pour lire ce qu'il y a dans mon fichire! je ne sais pas du tout d'ou ça viens, a la limite voici les codes :

    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
    /////////////PROCEDURE POUR OUVRIR/////////////////
    procedure TForm1.Ouvrir1Click(Sender: TObject);
    Var i:Integer;
        F:TextFile;
        lig:string;
    begin
      //Charger.FileName := Sauver.FileName;
     
      If Not Charger.Execute Then Exit;
     
      try
        AssignFile(F,Charger.FileName); //on assigne a F le fichier ouvert
        Memo1.Clear;          //on vide le memo
        Form1:= TForm1.Create(Self);
        For i:=Form1.ComponentCount-1 DownTo 0 Do
          begin
               Form1.Components[i].Free;
          end;
          StatusBar1.Panels.Items[0].Text := tab[5] + Charger.FileName;
     
          reset(F); // on va au debut  du fichier
          while not eof(F) do
          begin //cette boucle répètera la lecture d'une ligne tant que nous n'aurons pas atteint la fin du document EOF
            readln(F,lig);//à chaque fois que l'on utilisera readln on passera à la ligne suivante.
            Memo1.lines.add(lig); // ajoute notre ligne au memo
          end;
          closefile(F);//cette procédure ferme notre fichier F
     
          ShowMessage(Memo1.Text);
     
      except
        on E: Exception do
          ShowMessageFmt('%s : à la lecture de %s', [E.Message, Charger.FileName]);
      end;
    end;
    /////////////FIN PROCEDURE POUR 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
    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
    /////////////PROCEDURE POUR ENREGISTRER SOUS/////////////////
    procedure TForm1.Sauvegardersous1Click(Sender: TObject);   //enregistrer sous
    begin
         Sauver.Execute;
         if(Sauver.FileName <> '') then
         begin
              sauvegardersous(Sauver.FileName);
              StatusBar1.Panels.Items[0].Text := tab[4] + Sauver.FileName;
         end;
     
    end;
    /////////////FIN PROCEDURE POUR ENREGISTRER SOUS/////////////////
     
    /////////////PROCEDURE DE SAUVEGARDE/////////////////
    procedure TForm1.Sauvegarder1Click(Sender: TObject);
    begin
         if sauvegarder = true then
            begin
                 sauvegardersous(nom_fichier);
            end
         else
             Sauver.Execute;
         if Sauver.FileName <> '' then
            begin
                 StatusBar1.Panels.Items[0].Text := tab[4] + Sauver.FileName;
                 sauvegardersous(Sauver.FileName);
            end
    end;
    /////////////FIN PROCEDURE DE SAUVEGARDE/////////////////
     
    ////////////ENREGISTRER SOUS//////////////
    procedure sauvegardersous(where_file: string);
    var
       i : Integer;
       my_file : Textfile;
    begin
         nom_fichier := where_file;
         AssignFile(my_file,where_file);
         ReWrite(my_file);
         sauvegarder := true;
         For i:=0 To Form1.ComponentCount-1 Do
             begin
     
               If Form1.Components[i] Is TImage Then
                  begin
                       Write(my_file,'#'+Form1.Components[i].Name);
                       Write(my_file,'#'+IntToStr(TImage(Form1.Components[i]).Left)+'#'+IntToStr(TImage(Form1.Components[i]).Top));
                  end
               else
                   Write(my_file,'['+Form1.Components[i].Name+']');
     
               Writeln(my_file,'');
             end;
         CloseFile(my_file);
    end;
    ////////////FIN ENREGISTRER SOUS///////////
    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
    /////////////PROCEDURE POUR CREER IMAGE DU RESEAU/////////////////
    procedure TForm1.Imprimer1Click(Sender: TObject);
    begin
      ImageBureau.Bitmap.Width := Form1.Width-(ListBox1.Width+6);//la largeur du BitMap sera la même que celle de l'écran
      ImageBureau.Bitmap.Height := Form1.Height-(StatusBar1.Height+47);// idem pour la hauteur
      BitBlt(ImageBureau.Bitmap.Canvas.Handle,0,0,Form1.Width-(ListBox1.Width),Form1.Height-(StatusBar1.Height+1),
              GetDC(GetDesktopWindow),Form1.Left+3,Form1.top+46,SrcCopy);//recopie l'image du desktop vers ImageBureau
     
      if ImpEc.Execute then
      begin
           ImageBureau.SaveToFile(ImpEc.FileName + '.bmp');
           StatusBar1.Panels.Items[0].Text := tab[6];
      end;
    end;
    /////////////FIN PROCEDURE POUR CREER IMAGE DU RESEAU/////////////////

  2. #2
    Rédacteur
    Avatar de Pedro
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    5 411
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 5 411
    Par défaut
    Salut
    Euh question: pourquoi tu recrées Form1 dans Form1???
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Form1:= TForm1.Create(Self);
    Il y a déjà un problème la-dessus:
    Ta Form1 est-elle en AutoCreate? Si non, tu es obligé de passer par une méthode de classe... Mais c'est franchement pas très propre avec ton code
    Non vraiment, je ne comprends pas cette ligne
    Pedro
    Aucune réponse aux sollicitations techniques par MP

    Faut pas attendre d'en avoir besoin pour s'en servir... (Lucien Stéphane)

    Les pages Source C'est bon. Mangez-en!
    Le défi Delphi
    Règles du forum - FAQ Delphi - Pensez au chtit
    Aéroclub Bastia Saint-Exupéry

  3. #3
    Membre éclairé Avatar de avogadro
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    412
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 412
    Par défaut
    en effet je ne sais pas du tout ce que cette ligne viens faire la, je vais tester en la supprimer parce que a prioris on en a pas besoin. Et ma fois oui la form1 est en autocreate, enfin j'entend pas la quelle se créée toute seule au démarrage de l'application sans qu'on est besoin de lui demander.

    Mais est ce que cette ligne pourrais justement faire buguer mon application de cette façon?

    merci

    EDIT:
    en fait si je l'enleve il n'y a plus rien qui marche, le showmessage ne fonctionne plus c'est étrange :s, a mon avis elle sert a créer une form similaire a la précédent mais vierge!

  4. #4
    Rédacteur
    Avatar de Pedro
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    5 411
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 5 411
    Par défaut
    Salut
    Citation Envoyé par avogadro
    EDIT:
    en fait si je l'enleve il n'y a plus rien qui marche, le showmessage ne fonctionne plus c'est étrange :s, a mon avis elle sert a créer une form similaire a la précédent mais vierge!
    Ben oui:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    For i:=Form1.ComponentCount-1 DownTo 0 Do
          begin
               Form1.Components[i].Free;
          end;
    C'est d'ailleurs étonnant que ton appli ne plante pas puisque tu libères tous les contrôles de ta Form et tu les appelles après (StatusBar1 et Memo1)
    A vrai dire, je ne comprends pas bien cette portion de code T'es sûr qu'il n'y a pas eu un copier/coller malencontreux?
    Pedro
    Aucune réponse aux sollicitations techniques par MP

    Faut pas attendre d'en avoir besoin pour s'en servir... (Lucien Stéphane)

    Les pages Source C'est bon. Mangez-en!
    Le défi Delphi
    Règles du forum - FAQ Delphi - Pensez au chtit
    Aéroclub Bastia Saint-Exupéry

  5. #5
    Membre éclairé Avatar de avogadro
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    412
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 412
    Par défaut
    bah en fait, je créé des image sur la forme, quand je charge un autre fichier, il faut bien que mon application libere celle deja mise sur la form. J'avais procéder comme ça :s tu vois autres chose?

    EDIT : meme en metant ce petit bou de code en commentaire, apres avoir utilisé mon opendialog, il y a un probleme quand je veux chercher un bmp externe a l'application et l'afficher sur la form

  6. #6
    Rédacteur
    Avatar de Pedro
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    5 411
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 5 411
    Par défaut
    Citation Envoyé par avogadro
    bah en fait, je créé des image sur la forme, quand je charge un autre fichier, il faut bien que mon application libere celle deja mise sur la form. J'avais procéder comme ça :s tu vois autres chose?
    Le seul problème c'est qu'avec ta méthode, tu supprimes tous les composants de ta fiche
    Tu peux faire comme ça:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    For i:=Form1.ComponentCount-1 DownTo 0 Do
      if Form1.Components[i] is TImage then
        Form1.Components[i].Free;
    De cette façon, seules les TImage seront suprrimées

    Citation Envoyé par avogadro
    EDIT : meme en metant ce petit bou de code en commentaire, apres avoir utilisé mon opendialog, il y a un probleme quand je veux chercher un bmp externe a l'application et l'afficher sur la form
    J'avoue que je ne comprends pas très bien. Explique un peu mieux ce que tu veux faire.
    Pedro
    Aucune réponse aux sollicitations techniques par MP

    Faut pas attendre d'en avoir besoin pour s'en servir... (Lucien Stéphane)

    Les pages Source C'est bon. Mangez-en!
    Le défi Delphi
    Règles du forum - FAQ Delphi - Pensez au chtit
    Aéroclub Bastia Saint-Exupéry

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

Discussions similaires

  1. utiliser un programme apres l'avoir decompressé
    Par bracket dans le forum Linux
    Réponses: 9
    Dernier message: 17/11/2009, 09h28
  2. [dll] libérer une dll apres utilisation
    Par polo54 dans le forum API standards et tierces
    Réponses: 12
    Dernier message: 11/07/2009, 22h48
  3. "Access violation" apres utilisation des compos BD
    Par bahaa dans le forum Bases de données
    Réponses: 1
    Dernier message: 06/10/2005, 07h59
  4. Lancer automatiquement un programme après connexion Internet
    Par sunshine dans le forum Autres Logiciels
    Réponses: 3
    Dernier message: 27/05/2005, 22h18
  5. [FB] installation et apres? utilisation ???
    Par vad dans le forum Débuter
    Réponses: 7
    Dernier message: 17/02/2005, 09h55

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