Создание прикладных Windows–приложений

Написание прикладного Windows-приложения на примере программы-органайзера, позволяющей вести электронный ежедневник и телефонную записную книжку. Описание блок-схемы программы и операционной системы. Листинг результатов обработки на контрольном примере.

Рубрика Программирование, компьютеры и кибернетика
Вид дипломная работа
Язык русский
Дата добавления 29.12.2014
Размер файла 2,5 M

Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже

Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.

Опорная поверхность спинки стула (кресла) должна иметь высоту (300+,-20) мм, ширину не менее 380 мм и радиус кривизны в горизонтальной плоскости 400 мм.

Угол наклона спинки в вертикальной плоскости должен регулироваться в пределах 0?+,-30 ? от вертикального положения.

Расстояние спинки от переднего края сиденья должно регулироваться в пределах от 260 до 400 мм.

Подлокотники должны быть длиной не менее 250 мм, шириной - 50 - 70 мм, иметь возможность регулирования по высоте над сиденьем в пределах (230+,-30) мм и регулирования внутреннего расстояния между подлокотниками в пределах от 350 до 500 мм.

Требования дисплею

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

Дисплей на рабочем месте должен быть установлен ниже уровня глаз оператора. Угол наблюдения экрана оператором относительно горизонтальной линии взгляда не должен превышать 60?.

Требования к конструкции дисплея, визуальным параметрам экрана и параметрам излучений - по ГОСТ Р 50948.

Требования к клавиатуре

Клавиатура на рабочем месте оператора должна располагаться так, чтобы обеспечивать оптимальная видимость экрана.

Клавиатура должна иметь возможность свободного перемещения. Клавиатуру следует располагать на поверхности стола на расстоянии от 100 до 300 мм от переднего края, обращенного к оператору, или на специальной регулируемой по высоте рабочей поверхности, отделенной от основной столешницы.

3.7 Требования электробезопасности

Электрические установки, к которым относится практически все оборудование ЭВМ, представляют для человека большую потенциальную опасность, так как в процессе эксплуатации или проведения профилактических работ человек может коснуться частей оборудования, находящихся под напряжением. Опасность электроустановок: токоведущие проводники, корпуса стоек ЭВМ и прочего оборудования, оказавшегося под напряжением в результате повреждения (пробоя) изоляции, не подают каких-либо сигналов, которые предупреждали бы человека об опасности.

Реакция человека на электрический ток возникает лишь при протекании последнего через тело человека.

Проходя через тело человека, электрический ток оказывает на него сложное воздействие, вызывая термическое, электролитическое, механическое и биологическое воздействие.

- термическое действие тока проявляется в ожогах отдельных участков тела, нагреве тканей и биологических сред.

- электролитическое действие тока выражается в разложении органической жидкости, крови и проявляется в изменении их физико-химического состава.

- механическое воздействие тока приводит к разрыву мышечных тканей.

- биологическое действие тока заключается в способности тока раздражать и возбуждать живые ткани организма.

Все перечисленные воздействия могут привести к электрической травме.

Пользователь перед началом работы с электрооборудованием должен произвести:

1. Осмотр электрооборудования.

2. Проверку комплектности и надежности крепления деталей.

3. Проверку внешним осмотром исправности кабеля (шнура).

4. Проверку четкости работы выключателя.

5. Использовать только штатные приспособления.

Пользователь обязан доложить руководителю подразделения об обнаруженных дефектов в электрооборудовании и сразу же прекратить эксплуатировать неисправное электрооборудование.

Включение электрооборудования производят вставкой исправной вилки в исправную специальную розетку.

При включении компьютера пользователь обязан соблюдать следующую последовательность включения оборудования:

- включить блок питания;

- включить периферийные устройства (принтер, монитор, сканер);

- включить системный блок (процессор).

Пользователю запрещается приступать к работе при:

- обнаружении неисправности оборудования;

- отсутствии защитного заземления устройств ПК.

Пользователю во время работы запрещается:

- включать сильно охлажденное (принесенное с улицы в зимнее время) оборудование;

- производить самостоятельно вскрытие и ремонт оборудования.

В аварийных ситуациях пользователь обязан:

- во всех случаях обнаружения обрыва проводов питания, неисправности заземления и других повреждений электрооборудования, появления запаха гари, немедленно отключить питание и сообщить об аварийной ситуации своему руководителю и дежурному электрику;

- при обнаружении человека, попавшего под напряжение, немедленно освободить его от действия тока путем отключения электропитания и до прибытия врача оказать потерпевшему первую медицинскую помощь;

- при любых случаях сбоя в работе технического оборудования или программного обеспечения немедленно вызвать представителя инженерно-технической службы эксплуатации вычислительной техники;

3.8 Разработка защитных мероприятий на рабочем месте пользователя

Организация рабочего места пользователя заключается в выполнении ряда мероприятий, обеспечивающих рациональный и безопасный трудовой процесс и эффективное использование орудий и предметов производства, что повышает производительность и способствует снижению утомляемости работающих. При размещении оборудования на рабочем месте необходимо исходить из возможностей работы человека с этим оборудованием. Оптимальное рабочее место должно быть ограничено дугами, описываемыми каждой рукой человека при вращении в локтевом суставе (радиус дуги 340 - 400 мм). Максимальное рабочее пространство при позе ”сидя” ограничивается длиной вытянутой руки (радиус дуги 645 мм).

Если аппаратура устанавливается вблизи стен, то необходимо предусмотреть проходы. Минимальное расстояние от стен должно быть около 800 - 900 мм. При компоновке пульта управления следует руководствоваться следующими требованиями - пользователю нужно создать возможность работать в удобном положении. Если затраты энергии при работе пользователя в прямой сидячей позе принять равным 1, то выполнение той же работы в положении стоя потребует в 1,6 раза больших затрат энергии, в наклонной сидячей позе - в 4 раза.

Во время работы с компьютером пользователь имеет дело с рабочим местом, оснащенным электрооборудованием, поэтому следует выполнять правила техники безопасности при работе с электрооборудованием.

Перед началом работы согласно ГОСТ 12.1.009 - 78, изменение 01-86, нужно убедиться в подключении заземляющего проводника к общей шине заземления. Необходимо не реже одного раза в год производить измерение сопротивления изоляции проводки, так как неисправная изоляция может привести к утечке тока, что может явиться причиной возникновения пожара или же к поражению людей током. Изоляция кабеля сети питания 220 В должна выдерживать без пробоя действие испытательного напряжения 750 В в течение одной минуты, сопротивление изоляции кабеля должно быть не менее 500 кОм. При начале работы с электрооборудованием человек должен быть ознакомлен с инструкцией по технике безопасности.

Пользователь во время работы обязан:

выполнять только ту работу, которая ему была поручена, и по которой он был проинструктирован;

в течение всего рабочего дня содержать в порядке и чистоте рабочее место;

держать открытыми все вентиляционные отверстия устройств;

внешнее устройство "мышь" применять только при наличии специального коврика;

при необходимости прекращения работы на некоторое время корректно закрыть все активные задачи;

отключать питание только в том случае, если оператор во время перерыва в работе на компьютере вынужден находиться в непосредственной близости от видеотерминала (менее 2 метров), в противном случае питание разрешается не отключать;

