<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-5890350384475210921</id><updated>2011-11-28T03:06:02.368+02:00</updated><category term='Фиксы'/><category term='Delphi 2009'/><category term='Delphi 2007'/><title type='text'>Delphi по-русски</title><subtitle type='html'>Интересные исходники, Примеры Delphi-кода, объяснения.</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://delphiru.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5890350384475210921/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://delphiru.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Badevlad</name><uri>http://www.blogger.com/profile/17539285626933901318</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_xXALE9XZUqk/Srio03ummYI/AAAAAAAAAAM/NLnrtOIHgGs/S220/denis.jpg'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>5</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-5890350384475210921.post-2196914154002336830</id><published>2011-04-29T03:40:00.000+03:00</published><updated>2011-04-29T03:40:16.666+03:00</updated><title type='text'>Delphi x64</title><content type='html'>&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;Просто поражает количество вопросов в сети, касающихся компиляции приложений для Windows x64 в Delphi.&lt;br /&gt;&lt;br /&gt;Ну нет 64-х битного компилятора Delphi. Совсем нет. Есть только 32-х битный, который, соответственно, генерит 32-х битный код. И этот код отлично работает под 64-х разрядными виндами.&lt;br /&gt;&lt;br /&gt;Уже много лет тянется создание делфового компилятора для 32/64-битных систем. И вроде как работа близка к завершению. По крайней мере есть уже &lt;a href="http://blog.marcocantu.com/blog/looks_a_delphi_64.html"&gt;скриншоты&lt;/a&gt; нового IDE. Так что ждать осталось недолго. Скорее всего, поддержка 64-битности появится в следующей версии Delphi.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5890350384475210921-2196914154002336830?l=delphiru.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://delphiru.blogspot.com/feeds/2196914154002336830/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://delphiru.blogspot.com/2011/04/delphi-x64.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5890350384475210921/posts/default/2196914154002336830'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5890350384475210921/posts/default/2196914154002336830'/><link rel='alternate' type='text/html' href='http://delphiru.blogspot.com/2011/04/delphi-x64.html' title='Delphi x64'/><author><name>Badevlad</name><uri>http://www.blogger.com/profile/17539285626933901318</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_xXALE9XZUqk/Srio03ummYI/AAAAAAAAAAM/NLnrtOIHgGs/S220/denis.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5890350384475210921.post-2557925209813719916</id><published>2011-04-18T14:56:00.000+03:00</published><updated>2011-04-18T14:56:14.406+03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Delphi 2009'/><category scheme='http://www.blogger.com/atom/ns#' term='Delphi 2007'/><category scheme='http://www.blogger.com/atom/ns#' term='Фиксы'/><title type='text'>Ошибка «SetThreadContext failed» в Delphi 2007/2009 под Windows 7 x64</title><content type='html'>&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;Столкнулся с неприятной ошибкой в Delphi 2009 под Windows 7 x64. Как оказалось, точно такая же ошибка присутствует и в Delphi 2007.&lt;br /&gt;&lt;br /&gt;При закрытии любого запущенного из IDE приложения появляется сообщение об ошибке: «Assertion failure: "(!"SetThreadContext failed")"     in ..\win32src\thread32.cpp at line 412      Continue execution?»&lt;br /&gt;&lt;br /&gt;После исследования бескрайних энторнетов на предмет бесплатного решения, было обнаружено, что ошибка действительно имеет место быть. И официального решения для нее до сих пор нет.&lt;br /&gt;&lt;br /&gt;Но, разумеется, есть неофициальное.&lt;br /&gt;&lt;br /&gt;Трудолюбивые программисты могут &lt;a href="http://www.monien.net/blog/index.php/2009/07/delphi-2009-windows-7-64-bit-debugger-crash-workaround"&gt;почитать объяснение&lt;/a&gt;, поковыряться в коде хекс-эдитором и сделать так, чтоб работало.&lt;br /&gt;&lt;br /&gt;Ленивые программисты могут просто &lt;a href="http://www.monien.biz/blog/wp-content/uploads/2009/07/Delphi_2007_2009_WOW64_Debugger_Fix.zip"&gt;скачать неофициальный патч&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Учтите, что в любом случае никто не несет ответственности за ваши действия.&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5890350384475210921-2557925209813719916?l=delphiru.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://delphiru.blogspot.com/feeds/2557925209813719916/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://delphiru.blogspot.com/2011/04/setthreadcontext-failed-delphi-20072009.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5890350384475210921/posts/default/2557925209813719916'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5890350384475210921/posts/default/2557925209813719916'/><link rel='alternate' type='text/html' href='http://delphiru.blogspot.com/2011/04/setthreadcontext-failed-delphi-20072009.html' title='Ошибка «SetThreadContext failed» в Delphi 2007/2009 под Windows 7 x64'/><author><name>Badevlad</name><uri>http://www.blogger.com/profile/17539285626933901318</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_xXALE9XZUqk/Srio03ummYI/AAAAAAAAAAM/NLnrtOIHgGs/S220/denis.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5890350384475210921.post-2142351680198309086</id><published>2009-10-22T11:58:00.000+03:00</published><updated>2009-10-22T11:58:27.964+03:00</updated><title type='text'>Установка компонентов в Delphi</title><content type='html'>Как установить компоненты, которые находятся в модуле?&lt;br /&gt;&lt;br /&gt;Раньше (вплоть до Delphi 7) все было просто: Component &amp;gt; Install Component и в появившемся окне выбираем модуль для установки (автоматически подставляется имя редактируемого в данный момент модуля).&lt;br /&gt;&lt;br /&gt;В более поздних версиях Delphi легкий путь убрали (мы же не ищем легких путей, правда?). Остался более сложный, зато он доступен в любых версиях.&lt;br /&gt;&lt;br /&gt;Создайте новый Package (в Delphi 2009: File &amp;gt; New &amp;gt; Package - Delphi). Добавьте в него модуль, который хотите установить (в Delphi 2009: Project &amp;gt; Add To Project). После этого в Project Manager используйте команду Install. Сохранять Package не обязательно.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5890350384475210921-2142351680198309086?l=delphiru.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://delphiru.blogspot.com/feeds/2142351680198309086/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://delphiru.blogspot.com/2009/10/delphi.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5890350384475210921/posts/default/2142351680198309086'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5890350384475210921/posts/default/2142351680198309086'/><link rel='alternate' type='text/html' href='http://delphiru.blogspot.com/2009/10/delphi.html' title='Установка компонентов в Delphi'/><author><name>Badevlad</name><uri>http://www.blogger.com/profile/17539285626933901318</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_xXALE9XZUqk/Srio03ummYI/AAAAAAAAAAM/NLnrtOIHgGs/S220/denis.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5890350384475210921.post-5109976578493892750</id><published>2009-10-19T18:21:00.001+03:00</published><updated>2009-10-19T18:22:14.544+03:00</updated><title type='text'>Проводник своими руками</title><content type='html'>Некоторые даже не догадываются, что в Delphi начиная с шестой версии включены компоненты ShellControls, воссоздающие функциональность Проводника. А некоторые безуспешно пытались найти их в Delphi 2009.&lt;br /&gt;&lt;br /&gt;Так вот, радостное известие: они никуда не делись! Все так же входят в комплект поставки, просто спрятаны лучше.&lt;br /&gt;&lt;br /&gt;Найти их можно так:&lt;br /&gt;&lt;br /&gt;Для пользователей Delphi 7, например:&lt;br /&gt;C:\Program Files\Borland\Delphi7\Demos\ShellControls&amp;nbsp; &lt;br /&gt;&lt;br /&gt;Для пользователей Delphi 2009, например:&lt;br /&gt;С:\Documents and Settings\All Users\Документы\RAD Studio\6.0\Demos\DelphiWin32\VCLWin32\ShellControls &lt;br /&gt;&lt;br /&gt;Для остальных версий — подобным образом. После установки четыре пиктограмки будет добавлено в панель Samples.&lt;br /&gt;&lt;br /&gt;Набор компонентов ShellControls включает:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;TShellListView: список папок и файлов, совсем как в Проводнике Windows.&lt;/li&gt;&lt;li&gt;TShellTreeView: дерево папок, совсем как в Проводнике Windows.&lt;/li&gt;&lt;li&gt;TShellComboBox: выпадающий список папок, совсем как в Проводнике Windows.&lt;/li&gt;&lt;li&gt; ShellChangeNotifier: компонент который отслеживает изменения в заданной папке.&lt;br /&gt;&lt;/li&gt;&lt;/ol&gt;Соединив TShellListView, TShellTreeView и TShellComboBox можно получить большую часть функциональности Проводника без написания кода.&lt;br /&gt;&lt;br /&gt;Однако не стоит забывать, что ShellControls не зря не включены в основной набор  VCL (в отличие от абсолютно бесполезных Win 3.1 Controls). Компоненты глючноваты и абсолютно недокументированы.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5890350384475210921-5109976578493892750?l=delphiru.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://delphiru.blogspot.com/feeds/5109976578493892750/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://delphiru.blogspot.com/2009/10/blog-post_19.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5890350384475210921/posts/default/5109976578493892750'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5890350384475210921/posts/default/5109976578493892750'/><link rel='alternate' type='text/html' href='http://delphiru.blogspot.com/2009/10/blog-post_19.html' title='Проводник своими руками'/><author><name>Badevlad</name><uri>http://www.blogger.com/profile/17539285626933901318</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_xXALE9XZUqk/Srio03ummYI/AAAAAAAAAAM/NLnrtOIHgGs/S220/denis.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5890350384475210921.post-2923372961000246999</id><published>2009-10-19T17:44:00.003+03:00</published><updated>2009-10-19T17:50:26.823+03:00</updated><title type='text'>Установка даты/времени для папок</title><content type='html'>В Delphi есть замечательные функции для установки аттрибутов и даты/времени файлов:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;b&gt;function &lt;/b&gt;FileSetAttr(&lt;b&gt;const &lt;/b&gt;FileName: &lt;b&gt;string&lt;/b&gt;;&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp; Attr: Integer): Integer;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;b&gt;function &lt;/b&gt;FileSetDate(&lt;b&gt;const &lt;/b&gt;FileName: &lt;b&gt;string&lt;/b&gt;;&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp; Age: Integer): Integer; &lt;/span&gt;&lt;br /&gt;&lt;br /&gt;И хотя функция для установки аттрибутов работает прекрасно, функция для установки даты работает корректно только с файлами.&lt;br /&gt;&lt;br /&gt;Что-ж, это не впервой. Вооружаемся кнопкой F7 и начинаем трассировку с глубоким проникновением в дебри VCL.&lt;br /&gt;&lt;br /&gt;Оказывается, функция &lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;FileSetDate&lt;/span&gt; выглядит примерно так:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;b&gt;function &lt;/b&gt;FileSetDate(&lt;b&gt;const &lt;/b&gt;FileName: &lt;b&gt;string&lt;/b&gt;;&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp; Age: Integer): Integer;&lt;/span&gt;&lt;br /&gt;&lt;b&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;var&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp; f: THandle;&lt;/span&gt;&lt;br /&gt;&lt;b&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;begin&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp; f := FileOpen(FileName, fmOpenWrite);&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp; &lt;b&gt;if &lt;/b&gt;f = THandle(-1) &lt;b&gt;then&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Result := GetLastError&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp; &lt;b&gt;else&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp; &lt;b&gt;begin&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Result := FileSetDate(f, Age);&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; FileClose(f);&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp; &lt;b&gt;end;&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;b&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;end;&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;После вызова &lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;FileOpen&lt;/span&gt; срабатывает условие &lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;f = THandle(-1)&lt;b&gt;&lt;/b&gt;&lt;/span&gt;. Это говорит нам о том, что использовать данную функцию для получения хэндла папки нельзя.&lt;br /&gt;&lt;br /&gt;Проникнем в функцию &lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;FileOpen&lt;/span&gt;. Она представляет собой вызов API-шной функции &lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;CreateFile&lt;/span&gt; с определенным набором параметров. Сама функция имеет такой набор параметров:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;b&gt;function &lt;/b&gt;CreateFile(lpFileName: PWideChar;&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp; dwDesiredAccess, dwShareMode: DWORD;&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp; lpSecurityAttributes: PSecurityAttributes;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp; dwCreationDisposition, dwFlagsAndAttributes: DWORD;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp; hTemplateFile: THandle): THandle; &lt;b&gt;stdcall&lt;/b&gt;;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/aa363858%28VS.85%29.aspx"&gt;MSDN&lt;/a&gt; не скрывает от нас того факта, что для получения хэндла папки нобходимо присутствие флага &lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;FILE_FLAG_BACKUP_SEMANTICS&lt;/span&gt; в параметре &lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;dwFlagsAndAttributes&lt;/span&gt;. Попробуем это на практике. Напишем свою функцию:&lt;br /&gt;&lt;br /&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;b&gt;function &lt;/b&gt;FileSetDate2(&lt;b&gt;const &lt;/b&gt;FileName: &lt;b&gt;string&lt;/b&gt;;&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp; Age: Integer): Integer;&lt;/span&gt;&lt;br /&gt;&lt;b&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;/span&gt;var&lt;/b&gt;&lt;br /&gt;&amp;nbsp; F: THandle;&lt;br /&gt;&lt;b&gt;begin&lt;/b&gt;&lt;br /&gt;&amp;nbsp; F := CreateFile(PChar(FileName),&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; GENERIC_READ &lt;b&gt;or &lt;/b&gt;GENERIC_WRITE, 0, &lt;b&gt;nil&lt;/b&gt;,&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; OPEN_EXISTING, FILE_FLAG_BACKUP_SEMANTICS, 0);&lt;br /&gt;&amp;nbsp; &lt;b&gt;if &lt;/b&gt;F = THandle(-1) &lt;b&gt;then&lt;/b&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Result := GetLastError&lt;br /&gt;&amp;nbsp; &lt;b&gt;else&lt;/b&gt;&lt;br /&gt;&amp;nbsp; &lt;b&gt;begin&lt;/b&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Result := FileSetDate(F, Age);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; FileClose(F);&lt;br /&gt;&amp;nbsp; &lt;b&gt;end&lt;/b&gt;;&lt;br /&gt;&lt;b&gt;end&lt;/b&gt;;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;По-сути мы скопировали функцию из VCL и только заменили способ создания хэндла. Теперь должно работать и с папками.&lt;br /&gt;&lt;br /&gt;Но, увы, не работает.&lt;br /&gt;&lt;br /&gt;Теперь хэндл создается корректно. Дальше тоже все работает корректно. И все-таки дата у папки остается прежней. В чем же дело? Лезем еще глубже — в ту версию функции &lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;FileSetDate&lt;/span&gt;, которая принимает хэндл в качестве параметра.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;b&gt;function &lt;/b&gt;FileSetDate(Handle: Integer;&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp; Age: Integer): Integer;&lt;/span&gt;&lt;br /&gt;&lt;b&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;var&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp; LocalFileTime, FileTime: TFileTime;&lt;/span&gt;&lt;br /&gt;&lt;b&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;begin&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp; Result := 0;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp; &lt;b&gt;if &lt;/b&gt;DosDateTimeToFileTime(LongRec(Age).Hi,&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; LongRec(Age).Lo, LocalFileTime) &lt;b&gt;and&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; LocalFileTimeToFileTime(LocalFileTime,&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; FileTime) &lt;b&gt;and &lt;/b&gt;SetFileTime(Handle, &lt;b&gt;nil&lt;/b&gt;, &lt;b&gt;nil&lt;/b&gt;,&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; @FileTime) &lt;b&gt;then &lt;/b&gt;Exit;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp; Result := GetLastError;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;b&gt;end&lt;/b&gt;;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Как видно, эта функция приводит дату к нужному виду, а затем просто передает ее в API-функцию &lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;SetFileTime&lt;/span&gt;, имеющую четыре параметра: хэндл открытого файла или папки, время создания, время последнего обращения и время последнего изменения. В нашем же случае передается только последний параметр, что логично для файла и абсолютно бессмысленно для папки! Ведь у папки есть только время создания.&lt;br /&gt;&lt;br /&gt;В конце концов, наша собственная функция начинает работать корректно и для файлов и для папок:&lt;br /&gt;&lt;br /&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;b&gt;function &lt;/b&gt;FileSetDate2(&lt;b&gt;const &lt;/b&gt;FileName: &lt;b&gt;string&lt;/b&gt;;&lt;br /&gt;&amp;nbsp; Age: Integer): Integer;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;b&gt;var&lt;/b&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp; F: THandle;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;b&gt;begin&lt;/b&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp; F := CreateFile(PChar(FileName),&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; GENERIC_READ or GENERIC_WRITE, 0, &lt;b&gt;nil&lt;/b&gt;,&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; OPEN_EXISTING, FILE_FLAG_BACKUP_SEMANTICS, 0);&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp; &lt;b&gt;if &lt;/b&gt;F = THandle(-1) &lt;b&gt;then&lt;/b&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Result := GetLastError&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp; &lt;b&gt;else&lt;/b&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp; &lt;b&gt;begin&lt;/b&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;b&gt;try&lt;/b&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;b&gt;if &lt;/b&gt;DosDateTimeToFileTime(LongRec(Age).Hi,&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; LongRec(Age).Lo, LocalFileTime) &lt;b&gt;and&lt;/b&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; LocalFileTimeToFileTime(LocalFileTime,&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; FileTime) &lt;b&gt;and&lt;/b&gt; SetFileTime(F, @FileTime,&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; nil, @FileTime) &lt;b&gt;then &lt;/b&gt;Exit;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Result := GetLastError;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;b&gt;finally&lt;/b&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; FileClose(F);&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;b&gt;end&lt;/b&gt;;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp; &lt;b&gt;end&lt;/b&gt;;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;b&gt;end&lt;/b&gt;;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;Если для файла нужно устанавливать только дату последнего изменения, можно изменить функцию, добавив соответствующую проверку.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5890350384475210921-2923372961000246999?l=delphiru.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://delphiru.blogspot.com/feeds/2923372961000246999/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://delphiru.blogspot.com/2009/10/blog-post.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5890350384475210921/posts/default/2923372961000246999'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5890350384475210921/posts/default/2923372961000246999'/><link rel='alternate' type='text/html' href='http://delphiru.blogspot.com/2009/10/blog-post.html' title='Установка даты/времени для папок'/><author><name>Badevlad</name><uri>http://www.blogger.com/profile/17539285626933901318</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_xXALE9XZUqk/Srio03ummYI/AAAAAAAAAAM/NLnrtOIHgGs/S220/denis.jpg'/></author><thr:total>0</thr:total></entry></feed>
