|

В новый век с графическим интерфейсом администрирования для Linux
Xakep, номер #036, стр. 036-063-2
Теперь брось на эту страницу два компонента TLabel, один TEdit и один TComboBox (все с палитры компонентов Standard). Как это делать, ты уже должен знать, потому что мы уже проводили эти операции много раз. Компоненты нужно расставить, как на рисунке 3. Теперь измени заголовки Label1 на "Timeout", а Label2 на "Default OS".
И напоследок бросим на форму две кнопки. Одну обзовем 'Apply', а другую 'Close'.
Все. Форма нашей будущей проги готова. Теперь осталось только написать код, который будет загружать текущие параметры LILO, а потом сохранять изменения обратно.
Шкодинг
Наша прога должна загружать данные автономно при старте и не задавать глупых вопросов, как это любят делать форточки. Поэтому создай обработчик события OnShow для главной формы (если ты регулярно читаешь Х, то с этим у тебя не будет проблем). В этом обработчике нужно написать все, что находится в листинге 1.
Теперь создай обработчик события OnClick для кнопки "Apply". В ней напиши все, что находится в Листинге 2.
Теперь давай посмотрим, что мы тут понаписали. По событию OnShow я должен загрузить файл "/etc/lilo.conf". Для этого я объявил переменную lilofile типа TStrings. TStrings - это объект, который может хранить в себе списки строк.
В первой строке кода процедуры я инициализирую lilofile с помощью lilofile:=TStringList.Create. После этого я загружаю файл. Для этого есть процедура LoadFromFile. В качестве параметра нужно указать полный путь к файлу, который нужно загрузить. Файл загружается построчно, как ты видишь его в любом текстовом редакторе. Чтобы получить доступ к нужной строке, нужно написать так: lilofile.Strings[номер строки].
После этого я запускаю цикл проверки всех строк файла: for i:=0 to lilofile.Count-1 do. Внутри цикла идет проверка, если в строке есть слово "timeout", то нужно получить значение, которое стоит после знака «равно» и засунуть его в Edit1. Точно так же проверяется параметр "label".
Для проверки присутствия в строке слова "timeout" я использую функцию "Pos". Ей нужно передать два параметра в виде строк. Функция ищет строку, указанную в качестве первого параметра в строке, указанной во втором параметре. Чтобы было понятней, давай рассмотрим пример. Допустим, у нас есть строка "Вася любит Мамбо". Я хочу найти в этой строке слово "любит". Для этого я вызываю функцию Pos ('любит', 'Вася любит Мамбо'). Результатом будет число 6, потому что слово "любит" начинается с шестой буквы строки 'Вася любит Мамбо'. Если бы в строке не было слова "любит", то результатом был бы 0. Вот по этому закону я и произвожу поиск.
Чтобы выделить слово "любит" из всего предложения, я использую функцию copy. Ей нужно передать три параметра:
1. Строку, из которой нужно выдернуть какую-то часть.
2. Число, указывающее, с какой буквы начинать копировать.
3. Число, указывающее, сколько букв надо копировать.
Результатом будет выдернутый из строки кусок. Из файла LILO мне нужно выдернуть все, что находится после «равно». С помощью функции copy это делается очень просто. Единственный вопрос, который у тебя может возникнуть, - почему я указываю в последнем параметре именно число 10? Ответ прост - мне нужно скопировать все после знака "=" до конца строки. Если указать число большее, чем доступно символов, то функция copy все равно скопирует только до конца строки. Поэтому, чтобы не вычислять этот конец, я просто указал 10, потому что там всегда меньше 10 символов, а это значит, что скопируется все.
Назад на стр. 036-063-1 Содержание Вперед на стр. 036-063-3
|