выполнять санитарные нормы и правила, соблюдать режимы работы и отдыха;

соблюдать правила эксплуатации вычислительной техники в соответствии с инструкциями по эксплуатации;

при работе с текстовой информацией выбирать наиболее физиологический режим представления черных символов на белом фоне;

соблюдать установленные режимом рабочего времени регламентированные перерывы в работе и выполнять в физкультпаузах и физкультминутках рекомендованные упражнения для глаз, рук, туловища, ног;

соблюдать расстояние от глаз до экрана. Положение экрана определяется:

- расстоянием считывания(0,6…0,7);

- углом считывания, направлением взгляда на 20? ниже горизонтали к центру экрана, причем экран перпендикулярен этому направлению.

Должна также предусматриваться возможность регулирования экрана:

- по высоте +3 см;

- по наклону от -10? до +20? относительно вертикали;

- в левом и правом направлениях.

По окончании работы оператор обязан соблюдать следующую последовательность выключения вычислительной техники:

- произвести закрытие всех активных задач;

- выполнить парковку считывающей головки жесткого диска (если не предусмотрена автоматическая парковка головки);

убедиться, что в дисководах нет дискеты или диска;

выключить питание системного блока (процессора);

выключить питание всех периферийных устройств;

отключить блок питания.

Создание благоприятных условий труда и правильное эстетическое оформление рабочих мест на производстве имеет большое значение, как для облегчения труда, так и для повышения его привлекательности, положительно влияющей на производительность труда.

3.9 Требования к выполнению правил пожарной безопасности

Пожары на предприятиях представляют большую опасность для работающих и причиняют огромный материальный ущерб. Пожарная безопасность обеспечивается системами мер по предотвращению пожаров и пожарной защите.

Под пожарной безопасностью понимается такое состояние объекта, при котором с большой вероятностью предотвращается возможность возникновение пожара, а в случае его возникновения обеспечивается эффективная защита людей от опасных и вредных факторов пожара и спасение материальных ценностей. Пожарная безопасность производственных объектов обеспечивается разработкой и осуществлением систем предотвращение пожаров и систем пожарной защиты. Эта задача решается как на стадии проектирования оборудования, так и в процессе его эксплуатации.

Причины возникновения пожаров в электронной аппаратуре

По данным статистики, от короткого замыкания в электрических сетях, машинах и аппаратах происходит в среднем 43,3% пожаров, от воспламенения горючих материалов и предметов, находящихся в непосредственной близости от электропотребителей или соприкасающихся с ними (перегрев опорных поверхностей) - 33,2%, при токовых перегрузках - 12,3%; от перегрева мест соединения токоведущих частей в результате образования больших переходных сопротивлений - 4,6%; от воздействия на окружающую среду электрической дуги и электрического искрения, возникающих при разрыве цепей - 3,3%; от нагрева конструкций при переходе (выносе) на них напряжений - 3,3% [ ].

Токи короткого замыкания в современных ЭУ и РЭА могут быть от единиц до тысяч ампер и зависят от следующих факторов: мощности источников питания (чем больше мощность, тем больше величина тока К3); от величины полного сопротивления элементов цепи, включенных между источником питания и точкой К3; вида К3 (трехфазное, однофазное и т. д.), при однофазном К3 ток К3 будет минимальным; времени с момента возникновения К3 до отключения К3 аппаратами защиты.

Токи К3 обладают термическим и электродинамическим действиями и сопровождаются резким понижением напряжения в электрических сетях. Поэтому они могут перегреть токоведущие части и расплавить проводники. Перегрев проводников, электрические искры и дуги повреждают и воспламеняют изоляцию и окружающую горючую среду. Возникающие при этом большие механические усилия способны разрушить элементы электрооборудования.

Требования к пожарной безопасности:

монтаж и установка пожарной охранной сигнализации

соответственно с тепловыми и домовыми датчиками с выносом

информации на сирену и общий пункт помещения;

необходимость исправности всех выключателей и розеток;

выполнение скрытой электромонтажной проводки;

обязательное применение нормальных разъемов присоединительных шнуров;

применение углекислотных огнетушителей ОУ-8 с установкой на

видном и доступном месте.

Работник обязан:

- знать схему эвакуации и место расположение огнетушителей;

- знать способ обращения с огнетушителем;

- не загромождать проходы посторонними предметами;

- при длительных перерывах более одного часа или, уходя с работы, выключать ПК или другие электроприборы (кроме факса и холодильника) путем вынимания исправной вилки из исправной розетки.

- при обнаружении возгорания прекратить работу, оповестить окружающих сотрудников, сообщить администрации, отключить от сети электрооборудование, приступить к тушению пожара имеющимися средствами пожаротушения (Таблица 4).

В помещениях с ЭВМ наиболее вероятны пожары классов "А" и "Е", то есть горение твердых веществ, сопровождаемое тлением ("А") или самовозгорание электроустановок ("Е").

Таблица 4

Рекомендуемые нормы оснащения огнетушителями

(на 200 м2 помещения)

Класс пожара

Количество и типы огнетушителей

А

2 воздушно-пенных ОВП-10 2 порошковых ОП-5

Е

Надо: 2 углекислотных ОУ-5 (оу-8) или 4 углекислотных ОУ-2 Допустимо: 2 порошковых ОП-5 или 4 порошковых ОП-2

А и Е

2 углекислотных ОУ-5 и

2 воздушно-пенных ОВП-10

К средствам тушения пожара, предназначенных для локализации небольших возгораний, относятся пожарные стволы, внутренние пожарные водопроводы, сухой песок, асбестовые одеяла и т. п.

ЗАКЛЮЧЕНИЕ

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

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

Созданная мною программа отличается достаточно простой формой, которая содержит все основные пункты технического задания, а именно создание групп, подгрупп и добавление в них заметок, создание, добавление и изменение записей в телефонной книге.

Моя программа обладает «мягким» и простым интерфейсом, доступным пользователю. Написание основных блоков сведено к включению в основную форму различных процедур и функций, что позволило творчески подойти к решению задачи и упростило другим пользователям и программистам разбор и корректировку кода программы для ее изменения.

При попытке сравнить мой результат с аналогами можно отметить сходство и различие, виной которым желания клиентов (тех, кто пользуется программой) и мысли программистов, желающих воплотить в своей работе все нужные и ненужные функции.

В завершение я хочу отметить огромные возможности среды Delphi по визуализации различных компонент, используя которые каждый может совершить свой маленький небольшой рывок в программировании.

В отдельной главе я рассмотрела мероприятия по охране труда и пожарной безопасности. Я провела анализ условий труда, рассмотрела требования безопасности, эргономики и технической эстетики к рабочему месту, к уровню шума и вибрации, к освещенности и безопасности к излучению от дисплея. Особое внимание уделила технике безопасности при работе с электрооборудованием и требованиям к пожарной безопасности.

Считаю, что цель, поставленная руководителем дипломного проекта, мною была достигнута.

СПИСОК ЛИТЕРАТУРЫ

Анатолий Хомоненко, Владимир Гофман, Евгений Мещеряков, Владимир Никифоров “Наиболее полное руководство Delphi 7” Санкт-Петербург «БХВ - Петербург» 2005г.

