[CM]Jaxson |
Дата: Суббота, 13.10.2012, 18:37 | Сообщение # 1
|
٩(̾●̮̮̃̾•̃̾)۶
Сообщений: 801
Статус: Offline
|
Работа с файлами важная вещь в любом языке программирования. Работа с файлами в Delphi позволяет считывать, сохранять информацию, и выполнять другие действия с файлами. В Delphi поддерживаются все операции с файлами - создание, поиск, чтение и запись, переименование как файлов, так и к директорий. В Delphi существует несколько способов работы с файлами.
Для "лирического" вступления нужно упомянуть компоненты Delphi, которые умеют работать с файлами. Они читают и сохраняют своё содержимое, строки типа String, в файл текстового формата. Это компоненты ListBox, ComboBox и Memo, расположенные на первой же вкладке палитры компонентов.
Каждая строка компонентов ListBox и ComboBox является объектом Items[i], а Memo - Lines[i], где i - номер строки, который отсчитывается от нуля. Добавление строк в компоненты выполняется методами Add и Insert: http://www.delphi-manual.ru/ListCombo.JPG begin Memo1.Lines.Add('Первая строка'); ComboBox1.Items.Add('Первая строка'); ComboBox1.Items.Add('Вторая строка'); ListBox1.Items.Add('Первая строка'); ListBox1.Items.Add('Вторая строка'); end ;
Метод Add добавляет новую строку в конец. Метод Insert имеет дополнительный параметр, указывающий, после какой строки разместить новую строку. Доступ к строкам осуществляется так:
ComboBox1.Items[0] := 'Первая строка изменилась' ; ListBox1.Items[1] := 'Вторая строка изменилась' ;
У компонента ComboBox дополнительно есть свойство Text, где (как и у компонента Edit) находится вводимый текст:
ComboBox1.Text := ' Вводимый текст ';
На выделенную в данный момент строку компонента ComboBox указывает свойство ItemIndex типа Integer, то есть это номер выделенной строки. Следовательно, получить саму выделенную строку компонента ComboBox можно следующей конструкцией:
S:=ComboBox1.Items[ComboBox1.ItemIndex];
или, пользуясь оператором присоединения
With ComboBox1 do S:=Items[ItemIndex];
Вот как по нажатию клавиши Enter можно заносить в этот компонент вводимую в строку информацию и удалять нажатием Escape: Выделите на Форме ComboBox и перейдите в Инспектор объектов, на вкладку Events. Щёлкните дважды по обработчику OnKeyPress. Система Delphi создаст заготовку обработчика. Напишите:
begin if Key=#13 then ComboBox1.Items.Add(ComboBox1.Text); if Key=#27 then ComboBox1.Items.Delete(ComboBox1.Items.Count-1); end ;
Key - определённая в этом обработчике переменная, содержащая код нажатой клавиши, #13 и #27 - коды клавиш Enter и Escape соответственно. Items.Count - количество содержащихся в компоненте строк. Так как отсчёт строк идёт от нуля, мы отнимаем единицу. После очередного удаления количество строк меняется, таким образом, Items.Count-1 всегда указывает на последнюю строку. Последовательно нажимая Escape, мы можем удалить все строки. Командой ComboBox1.Items.Delete(0); можно добиться того же эффекта, только удаляться будут первые строки. Впрочем, чтобы стереть всё сразу, есть метод Clear!
Ну а теперь собственно о сохранении содержимого в файл. Для этого выполните команду
ListBox1.Items.SaveToFile(' Имя_файла.txt ') ;
Впрочем, расширение можно поставить любое по желанию, не обязательно .txt, как и вообще без него обойтись. Но расширение .txt позволит легко открыть файл стандартным виндовским Блокнотом, что бывает очень удобно на этапе написания программы! Для загрузки служит метод LoadFromFile:
ListBox1.Items.LoadFromFile(' Имя_файла.txt ') ;
Что делать, если в своей программе мы не работаем с компонентами Combobox, ListBox или Memo, а сохранять информацию нужно? Берём один из компонентов и делаем его невидимым, для этого в Инспекторе Объектов ставим в свойство Visible значение False. Функциональность его от этого не изменится!
Последний штрих - создадим программу, сохраняющую своё положение на экране в момент закрытия и там же открывающуюся. Нам нужно сохранить два параметра - значения свойств Формы Left и Top, это расстояние от левого и верхнего краёв экрана соответственно. Значения эти выражаются в пикселах и имеют тип Integer. Необходимо перевести эти числа в строку (тип String) с помощью оператора IntToStr. Итак, разместите на Форме невидимый ListBox, щёлкните по пустому месту Формы, чтобы её свйства появились в Инспекторе объектов, и перейдите на вкладку Events. Щёлкните по обработчику OnClose и в созданной заготовке напишите:
begin ListBox1.Items.Clear; ListBox1.Items.Add(IntToStr(Form1.Left)); ListBox1.Items.Add(IntToStr(Form1.Top)); ListBox1.Items.SaveToFile('MyFormPos.txt'); end ;
Этот обработчик сохраняет положение Формы на экране. Теперь напишем обработчик, помещающий Форму на прежнее место при старте программы. Создайте заготовку обработчика события OnCreate. Это событие происходит в момент "создания" Формы операционной системой. В этот момент и нужно присваивать ей необходимые свойства. Пишите:
begin if FileExists('MyFormPos.txt') then begin ListBox1.Items.LoadFromFile('MyFormPos.txt'); Form1.Left:=StrToInt(ListBox1.Items[0]); Form1.Top:=StrToInt(ListBox1.Items[1]); end ; end ;
В первой строке происходит проверка на существование файла, ведь если его не будет, произойдёт ошибка. Впрочем, программа после выдачи предупреждения откроется в том месте, где была на этапе проектирования, а при закрытии нужный файл будет воссоздан! Затем в логических скобках begin / end содержится сам код, который будет выполнен только приналичии файла MyFormPos.txt в папке с программой, так как используется относительный путь. Можно указать конкретное местоположение, например, C:\Program Files\MyProg\MyFormPos.txt.
Проверку на существовование файла можно выполнить также с помощью контроля исключительных ситуаций. Если файл не существует, то произойдёт исключительная ситуация. Перехватив её с помощью специального оператора, мы сможем избежать ошибок в программе.
Конечно, профессиональные программы сохраняют своё положение в Реестре Windows. Но всему своё время.
[ Skype ] [ Профиль ] [ Mods Pack ] [ VK ] [ Геймеры ] Помогаю новичкам, по всем вопросом комне в Skype/VK. VK ВЗЛОМАН, НЕ РАБОТАЙТЕ СОМНОЙ. МНЕ ВСЁ ВЗЛОМАЛИ СКАЙП И ВК. СКАЙП ВОССТОНОВИЛ.
Сообщение отредактировал [CM]Jaxson - Суббота, 13.10.2012, 18:38 |
|
|
|