| 
| 
 | Вопрос # 1 448/ вопрос открыт / | 
 |  Здравствуйте, эксперты!Повторенная мною программа 1)  нормально работает, но после введения ее в состав другой программы выходит ошибка:     [Error] Unit1.pas(393): Undeclared identifier: 'SelectDirectory'         в фрагменте 2), выделенная строка.  Прошу объяснить этот случай в частности и такое написание оператора    if...then     вообще. Делалось в Delphi 7 , WIN_XP.    Заранее благодарен МАА. Мой адрес:    vfndf@gala.net
 Приложение:Переключить в обычный режим                         1)  unit FindFile_; interface uses  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,  Dialogs, StdCtrls,  FileCtrl; type  TForm1 = class(TForm)         Label1: TLabel;    Label2: TLabel;    Label3: TLabel;    Label4: TLabel;    procedure Button1Click(Sender: TObject);    procedure Button2Click(Sender: TObject);  private    { Private declarations }  public    { Public declarations }  end; var  Form1: TForm1; implementation {$R *.dfm} var    cDir: string;   procedure Find;var begin    if cDir[length(cDir)] <> '' then cDir := cDir+'';    if FindFirst(FileName, faAnyFile,SearchRec) = 0 then       repeat          if (SearchRec.Attr and faAnyFile) = SearchRec.Attr then             begin               Form1.Memo1.Lines.Add(cDir +  SearchRec.Name);               n := n + 1;             end;        until FindNext(SearchRec) <> 0;                 }        if FindFirst('*', faAnyFile, SearchRec) = 0 then          repeat              if (SearchRec.Attr and faDirectory) = faDirectory then                      if SearchRec.Name[1] <> '.' then                       begin                         // Form1.Memo1.Lines.Add('>>>>'+SearchRec.Name);                            //Form1.Memo1.Lines.Add('<<<<'+SearchRec.Name);                       end;          until FindNext(SearchRec) <> 0;end;   procedure TForm1.Button1Click(Sender: TObject);begin        if not DirectoryExists(Edit2.Text) then        begin             Edit2.SetFocus;            exit;        end;         Button1.Enabled := False;        Label4.Caption := '';        Label4.Repaint;         Label4.Caption := '';             if n = 0 then          Button1.Enabled := True;end;  function GetPath(mes: string):string;var   pwRoot : PWideChar;  Dir: string;begin   GetMem(pwRoot, (Length(Root)+1) * 2);  pwRoot := StringToWideChar(Root,pwRoot,MAX_PATH*2);  if SelectDirectory(mes, pwRoot, Dir)     then               then GetPath := Dir+''              else GetPath := Dir     else          GetPath := '';end;  procedure TForm1.Button2Click(Sender: TObject);var  Path: string;begin   if Path <> ''     then Edit2.Text := Path;end; end.                            2)  begin    Root := ''; // êîðíåâîé
êàòàëîã -
ïàïêà
Ðàáî÷èé
ñòîë  GetMem(pwRoot, (Length(Root)+1) * 2);  pwRoot := StringToWideChar(Root,pwRoot,MAX_PATH*2);--------------------------------------------  if  SelectDirectory(mes,pwRoot,Dir)-------------------------------------------------     then     if Length(Dir) = 2  
|  |   Вопрос задал: MAA (статус: Посетитель)Вопрос отправлен: 25 марта 2008, 18:07
 Состояние вопроса: открыт, ответов: 1.
 |  Ответ #1. Отвечает эксперт: Вадим К Здравствуйте, MAA!С многих причин функции погруппированы в юниты (библиотеки функций). Наверно вверху файла видели строку, которая начинается на uses - это они и перечисленны. SelectDirectory находиться в файле fileCtrl.pas, по этому нужно добавить в список uses FileCrtl. Хотя автор кода,  с которого вы взяли код, мог написать свою функцию с таким же именем - тогда надо смотреть, кто "лишний" в списке uses.
 вторая половина вопроса.
 Вас смутила запись   if  SelectDirectory(mes,pwRoot,Dir)? и что тут дивного. Правда если запись вида if a=0 then тоже смущает, тогда это не ко мне.
 Дело в том, что оператор if требует после себя не наличие операторов сравнение, а выражения логического типа (то есть, что возвращает True|False). А указаная функция как раз и есть типа boolean
 
|  | Ответ отправил: Вадим К (статус: Академик)Время отправки: 25 марта 2008, 23:43
 Оценка за ответ: 5
 Комментарий к оценке: Благодарю, ответ полный. Засмущало меня отсутствие инфы по типу выражения SelectDirectory(mes,pwRoot,Dir), теперь понял где копать. Благодарю. |  
 Мини-форум вопросаМини-форум пуст. Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте. |