А. Жуков «Изучаем Delphi» - СПб.: Питер, 2003.

А.Н. Боровский “Программирования в Delphi 2005”

А.Я. Архангельский “Программирование в Delphi 7”Фаронов В. В.,Турбо Паскаль 7.0., Учебное пособие. - М.:«Нолидж», 1999 г.

А.Я. Архангельский “Справочное пособие Delphi 6” Москва ЗАО «Издательство БИНОМ» 2001г.

В. Фаронов «Deiphi 6» - СПб.: Питер, 2002.

В.Э.Гофман, А.Д.Хомоненко Delphi 6

С. С. Гайсарян «Объектно-ориентированное проектирование»

М.В. Сухарев “Основы Delphi - профессиональный подход”

Н.Б.Культин Delphi 6. Программирование на Object Pascal

Справочник разработчика Delphi (Object Pascal)

Справочник разработчика Delphi (Классы и Компоненты)

СПИСОК ЛИТЕРАТУРЫ ПО ОХРАНЕ ТРУДА

Васильчук М. В. «Основы охраны труда» Киев. Просвита. 1997

ГОСТ12.4.026-77ССБТ Цвета сигнальные и знаки безопасности.

Долин П. А. «Справочник по технике безопасности», Москва, "Энергоиздат", 1982г.

Денисенко Г. Ф. «Охрана труда», Москва, 1985 г.

Лужкин И. П., «Правила техники безопасности и производственной санитарии в промышленности», Санкт-Петербург, 1995

Программа для инструктажа по охране труда для лиц эксплуатирующих

компьютерную технику, г. Тирасполь, 2004 г.

СаНПиН2.2.2.542-96 Гигиенические требования к видеодисплейным терминалам,персональным электровычислительным машинам и организации работ-М.1996.-40с.

СНиП 11-2-80 Нормы проектирования . Противопожарные нормы проектирования зданий и сооружений-М:стройиздат,1981.-16с.

ПРИЛОЖЕНИЕ

unit main;

interface

uses

Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,

ComCtrls, ExtCtrls, ToolWin, Menus, Registry, inifiles, StdCtrls, Buttons,

ActnList, ImgList,printers, shellApi, Grids, AppEvnts, Excel2000,

OleServer, ComOBJ, XPMan;

type

TPhoneBook = class(TForm)

ActionList1: TActionList;

edit_: TAction;

new_: TAction;

delete_: TAction;

PopupMenu1: TPopupMenu;

N3: TMenuItem;

N4: TMenuItem;

N5: TMenuItem;

PopupList: TPopupMenu;

N1: TMenuItem;

N2: TMenuItem;

PageControl1: TPageControl;

TabSheet1: TTabSheet;

SGL: TSplitter;

PhoneList: TPanel;

Phones: TListView;

comment: TMemo;

TabSheet3: TTabSheet;

GroupBox1: TGroupBox;

CheckBox2: TCheckBox;

CheckBox3: TCheckBox;

GroupBox2: TGroupBox;

ComboBox1: TComboBox;

Label1: TLabel;

status: TStatusBar;

CheckBox5: TCheckBox;

TabSheet4: TTabSheet;

asQN: TPanel;

Split: TSplitter;

ToolButton1: TToolButton;

ToolButton11: TToolButton;

ToolButton12: TToolButton;

ToolButton5: TToolButton;

ToolButton14: TToolButton;

ToolBar1: TToolBar;

ToolButton21: TToolButton;

ToolButton20: TToolButton;

ToolButton10: TToolButton;

ToolButton4: TToolButton;

ToolButton9: TToolButton;

ToolButton15: TToolButton;

ToolButton26: TToolButton;

ToolButton28: TToolButton;

ToolButton29: TToolButton;

ToolButton30: TToolButton;

FilesPopup: TPopupMenu;

SelAll1: TMenuItem;

N34: TMenuItem;

N21: TMenuItem;

N22: TMenuItem;

N20: TMenuItem;

N23: TMenuItem;

N28: TMenuItem;

N26: TMenuItem;

N27: TMenuItem;

N25: TMenuItem;

N24: TMenuItem;

N29: TMenuItem;

ListPopup: TPopupMenu;

N16: TMenuItem;

N37: TMenuItem;

N14: TMenuItem;

MenuItem1: TMenuItem;

N6: TMenuItem;

N7: TMenuItem;

N9: TMenuItem;

N10: TMenuItem;

N11: TMenuItem;

N17: TMenuItem;

N18: TMenuItem;

FontDialog1: TFontDialog;

Actions: TImageList;

Tree: TImageList;

ActionList2: TActionList;

Exit: TAction;

NewText: TAction;

Remove: TAction;

NewSubCategory: TAction;

Fontcfg: TAction;

ChgProp: TAction;

SaveNote: TAction;

AllUpper: TAction;

AllLower: TAction;

AllProper: TAction;

AllInvert: TAction;

Cut: TAction;

Paste: TAction;

Copy: TAction;

SetFirst: TAction;

FocusList: TAction;

SelAll: TAction;

PrintNote: TAction;

StatusBar1: TStatusBar;

GroupBox3: TGroupBox;

BitBtn1: TBitBtn;

StatusBar2: TStatusBar;

N12: TMenuItem;

N13: TMenuItem;

SD: TSaveDialog;

N19: TMenuItem;

CheckBox1: TCheckBox;

ToolButton2: TToolButton;

Action1: TAction;

SHtml: TSaveDialog;

Label3: TLabel;

Label4: TLabel;

Label6: TLabel;

ColorD: TColorDialog;

ExitOnEsc: TAction;

Groups: TListView;

GroupBox5: TGroupBox;

Label2: TLabel;

CB1: TCheckBox;

Label7: TLabel;

CB2: TCheckBox;

CB3: TCheckBox;

CB4: TCheckBox;

CB5: TCheckBox;

Label8: TLabel;

Bgcolor: TLabel;

textcolor: TLabel;

bordercolor: TLabel;

border: TCheckBox;

CheckBox8: TCheckBox;

List: TTreeView;

files: TMemo;

ApplicationEvents1: TApplicationEvents;

N8: TMenuItem;

Splitter1: TSplitter;

N15: TMenuItem;

N30: TMenuItem;

ToolBar3: TToolBar;

ToolButton17: TToolButton;

ToolButton13: TToolButton;

ToolButton18: TToolButton;

ToolButton8: TToolButton;

PBToolButton6: TToolButton;

Panel1: TPanel;

Label5: TLabel;

EditFind: TEdit;

PopupMenu2: TPopupMenu;

ToExcel: TAction;

ToHTML: TAction;

Excel1: TMenuItem;

HTML1: TMenuItem;

XPManifest1: TXPManifest;

procedure FormCreate(Sender: TObject);

procedure N2Click(Sender: TObject);

procedure PhonesChange(Sender: TObject; Item: TListItem;

Change: TItemChange);

procedure edit_Execute(Sender: TObject);

procedure delete_Execute(Sender: TObject);

procedure PhonesDblClick(Sender: TObject);

procedure new_Execute(Sender: TObject);

procedure N1Click(Sender: TObject);

procedure FormActivate(Sender: TObject);

procedure GroupsChange(Sender: TObject; Item: TListItem;

Change: TItemChange);

