Создание прикладных 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 элементов)
Обзор и комплексный анализ операционной системы 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