Экспертная система Delphi.int.ru

Сообщество программистов
Общение, помощь, обмен опытом

Логин:
Пароль:
Регистрация | Забыли пароль?

Delphi.int.ru Expert

Другие разделы портала

Переход к вопросу:

#   

Статистика за сегодня:  


Лучшие эксперты

Подробнее »



Вопрос # 1 448

/ вопрос открыт /

Здравствуйте, эксперты!
Повторенная мною программа 1) нормально работает, но после введения ее в состав другой программы выходит ошибка: [Error] Unit1.pas(393): Undeclared identifier: 'SelectDirectory' в фрагменте 2), выделенная строка. Прошу объяснить этот случай в частности и такое написание оператора if...then вообще. Делалось в Delphi 7 , WIN_XP. Заранее благодарен МАА. Мой адрес: vfndf@gala.net

Приложение:
  1. 1)
  2.  
  3.  
  4. unit FindFile_;
  5.  
  6. interface
  7.  
  8. uses
  9. Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  10. Dialogs, StdCtrls,
  11. FileCtrl;
  12.  
  13. type
  14. TForm1 = class(TForm)
  15.  
  16.  
  17.  
  18.  
  19.  
  20. Label1: TLabel;
  21. Label2: TLabel;
  22. Label3: TLabel;
  23. Label4: TLabel;
  24. procedure Button1Click(Sender: TObject);
  25. procedure Button2Click(Sender: TObject);
  26. private
  27. { Private declarations }
  28. public
  29. { Public declarations }
  30. end;
  31.  
  32. var
  33. Form1: TForm1;
  34.  
  35. implementation
  36.  
  37. {$R *.dfm}
  38.  
  39. var
  40.  
  41. cDir: string;
  42.  
  43.  
  44.  
  45. procedure Find;
  46. var
  47.  
  48. begin
  49.  
  50. if cDir[length(cDir)] <> '' then cDir := cDir+'';
  51.  
  52. if FindFirst(FileName, faAnyFile,SearchRec) = 0 then
  53. repeat
  54. if (SearchRec.Attr and faAnyFile) = SearchRec.Attr then
  55. begin
  56. Form1.Memo1.Lines.Add(cDir + SearchRec.Name);
  57. n := n + 1;
  58. end;
  59. until FindNext(SearchRec) <> 0;
  60.  
  61.  
  62.  
  63.  
  64.  
  65.  
  66.  
  67.  
  68.  
  69. }
  70.  
  71. if FindFirst('*', faAnyFile, SearchRec) = 0 then
  72. repeat
  73. if (SearchRec.Attr and faDirectory) = faDirectory then
  74.  
  75.  
  76. if SearchRec.Name[1] <> '.' then
  77. begin
  78. // Form1.Memo1.Lines.Add('>>>>'+SearchRec.Name);
  79.  
  80.  
  81.  
  82. //Form1.Memo1.Lines.Add('<<<<'+SearchRec.Name);
  83. end;
  84. until FindNext(SearchRec) <> 0;
  85. end;
  86.  
  87.  
  88.  
  89. procedure TForm1.Button1Click(Sender: TObject);
  90. begin
  91. if not DirectoryExists(Edit2.Text) then
  92. begin
  93.  
  94. Edit2.SetFocus;
  95. exit;
  96. end;
  97.  
  98. Button1.Enabled := False;
  99. Label4.Caption := '';
  100. Label4.Repaint;
  101.  
  102. Label4.Caption := '';
  103.  
  104.  
  105.  
  106.  
  107.  
  108. if n = 0 then
  109.  
  110.  
  111. Button1.Enabled := True;
  112. end;
  113.  
  114.  
  115. function GetPath(mes: string):string;
  116. var
  117.  
  118. pwRoot : PWideChar;
  119. Dir: string;
  120. begin
  121.  
  122. GetMem(pwRoot, (Length(Root)+1) * 2);
  123. pwRoot := StringToWideChar(Root,pwRoot,MAX_PATH*2);
  124. if SelectDirectory(mes, pwRoot, Dir)
  125. then
  126.  
  127. then GetPath := Dir+''
  128. else GetPath := Dir
  129. else
  130. GetPath := '';
  131. end;
  132.  
  133.  
  134. procedure TForm1.Button2Click(Sender: TObject);
  135. var
  136. Path: string;
  137. begin
  138.  
  139. if Path <> ''
  140. then Edit2.Text := Path;
  141. end;
  142.  
  143. end.
  144. 2)
  145. begin
  146. Root := ''; // &#234;&#238;&#240;&#237;&#229;&#226;&#238;&#233; &#234;&#224;&#242;&#224;&#235;&#238;&#227; - &#239;&#224;&#239;&#234;&#224; &#208;&#224;&#225;&#238;&#247;&#232;&#233; &#241;&#242;&#238;&#235;
  147. GetMem(pwRoot, (Length(Root)+1) * 2);
  148. pwRoot := StringToWideChar(Root,pwRoot,MAX_PATH*2);
  149. --------------------------------------------
  150. if SelectDirectory(mes,pwRoot,Dir)
  151. -------------------------------------------------
  152. then
  153. if Length(Dir) = 2


MAA Вопрос ожидает решения (принимаются ответы, доступен мини-форум)

Вопрос задал: 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), теперь понял где копать. Благодарю.

Мини-форум вопроса

Мини-форум пуст.

Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.

Версия движка: 2.6+ (26.01.2011)
Текущее время: 25 марта 2023, 16:44
Выполнено за 0.02 сек.
Рейтинг@Mail.ru