procedure CheckBox2Click(Sender: TObject);

procedure CheckBox3Click(Sender: TObject);

procedure FormClose(Sender: TObject; var Action: TCloseAction);

procedure ComboBox1Change(Sender: TObject);

procedure RemoveExecute(Sender: TObject);

procedure NewSubCategoryExecute(Sender: TObject);

procedure NewTextExecute(Sender: TObject);

procedure ListChange(Sender: TObject; Node: TTreeNode);

procedure FontcfgExecute(Sender: TObject);

procedure filesChange(Sender: TObject);

procedure ChgPropExecute(Sender: TObject);

procedure SaveNoteExecute(Sender: TObject);

procedure AllUpperExecute(Sender: TObject);

procedure AllLowerExecute(Sender: TObject);

procedure AllProperExecute(Sender: TObject);

procedure AllInvertExecute(Sender: TObject);

procedure CutExecute(Sender: TObject);

procedure PasteExecute(Sender: TObject);

procedure CopyExecute(Sender: TObject);

procedure filesKeyUp(Sender: TObject; var Key: Word;

Shift: TShiftState);

procedure filesMouseUp(Sender: TObject; Button: TMouseButton;

Shift: TShiftState; X, Y: Integer);

procedure ListPopupPopup(Sender: TObject);

procedure N16Click(Sender: TObject);

procedure N18Click(Sender: TObject);

procedure N37Click(Sender: TObject);

procedure filesKeyPress(Sender: TObject; var Key: Char);

procedure filesClick(Sender: TObject);

procedure filesKeyDown(Sender: TObject; var Key: Word;

Shift: TShiftState);

procedure SpeedButton1Click(Sender: TObject);

procedure PhonesKeyUp(Sender: TObject; var Key: Word;

Shift: TShiftState);

procedure FormShow(Sender: TObject);

procedure CheckBox1Click(Sender: TObject);

procedure bgcolorClick(Sender: TObject);

procedure textcolorClick(Sender: TObject);

procedure bordercolorClick(Sender: TObject);

procedure ToolButton16Click(Sender: TObject);

procedure ListDragOver(Sender, Source: TObject; X, Y: Integer;

State: TDragState; var Accept: Boolean);

procedure ListDragDrop(Sender, Source: TObject; X, Y: Integer);

procedure ListEndDrag(Sender, Target: TObject; X, Y: Integer);

procedure ApplicationEvents1Exception(Sender: TObject; E: Exception);

procedure N8Click(Sender: TObject);

procedure TabSheet4Show(Sender: TObject);

procedure N30Click(Sender: TObject);

procedure EditFindChange(Sender: TObject);

procedure SelAll1DrawItem(Sender: TObject; ACanvas: TCanvas;

ARect: TRect; Selected: Boolean);

procedure PhonesColumnClick(Sender: TObject; Column: TListColumn);

procedure commentExit(Sender: TObject);

procedure PopupListPopup(Sender: TObject);

procedure commentChange(Sender: TObject);

procedure ExitOnEscExecute(Sender: TObject);

procedure SetFirstExecute(Sender: TObject);

procedure FocusListExecute(Sender: TObject);

procedure SelAllExecute(Sender: TObject);

procedure PrintNoteExecute(Sender: TObject);

procedure ToHTMLExecute(Sender: TObject);

procedure ToExcelExecute(Sender: TObject);

private

{ Private declarations }

public

{ Public declarations }

end;

////////////////////////////////////////////////////////////////////////////////

// My functions

////////////////////////////////////////////////////////////////////////////////

Procedure UpdateNotes;

Procedure UpdateNotesIcons;

Procedure SortList;

function InvertCase(s:string):string;

function ProperCase(ss:string):string;

procedure LoadGroupPhones(const Groupname:string);

procedure LoadPhones;

////////////////////////////////////////////////////////////////////////////////

var

PhoneBook: TPhoneBook;

ini:TiniFile;

dir:string; //рабочая деректория

newi:boolean;

tab:shortstring;

Node,ToNode:TTreeNode;

_f:boolean=false;

_II:integer=-1;

ind:integer=-2;

CommentChanged:boolean=false;

implementation

uses new_phone, Change, cfg, Unit2, Unit3, Unit4, Unit1;

{$R *.DFM}

////////////////////////////////////////////////////////////////////////////////

// создание формы

////////////////////////////////////////////////////////////////////////////////

procedure TPhoneBook.FormCreate(Sender: TObject);

var UT,AN,glist:tstringlist;

m,k,n,i:integer;

cfgini:Tinifile;

begin

groups.OnChange:=nil;

Phones.OnChange:=nil;

dir:=extractfilepath(application.ExeName);

if not DirectoryExists(dir+'text') then

if not CreateDir(dir+'text') then begin

raise Exception.Create('Cannot Create Work Dir');

showmessage('Возможно диск защищен от записи или нет соответствующих прав доступа');

application.Terminate;

end;

Newi:=True;

SetCurrentDir(dir);

ini:=tinifile.create(dir+'phones.pdb');

// загрузка групп телефонов

glist:=tstringlist.create;

glist.Clear;

Groups.Clear;

try

if fileexists(dir+'groups.pdb') then

glist.LoadFromFile(dir+'groups.pdb')

except

writelog(log,'FileReadError(Groups.pdb)','FormCreate');

end;

Groups.AddItem('<Весь список>',nil);

for i:=0 to gList.Count-1 do begin

Groups.AddItem(gList[i],nil);

end;

GList.Free;

groups.ItemIndex:=0;

// загрузка списка заметок

try

FileSetAttr(dir+'text\notes.lst',$00);

if FileExists(dir+'text\notes.lst') then

List.LoadFromFile(dir+'text\notes.lst');//:3

except

WriteLog(Log,'FileAccessError(notes.lst)','FormCreate');

end;

//-------------------------------

cfgini:=tinifile.Create(dir+'PhoneBook.ini');

AN:=tstringlist.create;

ut:=tstringlist.create;

ut.Clear;

an:=GetAllNotesNames;

m:=list.Items.AddChild(list.Items.GetFirstNode,'*').AbsoluteIndex;

cfgini.writestring('group','*','Заметки не используемые ни в одной группе(востановленные после неудачного удаления)');

UpdateNotesIcons;

for k:=0 to List.Items.Count-1 do

for n:=0 to An.Count-1 do

if (list.items[k].Text=AN[n]) then

UT.add(an[n]);

for n:=0 to an.Count-1 do begin

if UT.IndexOf(an[n])=-1 then

list.Items.AddChild(list.Items[m],an[n]);

end;

AN.Free;

UT.Free;

if list.Items[m].Count<1 then list.Items[m].Delete;

cfgini.Free;

//-------------------------------

cfg.loadCFG;

PhoneBook.PageControl1.Update;

UpdateNotesIcons;

groups.OnChange:=GroupsChange;

Phones.OnChange:=PhonesChange;

end;

////////////////////////////////////////////////////////////////////////////////

// удаление группы телефонов

////////////////////////////////////////////////////////////////////////////////

procedure TPhoneBook.N2Click(Sender: TObject);

var i:integer;

glist:tstringlist;

begin

if groups.ItemFocused.Caption<>'<Весь список>' then

