2010-09-22 24 views
0

je la séquence suivante de commandes dans Delphi2010:GetDir dans Delphi2010 ne fonctionne pas sous Windows 7?

var netdir:string; 
    .... 
    OpenDialog1.InitialDir:=netdir; 
    .... 
    OpenDialog1.Execute... 
    .... 
    GetDir(0,netdir); 
    .... 

Après l'exécution OpenDialog je devrais avoir dans la chaîne netdir le répertoire où je finis mon OpenDialog.Execute. Et dans le prochain OpenDialog.Execute, il devrait commencer à partir de ce répertoire . Cela fonctionne bien sur XP, mais pas sur Windows 7? Il commence toujours à partir du répertoire où le programme est installé.

Une idée de ce qui pourrait être faux?

Merci.

Répondre

2

Votre question ne peut pas répondre en l'état, car elle manque de plusieurs détails cruciaux.

  1. netdirnetdir est une constante globale ou est-elle parfois hors de portée?
  2. Réglez-vous netdir sur quelque chose avant OpenDialog1.Execute?
  3. La question sur le répertoire GetDir renvoie-t-elle (comme votre titre l'indique), ou sur la façon de faire en sorte que la boîte de dialogue ouverte se souvienne du dernier répertoire visité (comme le suggère le corps)?

Je suppose que 1) netdir est une constante globale, que 2) vous ne définissez pas d'abord, et que 3) vous voulez la boîte de dialogue ouverte de se rappeler le dernier dossier visité. Ainsi, vous avez quelque chose comme

unit Unit3; 

interface 

uses 
    Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, 
    Dialogs; 

type 
    TForm3 = class(TForm) 
    OpenDialog1: TOpenDialog; 
    procedure FormClick(Sender: TObject); 
    private 
    { Private declarations } 
    public 
    { Public declarations } 
    end; 

var 
    Form3: TForm3; 

var 
    netdir: string; 

implementation 

{$R *.dfm} 

procedure TForm3.FormClick(Sender: TObject); 
begin 
    OpenDialog1.InitialDir := netdir; 
    OpenDialog1.Execute; 
    GetDir(0, netdir); 
end; 

end. 

Ensuite, la solution est de laisser Windows mémorisez le répertoire pour vous, c'est tout simplement faire

procedure TForm3.FormClick(Sender: TObject); 
begin 
    OpenDialog1.Execute; 
end; 

seul! Mais pourquoi votre méthode ne fonctionne-t-elle pas? Eh bien, GetDir ne retourne pas ce que vous voulez. Si vous avez besoin d'un contrôle explicite, faites

procedure TForm3.FormClick(Sender: TObject); 
begin 
    OpenDialog1.InitialDir := netdir; 
    OpenDialog1.Execute; 
    netdir := ExtractFilePath(OpenDialog1.FileName) 
end; 
2

Si vous ne voulez pas opendialog, vous pouvez faire comme ci-dessous pour obtenir dir sous votre programme.

yourdir:=ExtractFilePath(Application.ExeName); 

Je l'ai fait dans Vista et ça marche.

0

C'est la solution pour le problème

openDialog1.Options := [ofFileMustExist]; 

if openDialog1.Execute then 
begin 

end;