|
Компьютерный форум 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() ) или статическое. Мне просто уже привычно работать с динамическим выделением буфера и поэтому я привёл свой пример в том виде в каком привёл ![]() |
Отправлено: 17:59, 22-01-2005 | #37 |
![]() Новый участник Сообщения: 31
|
Профиль | Отправить PM | Цитировать Savant
Цитата:
![]() |
|
------- Отправлено: 23:26, 22-01-2005 | #38 |
![]() Обратный инженер Сообщения: 644
|
Профиль | Отправить PM | Цитировать Для начала - с челобитной к ув. Модераторам: с какой стати тему окрестили как Флейм?По-моему,здесь идёт самый настоящий процесс разгрызания гранита науки
![]() ![]() Далее...помогите,господа,пожалуйста по следующему делу: хочу вставить в программу возможность показа сообщения типа 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 |
|