if messagedlg('Вы действительно хотите удалить группу "'+groups.ItemFocused.Caption+'"',mtConfirmation,[mbNo,mbYes],0)=mrYes then begin

groups.ItemFocused.Delete;

glist:=tstringlist.create;

glist.Clear;

for i:=1 to groups.Items.Count-1 do begin

glist.add(groups.Items[i].Caption);

end;

try

filesetattr(dir+'groups.pdb',$00);

glist.SaveToFile(dir+'groups.pdb');

except

//запись лога при ошибке

writelog(log,'FileWriteError(Groups.pdb)','N2Click');

end;

glist.Free;

end;

end;

////////////////////////////////////////////////////////////////////////////////

// загрузка телефонов в соответствии с группой

////////////////////////////////////////////////////////////////////////////////

procedure LoadGroupPhones(Const Groupname:string);

var i,cur:integer;

sec:tstringlist;

begin

phonebook.phones.OnChange:=nil;

sec:=tstringlist.Create;

with phonebook do begin

phones.Clear;

try

ini.ReadSections(sec);

status.panels[1].text:=' число записей: '+inttostr(sec.Count);

if groups.ItemIndex=0 then begin

for i:=0 to sec.Count-1 do begin

Phones.Items.Add.Caption:=Sec[i];

Phones.Items[i].SubItems.Add(Ini.ReadString(Sec[i],'n1',''));

Phones.Items[i].SubItems.Add(Ini.ReadString(Sec[i],'n2',''));

Phones.Items[i].SubItems.Add(Ini.ReadString(Sec[i],'n3',''));

Phones.Items[i].SubItems.Add(Ini.ReadString(Sec[i],'n4',''));

Phones.Items[i].SubItems.Add(Ini.ReadString(Sec[i],'n6',''));

Phones.Items[i].SubItems.Add(Ini.ReadString(Sec[i],'n5',''));

end;

end;

if groups.itemindex>0 then begin

for i:=0 to sec.Count-1 do begin

if ini.readstring(sec[i],'n7','')=GroupName then begin

cur:=phones.Items.Add.Index;

phones.items[cur].Caption:=sec[i];

phones.items[cur].SubItems.Add(ini.readstring(sec[i],'n1',''));

phones.items[cur].SubItems.Add(ini.readstring(sec[i],'n2',''));

phones.items[cur].SubItems.Add(ini.readstring(sec[i],'n3',''));

phones.items[cur].SubItems.Add(ini.readstring(sec[i],'n4',''));

phones.items[cur].SubItems.Add(ini.readstring(sec[i],'n6',''));

phones.items[cur].SubItems.Add(ini.readstring(sec[i],'n5',''));

end;

end;

end;

except

writelog(log,'FileReadError('+ini.filename+')','LoadAllPhones');

end;

end;

phonebook.phones.OnChange:=PhoneBook.PhonesChange;

end;

////////////////////////////////////////////////////////////////////////////////

// загрузка всех телефонов

////////////////////////////////////////////////////////////////////////////////

procedure LoadPhones;

var i:integer;

sec:tstringlist;

begin

phonebook.phones.OnChange:=nil;

sec:=tstringlist.Create;

with phonebook do begin

phones.Items.Clear;

try

ini.ReadSections(sec);

status.panels[1].text:=' число записе1: '+inttostr(sec.Count);

for i:=0 to sec.Count-1 do begin

phones.Items.Add;

phones.items[i].Caption:=sec[i];

phones.items[i].SubItems.Add(ini.readstring(sec[i],'n1',''));

phones.items[i].SubItems.Add(ini.readstring(sec[i],'n2',''));

phones.items[i].SubItems.Add(ini.readstring(sec[i],'n3',''));

phones.items[i].SubItems.Add(ini.readstring(sec[i],'n4',''));

phones.items[i].SubItems.Add(ini.readstring(sec[i],'n6',''));

phones.items[i].SubItems.Add(ini.readstring(sec[i],'n5',''));

end;

except

writelog(log,'FileReadError('+ini.filename+')','LoadPhones');

end;

end;

phonebook.phones.OnChange:=PhoneBook.PhonesChange;

end;

////////////////////////////////////////////////////////////////////////////////

// изменение телфонов

////////////////////////////////////////////////////////////////////////////////

procedure TPhoneBook.PhonesChange(Sender: TObject; Item: TListItem;Change: TItemChange);

var i:integer;

begin

comment.Clear;

for i:=0 to 100 do begin

try

if ini.readstring(item.Caption,'c'+inttostr(i),'@')<>'@' then

comment.lines.Add(ini.readstring(item.Caption,'c'+inttostr(i),''));

except

writelog(log,'FileReadError('+ini.filename+')','PhonesChange');

end;

end;

comment.SelStart:=0;

comment.Sellength:=0;

comment.Update;

CommentChanged:=false;

end;

////////////////////////////////////////////////////////////////////////////////

// редактирование телефона

////////////////////////////////////////////////////////////////////////////////

procedure TPhoneBook.edit_Execute(Sender: TObject);

begin

if (phones.Focused)and(phones.selected<>nil) then begin

Application.CreateForm(TChangePhone, ChangePhone);

if changePhone.showmodal=mrOk then begin

LoadGroupPhones(groups.Selected.Caption);

end;

ChangePhone.Free;

end;

end;

////////////////////////////////////////////////////////////////////////////////

// удаление телефона

////////////////////////////////////////////////////////////////////////////////

procedure TPhoneBook.delete_Execute(Sender: TObject);

var attr:integer;

begin

if phones.Focused then

if messagedlg('Вы действительно хотите удалить "'+phones.ItemFocused.Caption+'"'

,mtConfirmation,[mbNo,mbYes],0)=mrYes then begin

try

attr:=filegetattr(ini.FileName);

filesetattr(ini.FileName,$00);

ini.EraseSection(phones.ItemFocused.Caption);

filesetattr(ini.FileName,attr);

//LoadAllPhones(groups.Selected.Caption);

phones.ItemFocused.Delete;

except

writelog(log,'FileWriteError('+ini.filename+')','delete_execute');

end;

end;

end;

////////////////////////////////////////////////////////////////////////////////

// редактирование телефона

////////////////////////////////////////////////////////////////////////////////

procedure TPhoneBook.PhonesDblClick(Sender: TObject);

begin

if phones.ItemFocused<>nil then edit_.Execute;

end;

////////////////////////////////////////////////////////////////////////////////

// создание телефона

////////////////////////////////////////////////////////////////////////////////

procedure TPhoneBook.new_Execute(Sender: TObject);

begin

Application.CreateForm(TNewPhone, NewPhone);

if NewPhone.ShowModal=mrOk then

if groups.itemIndex>0 then

LoadGroupPhones(groups.items[groups.itemIndex].Caption)

else

LoadGroupPhones(groups.items[0].Caption);

NewPhone.free;

end;

////////////////////////////////////////////////////////////////////////////////

// новая группа телефонов

////////////////////////////////////////////////////////////////////////////////

procedure TPhoneBook.N1Click(Sender: TObject);

var newstr:string;

i:integer;

glist:tstringlist;

begin

try

NewStr:=InputBox('Новая группа телефонов','Введите имя группы','');

if newstr<>'' then begin

