Стандартные диалоги – это диалоговые окна, общие для большинства приложений Windows. Например, когда пользователь сохраняет файл в редакторе Word, он использует диалоговое окно Save As … (Сохранить как …). Когда он сохраняет рабочую книгу в Microsoft Excel, он также использует диалоговое окно Save As …
Операционная система Windows стандартизирует и значительно облегчает создание таких диалоговых окон. Программисту нет необходимости «изобретать колесо» каждый раз, когда понадобится диалоговое окно, в котором пользователь будет сохранять или открывать файл.
Вместо этого программист попросту устанавливает стандартный компонент на форму и задает ему необходимые свойства.
В составе Lazarus поставляется 14 диалоговых компонентов. Все они находятся на вкладке Dialogs. Как и MainMenu, в среде Lazarus диалоговые компоненты являются невизуальными, они присутствуют на форме в виде значков, однако во время выполнения они невидимы.
В этом уроке мы рассмотрим диалоговые компоненты: TOpenDialog, TSaveDialog, TFontDialog.
Редактор текстовых файлов AkelPad
Для активизации диалогового окна используется метод Execute(). Он выполняет открытие соответствующего окна и возвращает значение True, если пользователь щелкнул по кнопке ОК.
Компоненты TOpenDialog и TSaveDialog
Компонент TOpenDialog предназначен для выбора файла с целью последующего открытия, а компонент TSaveDialog — для последующего сохранения файла.
свойства приведены в таблице.
Эти компоненты не предназначены для выполнения конкретных действий: загрузки файла, записи в файл. Они применяются только для получения от пользователя желаемых настроек, например ввода полного имени файла вместе с путем поиска.
Рассмотрим использование диалоговых окон на примере создания простейшего Текстового редактора.
Задание. Создайте приложение Текстовый редактор. В приложении должно быть меню, содержащее пункты: Файл -Открыть, Файл-Сохранить, Шрифт. Приложение открывает текстовый файл на диске с использованием компонента TOpenDialog, записывает текст из файла в объект Memo на форме. После редактирования и форматирования текст необходимо сохранить.
Для выбора файла для сохранения использовать компонент TSaveDialog, при форматировании шрифта — компонент TFontDialog.
При работе с текстовыми файлами следует иметь в виду, что при выводе в TMemo файла с русским текстом, в Windows буквы могут отображаться некорректно. Это вызвано тем, что текстовые файлы в ОС Windows имеют кодировку CP-1251. Перед выводом текст необходимо преобразовать в кодировку UTF8.
Для преобразования символов из одной кодировки в другую можно использовать функции: SysToUTF8() и UTFToSys().
Ход выполнения проекта
1. Создайте форму и разместите на ней компоненты MainMenu, Memo1. Компонент MainMenu – невизуальный компонент, его значок можно поместить в произвольном месте.
Текстовые файлы в с++ | программа с использованием файлов
2. Чтобы начать формирование пунктов меню, дважды щелкните по компоненту TMainMenu1. Откроется специальное окно Редактор меню.
Определите пункты меню.
Меню первого уровне содержит два пункта: New Item1 и New Item2 . Первый пункт создается автоматически. Чтобы на этом уровне добавить второй пункт, откройте контекстное меню существующего пункта и выполните команду Вставить новый пункт (после). Появиться новый пункт New Item2.
Меню New Item1 содержит пункты : New Item3 и New Item4. Откройте контекстное меню пункта New Item1 и выполните команду Создать подменю. В подменю появиться пункт New Item3. Для него откройте контекстном меню и выполните команду Создать новый пункт (после). Появиться пункт New Item4.
3. Значения свойств установите в соответствии с таблицей.
Компонент | Свойство | Значение |
MenuItem1 | Caption | Файл |
MenuItem2 | Caption | Шрифт |
MenuItem3 | Caption | Открыть |
MenuItem4 | Caption | Сохранить |
Form1 | Caption | Текстовый редактор |
Memo1 | ScrollBars | ssVertical |
4. Удалите текст «Memo1» из окна Memo1.
- выберите в окне Инспектор объектов объект Memo1;
- на странице Свойства в строке Lines дважды щелкните на значении String или на кнопке с многоточием для формирования и редактирования текста;
- в окне Диалог ввода строк удалите текст «Memo1» и щелкните мышью на кнопке ОК.
5. Выберите в палитре компонентов вкладку Dialogs и поместите на форму компоненты OpenDialog, SaveDialog, FontDialog.
Эти компоненты невизуальные, разместить их в нижней части формы рядом со значком TMainMenu.
6. Настройте свойства компонентов OpenDialog, SaveDialog
Компонент | Свойство | Значение |
OpenDialog1 | Title | Открыть |
SaveDialog1 | Title | Сохранить |
7. Чтобы реализовать выбор типа файла при открытии файла в окне диалога:
- выберите в окне Инспектор объектов объект OpenDialog1;
- на странице свойства дважды щелкните мышью по списку значений свойства Filter.
- в окне Редактор фильтра (Filter Edit) задайте фильтры для выбора типа и расширения файла.
8. Чтобы установить в качестве расширения файла первый вариант (.txt), задайте для свойства OpenDialog1.FilterIndex значение 1.
9. Для диалога SaveDialog задайте свойство DefaultExt = txt (чтобы расширение txt автоматически добавлялось к создаваемому файлу).
10. В разделе implementation после директивы < TForm1 >запишите программный код процедуры Ansi_Memo, реализующей загрузку текста из файла с системной кодировкой (кодировка Ansi) в memo-поле (кодировка UTF8), а также процедуры Memo_Ansi, сохраняющей текст из memo-поля в файле на диске.
procedure Ansi_Memo(File_Ansi: string); // Загрузка текста из файла в memo-поле на форме var tfile: TStringList; str: string; begin tfile:= TStringList.Create; // создать список строк // загрузить текст из файла в список строк tfile.LoadFromFile(File_Ansi); str:= tfile.Text; // загрузить текст из списка в memo-поле Form1.Memo1.Lines.Add(str); tfile.Free; end; procedure Memo_Ansi(File_Ansi: string); // Сохранение текста из memo-поля в файле на диске var tfile: TStringList; str: string; begin tfile:= TStringList.Create; // создать список строк str:=Form1.Memo1.text; // преобразовать текст в системную кодировку str:= UTF8ToSys(str); tfile.Add(str); // сохранить в файле tfile.SaveToFile(File_Ansi); tfile.Free; end;
11. Напишите программный код для процедуры обработчика щелчка на пункте меню Файл – Открыть. Для этого дважды щелкните на данном пункте меню.
procedure TForm1.MenuItem3Click(Sender: TObject);//Файл — открыть var File_Ansi:string; begin if OpenDialog1.Execute then begin File_Ansi:= OpenDialog1.FileName; File_Ansi:= UTF8ToSys(File_Ansi); Ansi_Memo(File_Ansi); end; end;
После выбора пользователем файла в свойстве OpenDialog1.FileName будет находиться имя файла вместе с путем к нему.
Обратите внимание на оператор:
Если имя файла, а также путь содержит кириллицу, то необходимо строку с именем файла преобразовать в системную кодировку.
12. Напишите программный код процедуры обработчика щелчка на пункте меню Файл-Сохранить:
procedure TForm1.MenuItem4Click(Sender: TObject); //Файл — Сохранить var File_Ansi:string; begin if SaveDialog1.Execute then begin File_Ansi:=SaveDialog1.FileName; File_Ansi:= UTF8ToSys(File_Ansi); Memo_Ansi(File_Ansi); end; end;
Приложение открывает диалоговое окно «Сохранить», в котором задается имя файла. Имя файла из свойства SaveDialog1.FileName запоминается в переменной FName. В заключительной части процедуры оператор Memo1.Lines.SaveToFile(FName); используется для записи в файл содержимого свойства Lines объекта Memo1
13. Напишите программный код процедуры обработчика щелчка на пункте меню Шрифт:
procedure TForm1.MenuItem2Click(Sender: TObject); begin FontDialog1.Font:= memo1.Font; if FontDialog1.execute=true then begin Form1.Memo1.Font := FontDialog1.Font; end; end;
14. Сохраните, откомпилируйте и запустите на выполнение созданное приложение.
15. Щелкните мышью на кнопке Открыть, в диалоговом окне Открыть текстовый файл выберите папку, задайте тип файла и выберите текстовый файл, после чего нажмите кнопку Открыть.
16. Отредактируйте текст в окне приложения и нажмите кнопку Сохранить.
После этого в диалоговом окне сохранить текстовый файл выберите в поле тип файла расширение для сохраняемого файла, задайте его имя и щелкните мышью по кнопке Сохранить.
17. Открыв в окне Проводника папку, в которой был сохранен файл, убедитесь, что файл с указанным вами именем в ней есть.
18. Измените размер шрифта и цвет в диалоговом окне Шрифт.
19. Завершите работу с приложением
До встречи в следующем уроке!
Источник: gospodaretsva.com
Простое Windows-приложение — текстовый редактор
Рассмотрим пример проектирования стандартного оконного приложения. Простейшая последовательность действий:
1) визуальное проектирование интерфейса (перенос на форму с Панели элементов необходимых визуальных и не визуальных элементов);
2) генерация заготовок методов обработки событий, связанных с элементами управления;
3) программирование методов обработки событий.
Постановка задачи
Создать текстовый редактор с обязательными функциями работы с файлами «Открыть» и «Сохранить как», а также функциями редактирования текста. Выбор действий с файлами осуществлять через главное меню.
Реализация
Разместим на форме визуальный элемент textBox1 класса TextBox. Размер элемента сделайте чуть меньше размера формы, сместив его вниз от заголовка на 30-40 пикселей. Задайте свойство textBox1.MultiLine = true (для редактирования текста в несколько строк).
Перетащите с Панели элементов компонент menuStrip1 класса MenuStrip для создания меню.В левом верхнем углу рабочей области формы появится кнопка «Введите здесь» , а на панели невизульных компонентов отобразится элемент menuStrip1.
Для выбора имен файлов для их чтения и записи перетащим на эту же панель элементы openFileDialog1 (класс OpenFileDialog) и saveFileDialog1 (класс SaveFileDialog).
Кликнув по кнопке «Введите здесь», введите имя раздела меню «Файл» и добавьте ниже следующие пункты меню работы с файлами «Открыть», «Сохранить как» и «Выход». Ваша форма (вместе с панелью невизуальных элементов) будет выглядеть примерно так:
Примечание: для наглядности изменено свойство формы BackColor = Color.Peru. Первая группа действий закончена.
Вторая группа действий обеспечивает генерацию заголовков методов обработки событий, связанных к кнопками меню. Для этого дважды нажмите каждую из трех позиций меню, а также событию Load формы Form1 на закладке «События» панели «Свойства» поставьте в соответствие метод Form1_Load (двойной клик справа от в строке Load).
Откроем форму в режиме Кода (файл Form1.cs):
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; namespace ТекстовыйРедактор < public partial class Form1 : Form < public Form1() < InitializeComponent(); >private void открытьToolStripMenuItem_Click(object sender, EventArgs e) < >private void сохранитьКакToolStripMenuItem_Click(object sender, EventArgs e) < >private void выходToolStripMenuItem_Click(object sender, EventArgs e) < >private void Form1_Load(object sender, EventArgs e) < >> >
Перейдем к третьей группе действий — написанию кода для этих четырех методов.
Метод Form1_Load( ) используем для очистки поля компонента textBox1, для задания форматов файловых диалогов и имени файла — контрольного примера при его открытии:
private void Form1_Load(object sender, EventArgs e)
Комментарий. При загрузке формы мы задаем свойство FileName объекта openFileDialog1 указанием имени файла для открытия, а также задаем фильтры для диалогов открытия и сохранения файлов. Сравните работу программы без использования этого метода.
В методе открытьToolStripMenuItem_Click( ) используется компонент openFileDialog1 для выбора имени файла для чтения. Если имя не выбрано (FileName = String.Empty), то работа метода завершается. Иначе создается новый экземпляр класса System.IO.StreamReader (var Читатель) с указанием имени файла и кодировки, данные из текстового файла переносятся в textBox1, объект Читатель закрывается. Добавлена обработка исключений, которые могут возникнуть при открытии файла:
private void открытьToolStripMenuItem_Click(object sender, EventArgs e) < openFileDialog1.ShowDialog(); if (openFileDialog1.FileName == String.Empty) return; // Чтение текстового файла try < var Читатель = new System.IO.StreamReader( openFileDialog1.FileName, Encoding.GetEncoding(1251)); textBox1.Text = Читатель.ReadToEnd(); Читатель.Close(); >catch (System.IO.FileNotFoundException Ситуация) < MessageBox.Show(Ситуация.Message + «nНет такого файла», «Ошибка», MessageBoxButtons.OK, MessageBoxIcon.Exclamation); >catch (Exception Ситуация) < // отчет о других ошибках MessageBox.Show(Ситуация.Message, «Ошибка», MessageBoxButtons.OK, MessageBoxIcon.Exclamation); >>
Аналогично выполняется запись (сохранение) текстового файла:
private void сохранитьКакToolStripMenuItem_Click(object sender,EventArgs e) < saveFileDialog1.FileName = openFileDialog1.FileName; if (saveFileDialog1.ShowDialog() == DialogResult.OK) < try < var Писатель = new System.IO.StreamWriter( saveFileDialog1.FileName, false, System.Text.Encoding.GetEncoding(1251)); Писатель.Write(textBox1.Text); Писатель.Close(); >catch (Exception Ситуация) < // отчет о других ошибках MessageBox.Show(Ситуация.Message, «Ошибка», MessageBoxButtons.OK, MessageBoxIcon.Exclamation); >> >
Последний метод — закрытие формы — реализуется одним оператором:
private void выходToolStripMenuItem_Click(object sender, EventArgs e)
Подготовим в блокноте текстовый файл Text2.txt и разместим его в подкаталоге data папки, где будет размещено ваше приложение. Запустим программу на выполнение. Добавьте в окне редактора несколько строк, сохраните файл с другим именем. Откройте новый файл и удалите часть текста в окне редактора.
Заметим, что работают стандартные операции выделения текста, копирования, вставки и удаления части текста с использованием мыши и комбинаций управляющих клавиш, используемых в известных текстовых редакторах.
ВЫВОД: В первом приближении поставленная задача решена. Данный пример приведен всего лишь для понимания:
во-первых, алгоритма действий разработчика визуального приложения «интерфейс, события-методы, реализация»;
во-вторых, удобства использования готовых компонентов (нам не пришлось программировать операции редактирования текста — стандартные события уже привязаны к компоненту textBox1);
в-третьих, целесообразности использования готовых компонентов (файловых диалогов) с точки зрения стандартизации интерфейса пользователя и программы.
Напомним, что в статье про классы мы отмечали, что в языке C# предусмотрено несколько разновидностей данных-членов и функций-членов. Пока мы подробно рассмотрели только поля и константы — как данные-члены, а также методы — как функции-члены класса. В следующих статьях мы рассмотрим события, как данные-члены класса и трехзвенную цепочку события-делегаты-методы. После чего вернемся к член-функциям класса: свойствам, конструкторам, финализаторам, операциям и индексаторам.
NEW: Наш Чат, в котором вы можете обсудить любые вопросы, идеи, поделиться опытом или связаться с администраторами.
Источник: c-sharp.pro
Урок 6 — Простейший текстовый редактор
Выложим на форму TMemo, и TMainMenu. Установим свойство Align в alClient для того, чтобы компонент растянулся на все свободное пространство формы. Установим свойство ScrollBars в ssBoth, а WordWrap в False. И уберем введенный в Memo1 текст поумолчанию, удалив этот текст из свойства Lines.
Щелкнем по MainMenu1 два раза — появится окно. Теперь создадим меню «Файл». В нем элементы: «Создать», «Открыть», «Сохранить», «Сохранить как. «, разделительную полоску (символ «-«) и «Выход»
Установим горячие клавиши как показанно на рис 1. Горячие клавиши устанавливаются в свойстве ShortCut
Рис. 1 — Меню «Файл»
Аналогично создаем меню «Правка»:
Рис. 2 — Меню «Правка»
Аналогично создаем меню «Формат»:
Рис. 3 — Меню «Формат»
Итак, начнем. Окошко редактора меню нам больше не нужно — его можно закрыть. На нашей форме уже появилось меню. Оно выпадает при щелчке, вобщем практически рабочее. Осталось только написать код, который будет выполняться при выборе чего-либо из меню.
Щлекнем по меню «Файл», а там выберем «Выход».
Рис. 4 — Создание события onClick
После нажатия по меню «Выход» появляется окно редактора кода с уже готовой процедурой. Пишем:
Close;
Обратите внимание, что Close и Form1.Close это одно и тоже. Т.к. форма является родителем то имя родителя можно опускать.
Теперь после выбора меню «Выход» программа закроется.
Реализация переноса по словам
В меню «Формат» выберем «Перенос по словам»:
procedure TForm1.N14Click(Sender: TObject); begin If Memo1.WordWrap then begin Memo1.WordWrap:=false; Memo1.ScrollBars:=ssBoth; N14.Checked:=False; end else begin Memo1.WordWrap:=True; Memo1.ScrollBars:=ssVertical; N14.Checked:=True; end; end;
Разберемся что мы делаем: если уже установлен режим переноса по словам то мы убираем его и устанавливаем галочку на N14. И наоборот.
Реализация функции «Сохранить как. «
Нам понадобится диалоговое окно сохранения документа. Воспользуемся компонентом TSaveDialog на вкладке Dialogs. Выложим его на форму. Установим фильтр, т.е. те файлы которые будет этот диалог отображать. Нам нужно *.txt, т.е. текстовые документы. Чтобы это сделать нужно найти свойство Filter и нажать на кнопку . Появится окно. Заполните его как показанно на рис.
5.
Рис. 5 — Редактор фильтра
Теперь измените свойство DefaultExt на *.txt. Это расширение которое будет добавляться к файлу.
Создадим процедуру сохранения файла. Напишем этот код сразу после .
Procedure SaveAs; begin If Form1.SaveDialog1.Execute then begin Form1.Memo1.Lines.SaveToFile(Form1.SaveDialog1.FileName); FileWork:=Form1.SaveDialog1.FileName; end; end;
Далее выбераем в меню «Файл» —> «Сохранить как. «. Там пишем:
SaveAs;
Что же тут делается и как все работает? Очень просто! Когда пользователь выберает пункт меню «Сохранить как. » то вызывается процедура SaveAs, которую мы уже написали. Теперь разберем процедуру SaveAs. Когда вызывается функция Execute у TSaveDialog то появляется диалог сохранения и если пользователь нажмет кнопку сохранить, то функция Executeвозвратит True иначе False.
Если возвратится True то будет выполнена процедура SaveToFile, т.е. сохранение файла. В SaveDialog1.FileName хранится путь к файлу в который пользователь указывает в диалоге.
Я ввел глобальную переменную FileWork. В ней будет храниться путь к файлу с которым работает пользователь. Это нужно для реализации функции «Файл» —> «Сохранить». Не забудьте ее объявить в разделе Var перед implementation. Должно быть вроде этого:
var Form1: TForm1; FileWork: String;
Реализация функции «Сохранить»
Выбераем «Файл» —> «Сохранить». И пишем:
If FileWork=» then SaveAs else Memo1.Lines.SaveToFile(FileWork);
Если пользователь уже сохранял файл то в FileWork будет что-то храниться, в любом случае не «пустота». Если хранится », т.е. ничего не хранится то вызываем SaveAs. Она как раз и покажет диалог сохранения. Если переменная FileWork не пустая, то сохраняем файл по тому пути который указан в FileWork.
Реализация функции «Открыть»
Помимо TSaveDialog существует TOpenDialog . И если Вы хоть малость знаете английский, то уже поняли бы, что этот компонент предназначен для открытия файлов.
Выложите этот компонент на форму и свойство Filter измените так же как у SaveDialog1.
Вообще компоненты TSaveDialog и TOpenDialog очень похожи. Диалог открытия вызывается так же — функцией Execute, которая возвращает True если пользователь желает открыть файл.
Жмем «Файл» —> «Открыть». Пишем:
if OpenDialog1.Execute then begin Memo1.Lines.LoadFromFile(OpenDialog1.FileName); FileWork:=OpenDialog1.FileName; end;
Запускаем программу F9 и пробуем. Если все делали правильно, то все должно работать.
Реализация функции «Создать»
Жмем «Файл» —> «Создать». Пишем:
FileWork:=»; Memo1.Clear;
Тут все понятно и без объяснений. Но все же объясню: первая строчка очищает FileWork, т.е. программа не будет знать о том что мы с каким-то файлом работали. Вторая строчка очищает Memo1.
Реализация функций в меню «Правка»
По клику на меню «Вырезать»:
Memo1.CutToClipboard;
По клику на меню «Копировать»:
Memo1.CopyToClipboard;
По клику на меню «Вставить»:
Memo1.PasteFromClipboard;
Реализация функций в меню «Шрифт. «
Нам понадобится еще один компонент — TFontDialog . Функция для вызова такая же как у TOpenDialog и TSaveDialog — Execute. Создаем событие по клику по меню «Шрифт. «.
if FontDialog1.Execute then Memo1.Font:=FontDialog1.Font;
Если пользователь применил изменения, то свойству Font у Memo1 присваиваем выбранные пользователем настройки шрифта. Они хранятся в свойстве Font у FontDialog1.
Завершаем.
Основная часть программы написана. Осталось совсем немного. Нам нужно сделать активной форму, чтобы в инспекторе объектов появились ее свойства, но из-за Memo1 который растянут на всю форму не получается это сделать. Есть несколько вариантов. Можно просто выделить форму в Object TreeView.
А можно выделить Memo1, затем зажать клавишу Shift и щелкнуть по Memo1 еще раз.
Итак, Вы активировали форму. Изменим заголовок окна: в свойстве Caption напишите «Блокнот». Свойство Position измените на poScreenCenter для того, чтобы форма появлялась по центру экрана.
Ну и напоследок добавим модуль XPMan в список модулей (секция uses). Выглядель это должно примерно так:
uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, Menus, StdCtrls, XPMan;
Этот модуль подключает XMManifest к приложению, т.е. если у Вас установленна XP, то все компоненты приобретают XP-шный вид, а если Vista — то становятся стиля Висты, а не как в Win98 или Win2000. Можете поэкспериментировать
Скачать исходник программы
Урок 7 — Изучаем компоненты TImage, TGroupBox, TRadioGroup
Просмотров: 37821
Источник: delphidevelop.ru