Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

СообЧА. Программирование на Delphi


Служба Рассылок Subscribe.Ru проекта Citycat.Ru


  Выпуск №5  Подписчиков: 357 
   
.:: СообЧа - Программирование на Delphi ::.
  © 2000 COOLer и AzYx  Дизайн: Yoghurt 
   

 

Оглавление
  В выпуске  Рассылка СообЧА 
    
  • Практикум - Написание простого текстового редактора.
  •  
    Рассылки Subscribe.Ru
    СообЧа (СООБщество ЧАйников). Обмен опытом, вопросы, ответы.

     Назад к оглавлению  
      
      Практикум - Написание простого текстового редактора. 
     
      

    Добрый день (если нет, то {local time} :))!

         Сегодня мы с вами попробуем написать текстовый редактор.
         Я знаю, что это всеми уже давно избито, и вы будете спамить мой мылбокс сообщениями, типа: "Что это за редакторы? Другие вон уже игрушки под DitectX пишут, а мы?" Не бойтесь, дойдем и до игрушек. (Если хочешь сделать это сейчас, качай DirectX SDK с www.microsoft.com :) А пока будем постепенно наращивать опыт. Не забудьте, главное - это то, что открыли вы сами, без чьей-либо посторонней помощи, это есть настоящее знание, поэтому прочитав очередной выпуск нашей рассыки, совершенствуйте и изменяйте программу, пока не дойдете до того, что ваша программа подвесит Виндовс и форматнет винт. И не верьте тем людям, которые утверждают, что настоящий программер никогда не смотрит в помощь. Чтобы правильно и быстро писать проги без ошибок, надо уметь находить в помощи самое нужное. Если же этого нужного не оказалось, залезть в инет, там обязательно кто-нибудь знает ответ на ваш вопрос. Не бойтесь того, что вы новичок, не бойтесь задавать вопросы. В конце концов, все когда-то были такими же, как вы. Чего-то я отвлекся. Вернемся к текстовику. Для простого редактора, типа notepad'а подойдет компонент TMemo, у него есть недостатки (ограничение текста в 40 кб, отсутсвие возможностей нормального форматирования текста), но он очень прост. Для продвинтуых редакторов, типа wordpad нужно использовать довольно мощный компонент TRichEdit. Он обладает достаточными возможностями форматирования, понимает rtf формат, и еще много чего умеет делать. Для первого текстовика подойдет TMemo, если хотите, TRichEdit можете изучить самостоятельно, если нет, напишите мне, в следующем выпуске мы будем улучшать редактор с помощью этого компонента.

         Итак, "положим" TMemo на форму. Затем, прикинув, что хорошему редактору менюшка не мешает, кладем туда же (на форму, то бишь) TMainMenu. Щелкаем на нем 2 раза (это действие в дальнейшем будет называться заморским словом КЛИКНУТЬ! :). Повяляется редактор менюшек. Создадим 2 менюшки: (будем называть официальными названиями, потом исправите на собственные) Файл и Об авторе. Кстати, если вы хотите, чтобы один из символов в названии подчеркивался и, таким образом, его можно было бы открыть комбинацией Alt+символ, то поставьте перед ним &. В меню Файл начинаем создавать пункты, первый из них - "Новый", то есть создать новый файл для записи. Дальше у нас будет разделитель, так что напишем просто "-" без кавычек (тире, то есть). Потом по порядку - Загрузить, Сохранить, опять разделитель и Выход. Теперь редактор меню можете закрыть. Щелкниет по форме (1 раз) и свойству BorderStyle присвойте bsSingle, это чтобы форма не растягивалась. Переместите TMemo в левый верхний угол формы и растяните его на всю форму. В свойствах TMemo щелкните на троеточие напротив свойства Strings и удалите надпись Memo1. Закройте окошко, нажав OK. Теперь прямо на форме выберите из меню Файл пункт Новый. В написанный за нас Дельфой код добавим:

    if messagedlg('Сохранить текст?',mtConfirmation, [mbYes, mbNo], 0) //Выводится диалоговое окно
    = mrYes then // Если ответ положительный, то
    memo1.lines.savetofile('C:\1.txt'); //сохраняем текст в c:\1.txt, вместо этого может быть любой ваш путь и файл.
    memo1.lines.clear; //Очишаем содержимое Memo1.

    Щелкнем на пункте Загрузить и напишем:

    memo1.lines.savetofile('C:\1.txt'); //Опять же путь может быть любой.

    Переходим к пункту Загрузить. Т.к. у нас всего 1 файл для редактирования, то загружать мы будем постоянно один и тот же файл, который указывали при сохранении. Поэтому пишем:

    memo1.lines.loadfromfile('C:\1.txt');

    Ну и остался только Выход, щелкаем, пишем:

    form1.close; //это заставить нашу форму закрыться.

    Чтобы мы не вышли из программы, случайно (или не случайно, из-за склероза) не сохранив наш текст, добавляем код для напоминания нам о сохранении. Выберите из списка в Object Inspector Form1, на вкладке Events кликните на OnCloseQuery. Это событие (OnCloseQuery) происходит, когда, говоря детским языком, форма просит у ОС разрешения на закрытие. Дописываем до слова Begin:

    var hres:hResult; //Переменная, записывающая результат ответа.

    Потом после Begin:

    hres:=messagedlg('Сохранить текст?',mtConfirmation,[mbyes,mbno,mbCancel],0); //Напоминание
    if hres = mryes then memo1.lines.savetofile('C:/1.txt'); //Если ответ положительный, сохраняем.
    if hres = mrcancel then CanClose:=false; //Отменяем закрытие.

         Ну, теперь осталось обслужить меню Об авторе:
    Выберите в IDE Delphi меню File->New...->Form
    Появится новая форма. В свойствах формы BorderStyle присвойте bsNone. Поместите еще один TMemo, растяните на всю форму. У нового Memo свойству enabled присвойте false. Удалите лишний текст, свойсву Alignment присвойте taCenter. Теперь в Strings можете записать о себе все, что хотите. Сохраним наш проект (File->Save All) под теми именами, которые предлагает нам Delphi. Теперь перейдем в редакторе кода на вкладку unit1 и найдем в тексте строку "implementation". На следующей после нее строки пишем:

    uses unit2;

    Теперь щелкаем на меню Об авторе и добавляем код:

    form2.showmodal;

    Вот и все. Можете запускать программу, редактор готов.
    Еще раз повторю, не останавливайтесь на достигнутом, изучайте свойства различных объектов, пытайтесь применять их, в общем, умнейте!

    Напишите, что бы вы хотели увидеть в одном из ближайших выпусков: Усовершенствование написанного сегодня (рекомендую, если самому лень изучать),
    Написание простого графического редактора,
    Написание приложения с измененным графическим интерфейсом (типа WinAmp, только у нас, конечно же попроще).
    Если есть свои собственные предложения, также пишите, адрес: delphi@xak.ru

    © AzYx & COOLer


    COOLer    - ведущий проекта    "Мир Delphi"

    о3он

    http://subscribe.ru/
    E-mail: ask@subscribe.ru
    Поиск

    В избранное