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

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

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

Delphi.int.ru Expert

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

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

#   

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


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

Подробнее »



Вопрос # 538

Раздел: Delphi » Прочее
/ вопрос открыт /

Здравствуйте!
Вот нашел ответ на свой вопрос в виде кода. Вопрос: как "прилепить" этот код к форме?
чтобы оно прочитало путь с поля Edit (не нужно там Open Dialog и всякие другие заморочки делать).

Приложение:
  1. procedure DoIt(const Dir: string);
  2. var
  3. SR: TSearchRec;
  4. begin
  5. SetCurrentDir(Dir);
  6. if FindFirst(Dir + '*.*', faAnyFile, SR) = 0 then
  7. begin
  8. repeat
  9. if (SR.Name <> '.') and (SR.Name <> '..') then
  10. begin
  11. RenameFile(SR.Name, AnsiLowerCase(SR.Name));
  12. if (SR.Attr and faDirectory) <> 0 then
  13. DoIt(Dir + SR.Name + '');
  14. end;
  15. until FindNext(SR) <> 0;
  16. FindClose(SR);
  17. end;
  18. end;


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

Вопрос задал: Pokemonchyk (статус: Посетитель)
Вопрос отправлен: 28 апреля 2007, 16:39
Состояние вопроса: открыт, ответов: 2.

Ответ #1. Отвечает эксперт: Dron

Здравствуйте, Pokemonchyk!
А в чём проблема? Подключить функцию к форме? Делается это точно также, как и добавление новых методов к объектам. В заголовке функции в разделе реализации перед названием функции дописать имя формы:
procedure TForm1.DoIt(const Dir: string);
И добавить заголовк функции в private или public модуля формы...
Вот и всё.

Ответ отправил: Dron (статус: Студент)
Время отправки: 28 апреля 2007, 16:44

Ответ #2. Отвечает эксперт: Помфюк Владимир Степанович

Здравствуйте, Pokemonchyk!
Легко! Процедуру DoIt оставляете такой как она у Вас есть, на форму бросаете кнопку и Edit. Допустим имена у них останутся по-умолчанию: Button1 и Edit1. В свойстве OnClick кнопки Button1 дважды кликаете - Delphi создаст процедуру Button1Click. В ней пишете:

DoIt(Edit1.Text)

Приложение:
  1. procedure DoIt(const Dir: string);
  2. var
  3. SR: TSearchRec;
  4. begin
  5. SetCurrentDir(Dir);
  6. if FindFirst(Dir + '*.*', faAnyFile, SR) = 0 then
  7. begin
  8. repeat
  9. if (SR.Name <> '.') and (SR.Name <> '..') then
  10. begin
  11. RenameFile(SR.Name, AnsiLowerCase(SR.Name));
  12. if (SR.Attr and faDirectory) <> 0 then
  13. DoIt(Dir + SR.Name + '');
  14. end;
  15. until FindNext(SR) <> 0;
  16. FindClose(SR);
  17. end;
  18. end;
  19.  
  20. procedure TForm1.Button1Click(Sender: Tobject);
  21. begin
  22. DoIt(Edit1.Text);
  23. end;


Ответ отправил: Помфюк Владимир Степанович (статус: Абитуриент)
Время отправки: 28 апреля 2007, 16:47


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

Всего сообщений: 8; последнее сообщение — 30 апреля 2007, 21:12; участников в обсуждении: 3.
Pokemonchyk

Pokemonchyk (статус: Посетитель), 28 апреля 2007, 21:34 [#1]:

to Помфюк Владимир Степанович
не работает :(
to Dron
мне нужно чтобы путь к папке оно считывало с поля Edit
Dron

Dron (статус: Студент), 28 апреля 2007, 21:40 [#2]:

Ну так после подключения функции к форме всё упрощается - вместо параметра Dir указать Edit.Text. Кстати, непонятно, зачем там написано const Dir: string - слово const явно лишнее.
"не работает" - конкретнее, плиз - на что ругается.
С уважением.
Pokemonchyk

Pokemonchyk (статус: Посетитель), 28 апреля 2007, 22:49 [#3]:

"после подключения функции к форме всё упрощается"
вот именно что я и не умею нестандартные функции подключать. Я сделал как написано было в коде (в вашем ответе). Заменить Dir на Edit1.Text - вааще хз. что выходит. Если можно выложите код полностью.
Denisss

Denisss (статус: 2-ой класс), 28 апреля 2007, 23:44 [#4]:

Dron,
Цитирую текст книги Дж.Бакнелла "Фундаментальные алгоритмы и структуры данных в Delphi." - СПб.: ООО "ДиаСофтЮП", 2003ю - 560 с:
"Если функции передать строку, которая в процессе выполнения функции не будет изменяться, объявляйте ее как const. В большинстве случаев это исключает скрытое добавление блока try..finally. Если не использовать ключевое слово const, компилятор будет считать, что значение, возможно, будет изменяться, и поэтому вводит скрытую локальную переменную для хранения строки. В начале выполнения функции счетчик ссылок будет увеличен на 1, а в конце - уменьшен на 1. Чтобы гарантировать, что значение счетчика всегда будет уменьшаться, компилятор вставляет скрытый блок try..finally.
Если из строки объявления функции убрать ключевое слово const, ее быстродействие снизится приблизительно на 12% - это и есть влияние скрытого блока try..finally."
Pokemonchyk

Pokemonchyk (статус: Посетитель), 29 апреля 2007, 00:41 [#5]:

спсб за назву. вот щас закачиваю: http://www.4gb.ru/v/56549
Denisss

Denisss (статус: 2-ой класс), 29 апреля 2007, 00:48 [#6]:

Книжка полезная, но не касается напрямую Вашего вопроса. Просто я хотел пояснить, что const вовсе не является лишним. Для этого сослался на книжку.

PS
А у меня обложка другая ;)
Dron

Dron (статус: Студент), 30 апреля 2007, 09:27 [#7]:

Спасибо за информацию :-) Но значение переменной в функции всё равно не меняется.
Pokemonchyk: ну что, так и не получилось? Сначала нужно подключить функцию к форме, как я в ответе указал, а затем её вызвать где-нибудь: DoIt(Edit1.Text);
С уважением.
Pokemonchyk

Pokemonchyk (статус: Посетитель), 30 апреля 2007, 21:12 [#8]:

нет не получается. если не сложно - вышлите пожалуйста все файлы проэкта мне на почту. Я уже и в файле *.dpr пробовал чето писать...

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

Версия движка: 2.6+ (26.01.2011)
Текущее время: 22 февраля 2025, 11:52
Выполнено за 0.03 сек.