groups.Items.add.Caption:=newstr;

glist:=tstringlist.create;

glist.Clear;

for i:=1 to groups.Items.Count-1 do begin

Glist.add(groups.Items[i].Caption);

end;

try

FileSetAttr(dir+'groups.pdb',$00);

Glist.SaveToFile(dir+'groups.pdb');

Glist.Free;

except

WriteLog(log,'FileWriteError(Groups.pdb)','N1Click');

end;

end;

except

WriteLog(log,'NewGroupError','N1Click');

end;

end;

////////////////////////////////////////////////////////////////////////////////

// активация формы

////////////////////////////////////////////////////////////////////////////////

procedure TPhoneBook.FormActivate(Sender: TObject);

begin

ComboBox1Change(self);

groups.Items[0].selected:=true;

if phones.Items.Count>0 then

phones.Items[0].selected:=true;

LoadGroupPhones(groups.Selected.Caption);

groups.Update;

PhonesColumnClick(phones,phones.Column[0]);

phones.Update;

phones.Realign;

groups.Realign;

files.Realign;

List.Realign;

asqn.Realign;

PhoneList.Realign;

status.Realign;

comment.Realign;

// splitter1.Align:=alBottom;

if not _f then begin

Groups.ItemIndex:=_II;

_f:=true;

end;

end;

////////////////////////////////////////////////////////////////////////////////

// изменение групп телефонов

////////////////////////////////////////////////////////////////////////////////

procedure TPhoneBook.GroupsChange(Sender: TObject; Item: TListItem;

Change: TItemChange);

begin

Phones.OnChange:=Nil;

if groups.Items.Count>0 then

if (groups.ItemIndex>=0) and (groups.ItemIndex<groups.Items.Count) then

LoadGroupPhones(groups.Selected.Caption);

Phones.OnChange:=PhonesChange;

if phones.Items.Count>0 then

phones.Items[0].Selected:=true;

end;

////////////////////////////////////////////////////////////////////////////////

// видимость групп телефонов

////////////////////////////////////////////////////////////////////////////////

procedure TPhoneBook.CheckBox2Click(Sender: TObject);

begin

Groups.Visible:= CheckBox2.Checked;

end;

////////////////////////////////////////////////////////////////////////////////

//видимость комментариев для контакта

////////////////////////////////////////////////////////////////////////////////

procedure TPhoneBook.CheckBox3Click(Sender: TObject);

begin

comment.Visible:= CheckBox3.Checked;

splitter1.align:=alNone;

splitter1.top:=splitter1.top-50;

splitter1.align:=alBottom;

end;

////////////////////////////////////////////////////////////////////////////////

// закрытие формы

////////////////////////////////////////////////////////////////////////////////

procedure TPhoneBook.FormClose(Sender: TObject; var Action: TCloseAction);

var i:integer;

begin

for i:=0 to list.Items[0].Count-1 do begin

if list.Items[0].item[i].text='*' then list.Items[0].Item[i].Delete;

end;

try

FileSetAttr(dir+'text\notes.lst',$00);

list.SaveToFile(dir+'text\notes.lst');

except

writelog(log,'FileWriteError(notes.lst)','FormClose');

end;

cfg.SaveCFG;

end;

////////////////////////////////////////////////////////////////////////////////

// выбор полежения табов

////////////////////////////////////////////////////////////////////////////////

procedure TPhoneBook.ComboBox1Change(Sender: TObject);

begin

Case combobox1.ItemIndex of

0:PageControl1.TabPosition:=tpTop;

1:PageControl1.TabPosition:=tpBottom;

2:PageControl1.TabPosition:=tpRight;

3:PageControl1.TabPosition:=tpLeft;

end;

end;

////////////////////////////////////////////////////////////////////////////////

// удаление элимента каталога

////////////////////////////////////////////////////////////////////////////////

procedure TPhoneBook.RemoveExecute(Sender: TObject);

var s:string;

cfgini:tinifile;

begin

cfgini:=tinifile.Create(dir+'PhoneBook.ini');

try

if list.selected<>list.Items.GetFirstNode then begin

if list.selected.ImageIndex =2 then s:='Действительно удалить заметку "'

+AnsiUpperCase(list.selected.text)+'"?'

else s:='Действительно удалить категорию "'+AnsiUpperCase(list.selected.text)+'"?';

if messagedlg(s,mtConfirmation,[mbYes,mbNo],0)=mrYes then begin

if list.selected.ImageIndex =2 then begin

//deletefile(list.selected.text+'.txt')

