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 :

Message : Identificateur non déclaré TSelectDirExtOpts


Sujet :

Delphi

  1. #1
    Membre régulier Avatar de souminet
    Inscrit en
    Novembre 2006
    Messages
    351
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 351
    Points : 111
    Points
    111
    Par défaut Message : Identificateur non déclaré TSelectDirExtOpts
    Re bonjour à tous et à toutes!!

    Voilà , j'ai trouvé sur le net un Source pour la création d'un composant Non visuel: TSelectDirDialog qui permet de selectionner un dossier au lieu d'un fichier, j'ai suivi le tuto à la lettre pour la création du paquet et le code de base de tout composant crée dans le source de l'unité SelDirDlg.pas du paquet correspondant...

    Voici le code:
    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
    unit SelDirDlg;
     
    interface
     
    Uses Windows, SysUtils, Classes, FileCtrl;
     
    Type
      TDirName = Type string;
      TAcceptDirEvent = procedure (Sender: TObject; Directory: TDirName) of object;
      TSelectDirDialog = Class(Tcomponent)
     
    Private
      FCaption: string;
      FRoot: TDirName;
      FDirectory: TDirName;
      FOptions: TSelectDirExtOpts;
     
      FOnAccept: TAcceptDirEvent;
      FOnCancel: TNotifyEvent;
      function CaptionStored: boolean;
      function RootStored : boolean;
      function DirStored : boolean;
     
    Public
      constructor Create(AOwner: TComponent); override;
      Function Execute: boolean;
      published
      property Caption: string read FCaption write FCaption;
      Property Root: TDirName read FRoot write FRoot;
      Property Directory : TDirName read FDirectory write FDirectory;
      Property Options: TSelectDirExtOpts read FOptions write FOptions;
      property OnAccept: TAcceptDirEvent read FOnAccept write FOnAccept;
      property OnCancel: TNotifyEvent read FOnCancel;
      end;
    implementation
    Var
     MainDisk: TDirName;
    constructor TSelectDirDialog.Create(AOwner: TComponent);
    begin
      inherited;
      FCaption:=('Selectionnez un dossier');
      FRoot:='C:\';
      FOptions:=[sdNewUI];
      FOnAccept:=nil;
      FOnCancel:=nil;
    end;
     
    function TSelectDirDialog.CaptionStored: boolean;
    begin
      Result:=FCaption <> 'Selectionnez un dossier';
    end;
    function TSelectDirDialog.RootStored: boolean;
    begin
      Result:=FRoot <> MainDisk;
    end;
     function TSelectDirDialog.DirStored: boolean;
    begin
      Result:=FDirectory<> MainDisk;
    end;
    function TSelectDirDialog.Execute: boolean;
    begin
      Result:=SelectDirectory(FCaption, FRoot, string(FDirectory), FOptions);
      if result then
      begin
        if assigned(FOnAccept) then
        FOnAccept(Self, FDirectory);
        end
        else
        begin
         if assigned(FOnCancel) then
         FOnCAncel(Self);
         end;
        end;
     
        Initialization
        SetLength(MainDisk, MAX_PATH);
        SetLength(MainDisk, GetWindowsDirectory(PChar(MainDisk), MAX_PATH));
        MAinDisk:=IncludeTrailingPathDelimiter(ExtractFileDrive(MainDisk));
    end.
    Mon problème est que lors de la compilation j'ai un avertissement de type: L'unité 'FileCtrl' est propre à une plate-forme , s'en suit 02 autres messages d'erreur: Identificateur non déclaré: TSelectDirExtOpts
    et : Identificateur non déclaré:: sdNewUI
    ainsi que : Trop de paramètres originaux à la ligne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Result:=SelectDirectory(FCaption, FRoot, string(FDirectory), FOptions);
    J'ai l'impression que la routine SelectDirectory de l'unité FileCtrl n'est pas surchargée !!!????????

  2. #2
    Invité1
    Invité(e)
    Par défaut
    pour "L'unité 'FileCtrl' est propre à une plate-forme", puisque c'est un composant donc il ne peut pas etre executé, je pense que cette erreur est normale,

    pour les deux autres je sais pas,

    dis moi au juste ce que tu cherche peut etre que je trouverai un meilleur composant

    sinon moi en general je crée mes propres composants ou DLL

    bonne chance

  3. #3
    Membre régulier Avatar de souminet
    Inscrit en
    Novembre 2006
    Messages
    351
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 351
    Points : 111
    Points
    111
    Par défaut
    dis moi au juste ce que tu cherche peut etre que je trouverai un meilleur composant
    le TOpenDialog est une composant non visuel qui permet de faire appel à une boite de dialogue pour la selection de fichiers, moi je voudrais procéder à la selection de dossier et non de fichiers...!!!! pour implémenter une sauvegarde de ma base de données!!! ou encore une restauration!!

    merci+++++++++++++++

  4. #4
    Expert éminent sénior
    Avatar de Cl@udius
    Homme Profil pro
    Développeur Web
    Inscrit en
    Février 2006
    Messages
    4 878
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Février 2006
    Messages : 4 878
    Points : 10 008
    Points
    10 008
    Par défaut
    Salut

    Si tu souhaites uniquement sélectionner un dossier, il y a tout ce qu'il faut dans l'unité FileCtrl avec la fonction SelectDirectory.

    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
     
    uses
      FileCtrl;
     
    procedure TForm1.Button1Click(Sender: TObject);
    var
      SelDir: string;
    const
      RootDir = 'C:\';
    begin
      // Sélection d'un dossier
      if SelectDirectory('Sélection du dossier', RootDir, SelDir) then
      begin
        SelDir := IncludeTrailingPathDelimiter(SelDir);
        ShowMessage(SelDir);
        // ...
      end;
    end;
    Quant au message d'avertissement, cela signifie que l'unité FileCtrl est destiné à une seule plate-forme (Win32 en l'occurence).
    Si tu veux ignorer cet avertissement à la compilation tu peux ajouter cette directive de compilation à ton unité:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    {$WARN UNIT_PLATFORM OFF}
    @+ Claudius

  5. #5
    Membre régulier Avatar de souminet
    Inscrit en
    Novembre 2006
    Messages
    351
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 351
    Points : 111
    Points
    111
    Par défaut
    Citation Envoyé par Cl@udius Voir le message
    Salut

    Si tu souhaites uniquement sélectionner un dossier, il y a tout ce qu'il faut dans l'unité FileCtrl avec la fonction SelectDirectory.

    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
     
    uses
      FileCtrl;
     
    procedure TForm1.Button1Click(Sender: TObject);
    var
      SelDir: string;
    const
      RootDir = 'C:\';
    begin
      // Sélection d'un dossier
      if SelectDirectory('Sélection du dossier', RootDir, SelDir) then
      begin
        SelDir := IncludeTrailingPathDelimiter(SelDir);
        ShowMessage(SelDir);
        // ...
      end;
    end;
    Quant au message d'avertissement, cela signifie que l'unité FileCtrl est destiné à une seule plate-forme (Win32 en l'occurence).
    Si tu veux ignorer cet avertissement à la compilation tu peux ajouter cette directive de compilation à ton unité:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    {$WARN UNIT_PLATFORM OFF}
    @+ Claudius
    Oui cettte solution est la plus optimale, mais il ne me reste qqu'un tout petit problème d'affichage de la boite de dialogue correspondante à la fonction SelectDirectory... Je voudrais qu'elle ne s'afiche pas au coin droit de l'écran mais au milieu...?????

    Merci+++++++++

  6. #6
    Invité1
    Invité(e)
    Par défaut un autre composant
    voici un autre composant, coté interface disons que j'ai vu mieux, enfin

    sinon tu peux toujours utiliser les composants qui se trouvent dans l'onglet 'exemples'

    -ShellListView
    -ShellTreeView
    -ShellComboBox

    a++++
    Dernière modification par Invité1 ; 16/09/2008 à 12h07.

  7. #7
    Membre régulier Avatar de souminet
    Inscrit en
    Novembre 2006
    Messages
    351
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 351
    Points : 111
    Points
    111
    Par défaut
    Citation Envoyé par samy larson Voir le message
    voici un autre composant, coté interface disons que j'ai vu mieux, enfin

    sinon tu peux toujours utiliser les composants qui se trouvent dans l'onglet 'exemples'

    -ShellListView
    -ShellTreeView
    -ShellComboBox

    a++++
    Oui ces composants je les ai déja essayé, mais il faut créer une fiche et tout le Tralala qui va avec, donc j'opte plutôt pour la fonction SelectDirectory, c'est plus pratique... Reste à régler ce petit problème d'affichage de la boite de dialogue au centre de l'ecran, et la partie sera jouée!!!!

  8. #8
    Invité1
    Invité(e)
    Par défaut la solution
    slt,
    En utilisant selectdirectory la boite de dialogue s’affiche en bas c’est impossible de la mettre au milieu.

    Donc voici une autre méthode plus longue mais même résultat et au milieu de l'ecran, tu recopies ce code comme il est, et ça doit bien marcher

    Les unités à utiliser
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    uses ShellAPI, ShlObj;
    les fonctions utilisées à recopier

    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
     
    function BrowseDialogCallBack
      (Wnd: HWND; uMsg: UINT; lParam, lpData: LPARAM): 
      integer stdcall;
     
    var
      wa, rect : TRect;
      dialogPT : TPoint;
    begin
      //center in work area
      if uMsg = BFFM_INITIALIZED then
      begin
        wa := Screen.WorkAreaRect;
        GetWindowRect(Wnd, Rect);
        dialogPT.X := ((wa.Right-wa.Left) div 2) - 
                      ((rect.Right-rect.Left) div 2);
        dialogPT.Y := ((wa.Bottom-wa.Top) div 2) - 
                      ((rect.Bottom-rect.Top) div 2);
        MoveWindow(Wnd,
                   dialogPT.X,
                   dialogPT.Y,
                   Rect.Right - Rect.Left,
                   Rect.Bottom - Rect.Top,
                   True);
      end;
      Result := 0;
    end; (*BrowseDialogCallBack*)
    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
     
    function BrowseDialog
     (const Title: string; const Flag: integer): string;
    var
      lpItemID : PItemIDList;
      BrowseInfo : TBrowseInfo;
      DisplayName : array[0..MAX_PATH] of char;
      TempPath : array[0..MAX_PATH] of char;
    begin
      Result:='';
      FillChar(BrowseInfo, sizeof(TBrowseInfo), #0);
      with BrowseInfo do begin
        hwndOwner := Application.Handle;
        pszDisplayName := @DisplayName;
        lpszTitle := PChar(Title);
        ulFlags := Flag;
        lpfn := BrowseDialogCallBack;
      end;
      lpItemID := SHBrowseForFolder(BrowseInfo);
      if lpItemId <> nil then begin
        SHGetPathFromIDList(lpItemID, TempPath);
        Result := TempPath;
        GlobalFreePtr(lpItemID);
      end;
    end;
    pour l'utiliser

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    procedure TForm1.Button1Click(Sender: TObject);
    var
      sFolder : string;
    begin
      sFolder := BrowseDialog(‘Sélection d’un répertoire’, 
                              BIF_RETURNONLYFSDIRS);
     
      if sFolder <> '' then
        ShowMessage('Selected: ' + #13#10 + sFolder);
    end;
    Le chemin du repertoire est dans la variable « sfolder »

    bonne chance

  9. #9
    Membre régulier Avatar de souminet
    Inscrit en
    Novembre 2006
    Messages
    351
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 351
    Points : 111
    Points
    111
    Par défaut
    Citation Envoyé par samy larson Voir le message
    slt,
    En utilisant selectdirectory la boite de dialogue s’affiche en bas c’est impossible de la mettre au milieu.

    Donc voici une autre méthode plus longue mais même résultat et au milieu de l'ecran, tu recopies ce code comme il est, et ça doit bien marcher

    Les unités à utiliser
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    uses ShellAPI, ShlObj;
    les fonctions utilisées à recopier

    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
     
    function BrowseDialogCallBack
      (Wnd: HWND; uMsg: UINT; lParam, lpData: LPARAM): 
      integer stdcall;
     
    var
      wa, rect : TRect;
      dialogPT : TPoint;
    begin
      //center in work area
      if uMsg = BFFM_INITIALIZED then
      begin
        wa := Screen.WorkAreaRect;
        GetWindowRect(Wnd, Rect);
        dialogPT.X := ((wa.Right-wa.Left) div 2) - 
                      ((rect.Right-rect.Left) div 2);
        dialogPT.Y := ((wa.Bottom-wa.Top) div 2) - 
                      ((rect.Bottom-rect.Top) div 2);
        MoveWindow(Wnd,
                   dialogPT.X,
                   dialogPT.Y,
                   Rect.Right - Rect.Left,
                   Rect.Bottom - Rect.Top,
                   True);
      end;
      Result := 0;
    end; (*BrowseDialogCallBack*)
    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
     
    function BrowseDialog
     (const Title: string; const Flag: integer): string;
    var
      lpItemID : PItemIDList;
      BrowseInfo : TBrowseInfo;
      DisplayName : array[0..MAX_PATH] of char;
      TempPath : array[0..MAX_PATH] of char;
    begin
      Result:='';
      FillChar(BrowseInfo, sizeof(TBrowseInfo), #0);
      with BrowseInfo do begin
        hwndOwner := Application.Handle;
        pszDisplayName := @DisplayName;
        lpszTitle := PChar(Title);
        ulFlags := Flag;
        lpfn := BrowseDialogCallBack;
      end;
      lpItemID := SHBrowseForFolder(BrowseInfo);
      if lpItemId <> nil then begin
        SHGetPathFromIDList(lpItemID, TempPath);
        Result := TempPath;
        GlobalFreePtr(lpItemID);
      end;
    end;
    pour l'utiliser

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    procedure TForm1.Button1Click(Sender: TObject);
    var
      sFolder : string;
    begin
      sFolder := BrowseDialog(‘Sélection d’un répertoire’, 
                              BIF_RETURNONLYFSDIRS);
     
      if sFolder <> '' then
        ShowMessage('Selected: ' + #13#10 + sFolder);
    end;
    Le chemin du repertoire est dans la variable « sfolder »

    bonne chance

    Ok Merci++++ c'est la solution que je vais utiliser!!!

    Ciao

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

Discussions similaires

  1. [D5] Identificateur non déclaré
    Par MelkInarian dans le forum Delphi
    Réponses: 2
    Dernier message: 20/04/2007, 17h20
  2. findcomponent, identificateur non déclaré
    Par chourmo dans le forum Delphi
    Réponses: 3
    Dernier message: 04/07/2006, 13h54
  3. Identificateur non déclaré
    Par nisere dans le forum Langage
    Réponses: 2
    Dernier message: 21/03/2006, 09h33
  4. Identificateur non déclaré : 'Null'
    Par Mofid04 dans le forum Bases de données
    Réponses: 4
    Dernier message: 12/03/2006, 11h47
  5. Problème d'identificateur non déclaré
    Par renorx dans le forum Débuter
    Réponses: 3
    Dernier message: 14/11/2005, 20h39

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