Работать будем на примере функции WinAPI, которая возвращает время, прошедшее с последней перезагрузки системы. Стоит отметить, что функции WinAPI - это стандартные функции операционной системы Windows, поэтому для их использования нужно подключить библиотеку Windows, а другие функции WinAPI искать в справочниках по WinAPI.
Нужная нам функция - это GetCurrentTime. Она не имеет параметров. Именно так её и прописывают в коде.
Время возвращается в миллисекундах. Это самый простой код, который здесь возможен. Но нас это вряд ли устроит. Гораздо удобнее видеть часы, минуты и секунды, чем миллисекунды. И прямо в IC мы переведём наше время.
Разберём этот код.
var gct,h,m,s:integer; - это объявление переменных. Все они идут через запятую, потому что принадлежат одному типу - integer, то есть целое число.
gct := GetCurrentTime; - это присваивание переменной gct результата функции GetCurrentTime.
h := gct div 3600000; - это математическая операция. DIV - это целочисленное деление, то есть деление без остатка. Например, 5 div 3 = 1. А здесь мы получаем количество часов, потому что в одном часе 3 600 000 миллисекунд.
gct := gct mod 3600000; - тут мы узнаём остаток, потому что MOD - это остаток от деления. Например, 5 mod 3 = 2. Нам это необходимо, чтобы исключить часы, которые уже записаны в переменную h, и теперь в переменной gct останутся уже минуты.
Следующие операции аналогичны вышеописанным, только происходит извлечение уже не часов, а минут и секунд. После последней операции mod в переменной gct содержатся только миллисекунды.
При выводе мы пользуемся функцией int2str, потому что нужно преобразовать числа в строки (при сложении чисел и сложении строк получаются разные результаты. Например, при сложении числе 23 и 56 получится 79, а при сложении строк 23 и 56 получится 2356). Также мы добавляем двоеточие между часами, минутами, секундами и миллисекундами.
Теперь программ уже неплохо отображает время, но осталась одна маленькая неприятность: если число однозначное, то оно так и выводится, например 33:1:560 вместо 33:01:560. Ведь ноль слева не нужен для чисел, а вот для нас он нужен.
И сейчас мы изменим код, чтобы к однозначным числам добавлялся ноль (точнее, не числам, а строкам, потому что только строкам можно приписывать любые символы, а числам приписать ничего нельзя - можно только прибавить или отнять).
Обратите внимание на изменения! Самое первое - изменился тип переменных h, m, s. Дело в том, что теперь мы присваиваем им не числа, а строки, потому что результаты математических операций сразу преобразовываем в строки. А затем идёт конструкция if…then…else, про которую я рассказывал в предыдущих статьях. Мы проверяем длину строки, и если она равна 1, то слева добавляем ноль. Помните, что ноль добавляется именно в виде строки, а не в виде числа, а потому заключён в кавычки.
И только переменная gct остаётся у нас числовой переменной, поэтому при выводе на событие мы преобразовываем её в строку.
Теперь о том, где можно найти разные функции. Как уже говорилось, WinAPI нужно искать в справочниках по WinAPI. Различные функции KOL можно найти в самом KOL (compiler\fpc\KOL.pas). Там к ним есть описание. Помните только, что для использования функций какой-либо библиотеки она должна быть подключена в разделе uses.
Заболела кошка - вам поможет вызов ветеринара на дом. На дому выполняются разные услуги, например ультразвуковое исследование органов.
Админ а куда замечательные видео уроки пропали ? хотелось бы и к этому уроку видео.
ОтветитьУдалитьОни не пропали - они ещё не готовы. Скоро будут готовы новые видеоуроки, в том числе и для этого поста.
ОтветитьУдалитьМне тоже очень хотелось бы поскорей увидеть новые видео уроки.
ОтветитьУдалитьАдминистратору большое спасибо!
Подскажите пожалуйста, как сохранить все настройки созданной программы при выходе не обращаясь к диалогу сохранения.
ОтветитьУдалитьНапример, такие настройки:
выбранные пункты в выпадающих списках
отмеченные галочки в чебоксах
состояние счетчиков и т.д.
Если этих настроек очень много?
В конце этого урока я рассказывал про сохранение настроек. При выходе - у формы есть событие onClose.
ОтветитьУдалитьПочему то не получается, видимо делаю, что то не то.
ОтветитьУдалить1. взял элемент INI подключил его к форме:
2. подключил onCloce к doWrite
3. подключил onCreate к doRead
4. установил параметры элемента INI:
FileName - param.ini
Section - пусто (не знаю, что писать)
Key - .ini
Type - string
Файл param.ini создается в каталоге с программой но не читается, настройки не сохраняются.
Пожалуйста, что делать? Я тупой.
Section - это секция, здесь люое название.
ОтветитьУдалитьKey - ключ, любое.
Когда файл первый раз создастся, то вы всё увидите, где и что там записано.
Ещё нужно записать в Value значение ключа, это любое ваше значение.
ОтветитьУдалитьСпасибо большое все получилось, хотя пока разобрался чуть голову не сломал.
ОтветитьУдалитьДля тех кто незнаком с элементом INI поясню:
1. Элемент INI ставится на каждый элемент который необходимо сохранить.
2. Если хотите, чтобы все настройки сохранялись в одном ini файле имя в свойствах FileName должно быть одинаковым.
3. Key это номер строки в файле откуда читаются и сохраняются данные. Если данные разного типа то Key не должен иметь одинакового имени.
4. Value это верхняя точка элемента INI куда "заливаются" данные.
Есть один нюанс: если при сохраненых настройках вы открыли программу, ничего не выбрали и закрыли, то настройки которые были сохранены до этого пропадут. Чтобы этого не происходило нужно, чтобы данные с INI файла при открытии считывались и поступали вновь в элемент INI
Кто может подсказать вот какой вопрос:
ОтветитьУдалитьПри выборе рисунка в качестве фона формы он почему то отображается не корректно. В редакторе формы в hiasm отображается нормально, но когда запускаешь приложения - часть рисунка либо невидно, либо он загораживает заголовок окна.
Это недоработки программы или в настройках что то не то? Можно ли как нибудь это исправить? Хочется красивый интерфейс.
Попробуйте BorderStyle=bsNone
ОтветитьУдалитьОгромнейшее спасибо!
ОтветитьУдалитьВсе оказалось элементарно просто!
Только пришлось дать согласие в этом варианте тоскать окно за любое место. Иначе его не сдвинуть с места.
Еще раз спасибо!!!
а не подскажите, в программе сделано, чтобы настройки сохранялись в ini файл, настройки вида file=file.doc
ОтветитьУдалитьпри вводе в программе вводится все нормально, но в ини файле вместо этого сохраняются только 0. если вводить цифры. то они сохраняются в ини правильно... как сделать, чтобы сохранялись буквенные значения??
Свойство Type=String, и всё будет ОК.
ОтветитьУдалить