filesetattr(dir+'text\'+list.selected.text+'.txt',$00);

deletefile(dir+'text\'+list.selected.text+'.txt');

end

else begin

filesetattr(cfgini.FileName,$00);

cfgini.deleteKey('Group',list.selected.text);

end;

list.Items.Delete(list.Selected);

end;

end;

except

writelog(log,'FileReadError('+cfgini.filename+')','RemoveExecute');

end;

cfgini.Free;

updatenotes; //обновить параметры каталога

updatenotesIcons; // и отображения

end;

////////////////////////////////////////////////////////////////////////////////

// создание нового каталога

////////////////////////////////////////////////////////////////////////////////

procedure TPhoneBook.NewSubCategoryExecute(Sender: TObject);

begin

Application.CreateForm(TForm2, Form2);

form2.showmodal;

UpdateNotesIcons;

UpdateNotes;

form2.free;

end;

////////////////////////////////////////////////////////////////////////////////

// добавление новой заметки

////////////////////////////////////////////////////////////////////////////////

procedure TPhonebook.NewTextExecute(Sender: TObject);

begin

Application.CreateForm(TForm3, Form3);

form3.showmodal;

form3.Free;

updateNotesIcons;

UpdateNotes;

end;

////////////////////////////////////////////////////////////////////////////////

// изменение состояния списка каталога

////////////////////////////////////////////////////////////////////////////////

procedure TPhonebook.ListChange(Sender: TObject; Node: TTreeNode);

begin

UpdateNotes;

end;

///////////////////////////////////////////////////////////////////////////////

// конфигурация шрифта для отображения текста заметок

///////////////////////////////////////////////////////////////////////////////

procedure TPhoneBook.FontcfgExecute(Sender: TObject);

var fs:string;

cfgini:tinifile;

begin

cfgini:=tinifile.Create(dir+'PhoneBook.ini');

try

fs:='0000';//начальные параметры стиля

fontdialog1.Font := files.font;

if fontdialog1.Execute then begin

files.Font:=fontdialog1.Font;

//запомним и установим выбранные параметры

filesetattr(cfgini.FileName,$00);

cfgini.WriteInteger('Notes','FontSize',files.Font.size);

cfgini.WriteString('Notes','FontFace',files.Font.Name);

// закодируем и сохраним стиль шрифта

if fsBold in files.font.Style then fs[1]:='1';

if fsItalic in files.font.Style then fs[2]:='1';

if fsUnderline in files.font.Style then fs[3]:='1';

if fsStrikeOut in files.font.Style then fs[4]:='1';

cfgini.WriteString('Notes','FontStyle', fs);

end;

except

writelog(log,'FileWriteError('+cfgini.FileName+')','RemoveExecute');

end;

cfgini.Free;

end;

///////////////////////////////////////////////////////////////////////////////

// Запомним изменяющийся текст в заметке по ходу его изменения

///////////////////////////////////////////////////////////////////////////////

procedure TPhoneBook.FilesChange(Sender: TObject);

var cr_lf:integer;

begin

//только если это заметка

if list.selected.imageindex=2 then begin

try

fileSetAttr(includeTrailingBackslash(dir)+'text\'+list.selected.text+'.txt',$00);

files.Lines.savetofile(includeTrailingBackslash(dir)+'text\'+list.selected.text+'.txt');

except

writelog(log,'FileWriteError('+list.selected.text+'.txt)','FilesChange');

end;

end;

cr_lf:=files.Lines.count*2;

statusbar1.Panels[3].text:='Символов:'+inttostr(length(files.lines.text)-cr_lf);

end;

////////////////////////////////////////////////////////////////////////////////

// изменение имени заметки или имени и комментария группы

////////////////////////////////////////////////////////////////////////////////

procedure TPhoneBook.ChgPropExecute(Sender: TObject);

begin

Application.CreateForm(TForm4, Form4);

if list.Selected<>list.items.GetFirstNode then form4.showmodal;

form4.free;

UpdateNotes;

end;

////////////////////////////////////////////////////////////////////////////////

// обновления отображения иконок для узлов каталога

////////////////////////////////////////////////////////////////////////////////

procedure UpdateNotesIcons;

var i:integer;

cfgini:tinifile;

begin

cfgini:=tinifile.Create(dir+'PhoneBook.ini');

try

with PhoneBook do begin

FOR I:=1 TO LIST.ITEMS.COUNT-1 DO BEGIN

if cfgini.ValueExists('Group',List.Items[i].Text) then begin

if list.items[i].count>0 then begin

List.Items[i].ImageIndex:=1;

List.Items[i].SelectedIndex:=1;

end

else begin

List.Items[i].ImageIndex:=3;

List.Items[i].SelectedIndex:=3;

end;

end

else begin

list.items[i].ImageIndex:=2;

list.items[i].SelectedIndex:=2;

end;

END;

list.Refresh;

end;

except

writelog(log,'FileReadError(PhoneBook.ini)','UpdateItemsIcons');

end;

cfgini.Free;

end;

////////////////////////////////////////////////////////////////////////////////

// обновление параметров каталога

////////////////////////////////////////////////////////////////////////////////

procedure UpdateNotes;

var fll:tstringlist;//список строк заметки для загрузки

cntfiles,i:integer;

begin

for i:=0 to phonebook.list.Items[0].Count-1 do begin

if (phonebook.list.Items[0].item[i].text='*')and(phonebook.list.Items[0].item[i].Count<1) then

phonebook.list.Items[0].Item[i].Delete;

end;

if PhoneBook.list.selected=nil then

PhoneBook.list.items[0].Selected:=true;

PhoneBook.statusbar1.panels[2].text:='';

PhoneBook.statusbar1.panels[3].text:='';

PhoneBook.files.Clear;

//применение параметров в зависимости от выбранного элимента списка

case PhoneBook.list.selected.imageindex of

0: begin //корень

//установим кооментарий и деактивизируем недоступные элименты

// покажем доступные

PhoneBook.NewSubcategory.Enabled:=true;

PhoneBook.newtext.enabled:=true;

// скроем недоступные

PhoneBook.setfirst.enabled:=false;

PhoneBook.chgprop.enabled:=false;

PhoneBook.cut.enabled:=false;

PhoneBook.copy.enabled:=false;

PhoneBook.paste.enabled:=false;

PhoneBook.Remove.enabled:=false;

PhoneBook.files.enabled:=False;

PhoneBook.savenote.Enabled:=false;

PhoneBook.allUpper.enabled:=false;

PhoneBook.allLower.enabled:=false;

PhoneBook.allInvert.enabled:=False;

PhoneBook.allProper.enabled:=false;

PhoneBook.PrintNote.Enabled:=false;

end;

1: begin //группа

//доступные элименты

PhoneBook.chgprop.enabled:=true;

PhoneBook.Remove.enabled:=True;

PhoneBook.newtext.enabled:=true;

PhoneBook.setfirst.enabled:=true;

PhoneBook.NewSubcategory.Enabled:=true;

//недоступные элименты

PhoneBook.cut.enabled:=false;

PhoneBook.copy.enabled:=false;

PhoneBook.paste.enabled:=false;

PhoneBook.files.enabled:=False;

PhoneBook.savenote.Enabled:=false;

PhoneBook.allUpper.enabled:=false;

PhoneBook.allLower.enabled:=false;

PhoneBook.allInvert.enabled:=false;

PhoneBook.allProper.enabled:=false;

PhoneBook.PrintNote.Enabled:=false;

end;

3: begin //группа

//доступные элименты

PhoneBook.setfirst.enabled:=True;

PhoneBook.chgprop.enabled:=true;

PhoneBook.Remove.enabled:=True;

PhoneBook.newtext.enabled:=true;

PhoneBook.NewSubcategory.Enabled:=true;

//недоступные элименты

PhoneBook.cut.enabled:=false;

PhoneBook.copy.enabled:=false;

PhoneBook.paste.enabled:=false;

PhoneBook.files.enabled:=False;

PhoneBook.savenote.Enabled:=false;

PhoneBook.allUpper.enabled:=false;

PhoneBook.allLower.enabled:=false;

PhoneBook.allInvert.enabled:=false;

PhoneBook.allProper.enabled:=false;

PhoneBook.PrintNote.Enabled:=false;

end;

2: begin //заметка

//недоступный элимент

PhoneBook.NewSubcategory.Enabled:=False;

PhoneBook.allUpper.enabled:=false;

PhoneBook.allLower.enabled:=false;

PhoneBook.allProper.enabled:=false;

PhoneBook.allInvert.enabled:=false;

PhoneBook.cut.enabled:=false;

PhoneBook.copy.enabled:=false;

//доступные элименты управления

PhoneBook.PrintNote.Enabled:=true;

PhoneBook.setfirst.enabled:=True;

PhoneBook.chgprop.enabled:=true;

PhoneBook.Remove.enabled:=True;

PhoneBook.newtext.enabled:=true;

PhoneBook.files.enabled:=true;

PhoneBook.savenote.Enabled:=true;

PhoneBook.paste.enabled:=true;

//загрузим текст

fll:=tstringlist.create;

try

if FileExists(dir+'text\'+PhoneBook.list.selected.Text+'.txt') then begin

fileSetAttr(dir+'text\'+PhoneBook.list.selected.Text+'.txt',$00);

fll.LoadFromFile(dir+'text\'+PhoneBook.list.selected.Text+'.txt');

end

else Fll.SavetoFile(dir+'text\'+PhoneBook.list.selected.Text+'.txt');

except

writelog(log,'FileWriteError('+PhoneBook.list.selected.Text+'.txt)','UpdateNotes');

end;

PhoneBook.files.Clear;

PhoneBook.files.lines.AddStrings(fll);

//очистим времменую переменную

fll.free;

end;

end;

cntfiles:=0;

for i:=0 to PhoneBook.list.Items.count-1 do

if PhoneBook.list.Items[i].ImageIndex=2 then inc(cntfiles);

PhoneBook.StatusBar1.Panels[1].text:='Заметок:'+inttostr(cntfiles);

end;

////////////////////////////////////////////////////////////////////////////////

// сохранение заметки в др. файл

////////////////////////////////////////////////////////////////////////////////

procedure TPhoneBook.SaveNoteExecute(Sender: TObject);

begin

sd.FileName:=list.selected.Text+'.txt';

if sd.Execute then begin

try

files.Lines.SaveToFile(sd.FileName);

except

writelog(log,'FileWriteError('+sd.filename+')','SaveNoteExecute');

end;

end;

end;

////////////////////////////////////////////////////////////////////////////////

// в верхний регистр

////////////////////////////////////////////////////////////////////////////////

procedure TPhoneBook.AllUpperExecute(Sender: TObject);

var s,l:integer;

begin

s:=files.SelStart;

l:=files.SelLength;

if l>0 then begin

files.SelText:=ansiuppercase(files.SelText);

files.SelStart:=s;

files.SelLength:=l;

end;

end;

////////////////////////////////////////////////////////////////////////////////

// в нижний регистр

////////////////////////////////////////////////////////////////////////////////

procedure TPhoneBook.AllLowerExecute(Sender: TObject);

var s,l:integer;

begin

s:=files.SelStart;

l:=files.SelLength;

if l>0 then begin

files.SelText:=ansilowercase(files.SelText);

files.SelStart:=s;

files.SelLength:=l;

end;

end;

////////////////////////////////////////////////////////////////////////////////

// в правельный регистр

////////////////////////////////////////////////////////////////////////////////

procedure TPhoneBook.AllProperExecute(Sender: TObject);

var s,l:integer;

begin

s:=files.SelStart;

l:=files.SelLength;

if l>0 then begin

files.seltext:=propercase(files.seltext);

files.SelStart:=s;

files.SelLength:=l;

end;

end;

////////////////////////////////////////////////////////////////////////////////

// инверсный регистр

////////////////////////////////////////////////////////////////////////////////

procedure TPhoneBook.AllInvertExecute(Sender: TObject);

var s,l:integer;

begin

s:=files.SelStart;

l:=files.SelLength;

if l>0 then begin

files.seltext:=invertcase(files.seltext);

files.SelStart:=s;

files.SelLength:=l;

end;

end;

////////////////////////////////////////////////////////////////////////////////

// Вырезать

////////////////////////////////////////////////////////////////////////////////

procedure TPhoneBook.CutExecute(Sender: TObject);

begin

if files.SelLength>0 then files.CutToClipboard;

end;

////////////////////////////////////////////////////////////////////////////////

// Вставить

////////////////////////////////////////////////////////////////////////////////

procedure TPhoneBook.PasteExecute(Sender: TObject);

begin

files.PasteFromClipboard;

end;

////////////////////////////////////////////////////////////////////////////////

// Копировать

////////////////////////////////////////////////////////////////////////////////

procedure TPhoneBook.CopyExecute(Sender: TObject);

begin

if files.sellength>0 then files.CopyToClipboard;

end;

////////////////////////////////////////////////////////////////////////////////

// установка активности функций и положения курсора

////////////////////////////////////////////////////////////////////////////////

procedure TPhoneBook.filesKeyUp(Sender: TObject; var Key: Word;

Shift: TShiftState);

begin

if files.SelLength=0 then begin

cut.enabled:=false;

copy.enabled:=false;

AllProper.enabled:=false;

AllInvert.enabled:=false;

AllUpper.enabled:=false;

AllLower.enabled:=false;

end

else begin

cut.enabled:=true;

copy.enabled:=true;

AllProper.enabled:=true;

AllInvert.enabled:=True;

AllUpper.enabled:=True;

AllLower.enabled:=True;

end;

StatusBar1.Panels[2].Text:=inttostr(files.CaretPos.x)+':'+inttostr(files.CaretPos.y+1);

end;

////////////////////////////////////////////////////////////////////////////////

// установка активности функций и положения курсора

////////////////////////////////////////////////////////////////////////////////

procedure TPhoneBook.filesMouseUp(Sender: TObject; Button: TMouseButton;

Shift: TShiftState; X, Y: Integer);

begin

if files.SelLength=0 then begin

cut.enabled:=false;


Подобные документы

  • Обзор и комплексный анализ операционной системы Windows Vista, оценка ее преимуществ и недостатков. Разработка программы, которая реализует алгоритм очереди на 20 элементов. Построение блок-схемы и листинг алгоритма, контрольный пример его работы.

    курсовая работа [4,2 M], добавлен 20.11.2013

  • Основы программирования на 32-битном Ассемблере, разработка с его помощью программы, демонстрирующей работу одного из разделов ОС Windоws. Описание используемых АРI-функций как интерфейса программирования приложений. Листинг программы, результаты работы.

    курсовая работа [164,5 K], добавлен 18.05.2014

  • Операционная система MS-DOS: история и характеристика. Обзор стандартных программ операционной системы Windows. Способы запуска программ. Служебные приложения Windows и их назначение: диспетчер задач, проверка, очистка, дефрагментация и архивация диска.

    реферат [221,4 K], добавлен 06.01.2015

  • Создание программы для хранения и обработки данных о съеме/сдаче жилья. Написание программы на языке C++ с использованием библиотеки Qt; использование исходного кода для создания приложения под Windows, Linux, Mac OS X без дополнительных изменений кода.

    курсовая работа [60,4 K], добавлен 07.03.2013

  • Характеристика операционной системы. История развития Windows. Сравнительная характеристика версий Windows. Элементы и инструменты Windows XP. Прикладные программы в Windows XP. Работа настольных и портативных компьютеров под управлением Windows.

    доклад [19,1 K], добавлен 16.10.2011

  • Программа операционной системы. Перемещение и копирование объектов. Окна Windows, операционное меню, настройка свойств папки, вызов справки Windows. Работа с дисками, папками и файлами, с приложениями и документами. Стандартные программы Windows.

    контрольная работа [21,9 K], добавлен 29.01.2011

  • Технические характеристики игрового приложения для операционной системы Microsoft Windows. Обоснование выбора состава технических и программных средств. Характеристика процесса разработки программы "Угадайка", ее спецификация, описание и тестирование.

    курсовая работа [422,4 K], добавлен 10.06.2011

  • Доступ пользователей сети к электронным сообщениям, хранящимся на сервере. Описание программы, аутентификация простая, APOP и AUTH-аутентификация. Реализация функций, руководство пользователя, алгоритмы функционирования программы, графический интерфейс.

    курсовая работа [1,1 M], добавлен 13.11.2009

  • Реализация программы, созданной средствами языка C#. Предназначение Windows-приложения для решения комплекса задач. Определение состава форм с графиком функции. Вычисление коэффициентов полинома. Создание текстового поля для введения корней многочлена.

    курсовая работа [234,8 K], добавлен 13.11.2016

  • Создание системной утилиты, работающей с реестром ОС Windows; структура, функции и роль реестра. Разработка программного обеспечения: интерфейс, структурная схема вызовов окон приложений; реализация и тестирование программы, процедуры; листинг модулей.

    курсовая работа [1,2 M], добавлен 01.06.2013

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.