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

  1. #1
    Membre éprouvé
    Utilisation GetcurrentDirectory dans une fonction D6 et Windows 10 (Ed 2004)
    Bonjour à toutes et à tous,

    Je n'arrive pas à ouvrir mon TopenDialogPicture dans le dossier de l'application.

    Je sais que c'est un bug récurrent de Windows depuis un certain temps mais directement avec le composant on pouvait utiliser des astuces.

    Voici mon code dans une fonction :

    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
     
    function OuvrirBitmap(var NomFichier: string; Bitmap: TBitmap): Boolean;
    var
      P: TPicture;
    begin
     
      Result := False;
     
      if NomFichier = '' then
      begin
     
      with TOpenpictureDialog.Create(nil) do
         //with FrmReflet.opd1 do
        try
     
          Options := [ofHideReadOnly, ofFileMustExist];
          Filter := 'BMP et JPEG(*.bmp;*.jpg)|*.bmp;*.jpg|JPEG (*.jpg)|*.jpg';
     
          InitialDir := GetCurrentDir;
     
          if Execute then NomFichier := FileName;
        finally
     
         FileName:= '';
          Free;
        end;
        Application.ProcessMessages; // pour rafraîchir l'affichage
     
      end;
      if NomFichier = '' then Exit;
      P := TPicture.Create;
      try
        P.LoadFromFile(NomFichier);
        Bitmap.Assign(nil);
        Bitmap.Width := P.Width;
        Bitmap.Height := P.Height;
        Bitmap.Canvas.Draw(0, 0, P.Graphic);
        Result := True;
      finally
        P.Free;
      end;
     
    end;


    Merci de votre attention, ce n'est pas urgent c'est uniquement pour comprendre !

    @+,

    cincap

  2. #2
    Membre éprouvé
    @ tous, je viens de tester ceci et cela semble fonctionner à chaque démarrage de l'application.

    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
    var
      P: TPicture;
    chappli : String;
    begin
      
    chappli := getcurrentdir;
      
    Result := False;
    
      if NomFichier = '' then
      begin
    
      with TOpenpictureDialog.Create(nil) do
         //with FrmReflet.opd1 do
        try
    
          Options := [ofHideReadOnly, ofFileMustExist];
          Filter := 'BMP et JPEG(*.bmp;*.jpg)|*.bmp;*.jpg|JPEG (*.jpg)|*.jpg';
    
          InitialDir := chappli;//GetCurrentDir;
    
          if Execute then NomFichier := FileName;
        finally
    ....
    ......


    @+,

    cincap

  3. #3
    Expert éminent sénior
    GetCurrentDir peut changer dans la durée, d'ailleurs, certaines boites de dialogue, n'avait-elle pas tendance à le modifier ?
    GetCurrentDir retourne le chemin de travail, par défaut le dossier l'exe, si c'est lancé depuis un raccourci, on peut l'orienter ailleurs (utile si c'est installé dans Program Files)
    Sinon, il y a Application.ExeName, ParamStr(0) ou GetModuleFilename et dans les Delphi récents : System.IOUtils.TDirectory.GetCurrentDirectory
    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    InitialDir := ExtractFileDir(Application.ExeName);
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

  4. #4
    Membre éprouvé
    @ ShaiLeTroll grand merci pour ton explication, je n'avais jamais utilisé ce chemin et j'ai testé c'est parfait.

    Je peus à nouveau fermer ce topic grâce à vous.

    Bonne fin de journée.

    @+,

    cincap

###raw>template_hook.ano_emploi###