|
Внимание, важное сообщение: Дорогие Друзья!
В ноябре далекого 2001 года мы решили создать сайт и форум, которые смогут помочь как начинающим, так и продвинутым пользователям разобраться в операционных системах. В 2004-2006г наш проект был одним из самых крупных ИТ ресурсов в рунете, на пике нас посещало более 300 000 человек в день! Наша документация по службам Windows и автоматической установке помогла огромному количеству пользователей и сисадминов. Мы с уверенностью можем сказать, что внесли большой вклад в развитие ИТ сообщества рунета. Но... время меняются, приоритеты тоже. И, к сожалению, пришло время сказать До встречи! После долгих дискуссий было принято решение закрыть наш проект. 1 августа форум переводится в режим Только чтение, а в начале сентября мы переведем рубильник в положение Выключен Огромное спасибо за эти 24 года, это было незабываемое приключение. Сказать спасибо и поделиться своей историей можно в данной теме. С уважением, ваш призрачный админ, BigMac... |
|
| Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » Delphi - *Флейм* | Delphi. Синтаксис. Использование WinAPI |
|
|
Delphi - *Флейм* | Delphi. Синтаксис. Использование WinAPI
|
|
Обратный инженер Сообщения: 644 |
Итак,вопрос начинающего программиста заключается в следующем - имеется следующий текст кода:
Цитата:
Не мог бы кто-нибудь разъяснить это дело? P.S. Пример кода взят из книги Валерия Фаронова "Система программирования Delphi" . |
||
|
------- Отправлено: 17:41, 19-11-2004 |
|
Старожил Сообщения: 300
|
Профиль | Сайт | Отправить PM | Цитировать Можно так (используя WinAPI):
program Project_test;
uses Windows, SysUtils; // Необходимые модули
var
CreateTime, // Дата создания
LastAccess, // Дата последнего доступа
LastWrite // Дата последней записи в файл
: PFileTime;
SystemTime: _SystemTime;
FileHandle: THandle;
begin
New(CreateTime); // Создаем переменную под хранение даты/времени
LastAccess:=nil; // Не изменять эту дату/времени
LastWrite:=nil; // Не изменять эту дату/времени
// Открываем некоторый файл
FileHandle:=FileOpen('Project_test.dpr', fmOpenWrite or fmShareDenyNone);
// Произошла ошибка - выводим диагностическое сообщение
if FileHandle < 1 then MessageBox(0,'Не могу открыть файл','Ошибка',0);
try
GetSystemTime(SystemTime); // Получаем текущее системное время
// Преобразовываем переменную к сжатому виду
SystemTimeToFileTime(SystemTime,CreateTime^);
// Устанавливаем дату и время для файла FileHandle
SetFileTime(FileHandle,CreateTime,LastAccess,LastWrite);
finally
FileClose(FileHandle); // Закрываем дескриптор (файл)
Dispose(LastWrite); // Уничтожаем переменную под хранение даты/времени
end;
end.
|
|
Отправлено: 22:46, 20-01-2005 | #31 |
|
Обратный инженер Сообщения: 644
|
Профиль | Отправить PM | Цитировать Savant
...хм...хм...ну,ничего себе...в любом случае спасибо - попробую . |
|
------- Отправлено: 23:04, 20-01-2005 | #32 |
|
Старожил Сообщения: 300
|
Профиль | Сайт | Отправить PM | Цитировать DillerInc
Я тут сижу и думаю: какая идиллия!.. Я помогаю тебе осваивать Obj. Pascal , а frizzn по сути так же хелпает мне с Си/Си++ ![]() Нет, ну просто умора |
|
Отправлено: 02:04, 21-01-2005 | #33 |
|
Обратный инженер Сообщения: 644
|
Профиль | Отправить PM | Цитировать Savant
Взяв в пример код,приведённый тобой выше(который я,кстати,так и не компилировал,т.к. толку создавать программу,если я не до конца понимаю алгоритма её работы)...в общем,решил я залесть в дебри функций WinAPI(типа те,в модуле Windows.pas)и окончательно потерялся .Во-первых,правильно ли,что... PFileTime = ^TFileTime ...и можно ли так объявлять эти типизированные указатели,т.е. ... CreationTime : ^TFileTime; Во-вторых,как понимать запись: _SystemTime ...т.е. именно это подчёркивание впереди? Далее имеется API-функция: function GetFileTime(hFile: THandle; lpCreationTime, lpLastAccessTime, lpLastWriteTime: PFileTime): BOOL; stdcall; Хотелось бы уточнить,что представляют из себя буквы lp,например: lpCreationTime ? Результатом этой функции является значение логического типа BOOL,спрашивается: как я могу использовать это логиское значение,если я хочу вывести,к примеру,вывести дату создания файла в Label1.Caption?И ведь,по-моему,в модулях SysUtils.pas и Windows.pas нету какой-нибудь функции типа FileTimeToDateTime,или...? Заранее прошу прощения,если уж очень пристаю со своими вопросами . |
|
------- Последний раз редактировалось DillerInc, 21-01-2005 в 21:39. Отправлено: 21:07, 21-01-2005 | #34 |
|
Старожил Сообщения: 300
|
Профиль | Сайт | Отправить PM | Цитировать Цитата:
Цитата:
Цитата:
Цитата:
Цитата:
Цитата:
Кстати есть FileTimeToSystemTime(); |
||||||
|
Отправлено: 16:06, 22-01-2005 | #35 |
|
Обратный инженер Сообщения: 644
|
Профиль | Отправить PM | Цитировать Savant
В общем,насчёт функции GetFileTime - в одном месте подсмотрел :Procedure A; var FileHandle : THandle; FileTime, LocalFileTime : TFileTime; SystemTime : TSystemTime; Date1 : String; begin FileHandle := FileOpen(OpenDialog1.FileName, fmOpenWrite or fmShareDenyNone); GetFileTime(FileHandle, @FileTime,NIL,NIL); FileTimeToLocalFileTime(FileTime, LocalFileTime); FileTimeToSystemTime(LocalFileTime, SystemTime); Date1 := DateTimeToStr(SystemTimeToDateTime(SystemTime)); Label1.Caption := Date1; |
|
------- Отправлено: 17:44, 22-01-2005 | #36 |
|
Старожил Сообщения: 300
|
Профиль | Сайт | Отправить PM | Цитировать DillerInc
При использовании маленьких переменных - практически все равно, что использовать - динамическое создание/уничтожение переменных ( New(), Dispose() ) или статическое. Мне просто уже привычно работать с динамическим выделением буфера и поэтому я привёл свой пример в том виде в каком привёл . В данном случае я действительно немного переборщил, можно было обойтись одной "собачкой", которая возвращает адрес элемента, стоящего за ней (причем не только переменной, но также функции). Процедура New необходима, когда используются буферы (переменные) по несколько МБайт. |
|
Отправлено: 17:59, 22-01-2005 | #37 |
|
Новый участник Сообщения: 31
|
Профиль | Отправить PM | Цитировать Savant
Цитата:
![]() |
|
|
------- Отправлено: 23:26, 22-01-2005 | #38 |
|
Обратный инженер Сообщения: 644
|
Профиль | Отправить PM | Цитировать Для начала - с челобитной к ув. Модераторам: с какой стати тему окрестили как Флейм?По-моему,здесь идёт самый настоящий процесс разгрызания гранита науки
,т.е. на мой взгляд точнее было бы назвать тему *Практика*|Delphi. Синтаксис или что-то наподобие. Далее...помогите,господа,пожалуйста по следующему делу: хочу вставить в программу возможность показа сообщения типа mtConfirmation(ну,если пользователь сделал какие-то изменения в открытом документе и хочет выйти из программы,не сохранив эти изменения.Т.к. подобного компонента-диалога в среде Delphi вроде нету,я написал пробный обработчик события нажатия кнопки: procedure TfmExample.bbRunClick(Sender: TObject); const Msg : String = 'Changes you made are not saved yet.Would you like to save them?'; DlgType : TMsgDlgType = mtConfirmation; Buttons : TMsgDlgButtons = mbYesNoCancel; var d : Integer; begin d := CreateMessageDialog(Msg, DlgType, Buttons).ShowModal; case d of mrYes : SaveDialog1.Execute; mrNo : fmExample.Close; mrCancel : Abort; end end; Насколько я понимаю,необходимо сделать обработчик события OnCloseQuery основной формы и,применяя условные операторы,вывести в нужный момент на экран диалоговое сообщение...а вот как это сделать логически правильно? |
|
------- Отправлено: 13:19, 07-02-2005 | #39 |
|
Старожил Сообщения: 300
|
Профиль | Сайт | Отправить PM | Цитировать Объяснять долговато, лучше на примере.
Вот, наклепал по-быстрому, но хоть понятно что-то... |
|
Отправлено: 17:16, 07-02-2005 | #40 |
|
|
Участник сейчас на форуме |
|
Участник вне форума |
![]() |
Автор темы |
![]() |
Сообщение прикреплено |
| |||||
| Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
| [флейм] GGK и уголовная ответственность за использование нелицензионного ПО | SPB | Лицензирование продуктов Microsoft | 9 | 20-06-2007 12:38 | |
| Delphi - WinApi||C++Builder(Delphi) SplashScreen в отдельном потоке? | XCodeR | Программирование и базы данных | 4 | 12-03-2007 19:51 | |
| Delphi - Win32 API | Delphi | Странности с Winapi Timer | Mavlyudov | Программирование и базы данных | 4 | 14-11-2005 10:10 | |
| Delphi - Delphi, WinAPI | Корректное завершение программы | fossil | Программирование и базы данных | 6 | 10-08-2005 14:52 | |
| Delphi - *Решено* | Использование WinAPI под Delphi | Savant | Программирование и базы данных | 2 | 14-01-2005 21:40 | |
|