Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ПЗ Бобби.docx
Скачиваний:
3
Добавлен:
17.09.2019
Размер:
2.15 Mб
Скачать

6 Применение

6.1 Установка программы и условия использования

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

Необходимо запустить исполняемый файл BuffON – Setup.exe для установки программы на компьютер. Откроется окно приветствия установщика программ (рисунок 6.1).

Рисунок 6.1 – Окно установки программы

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

При нажатии на кнопку «Далее» откроется окно следующего этапа.

На следующем этапе установки программы (рисунок 6.2) необходимо выбрать директорию, в которую будет установлена программа BuffON. По умолчанию каталогом установки является C:\Program Files (x86)\PenoPlast\BuffON\. Для выбора другой директории необходимо нажать кнопку «Обзор» и выбрать необходимый каталог.

Рисунок 6.2 – Выбор каталога

При нажатии на кнопку «Назад» появится окно предыдущего этапа установки, а при нажатии на кнопку «Далее» - окно следующего этапа.

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

Рисунок 6.3 – Готовность к установке

При нажатии на кнопку «Назад» появится окно предыдущего этапа установки, а при нажатии на кнопку «Установить» начнётся процесс установки программы BuffON.

При завершении установки появиться новое окно (рисунок 6.4), сообщающее о том, что программа установлена.

Рисунок 6.4 – Завершение установки

Для выхода из установщика программы BuffON необходимо нажать кнопку «Готово».

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

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

6.2 Руководство пользователя

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

Рисунок 6.5 – Главное окно программы

Чтобы добавить файлы в буфер обмена с помощью данной программы можно использовать один из трёх основных способов: перетаскивание файлов, использование клавиш быстрого копирования, использование пункта «Копировать» контекстного меню файлов.

Чтобы добавить файлы с помощью перетаскивания (функция Drag & Drop), необходимо:

  1. Выделить нужные файлы в любом окне Проводника Windows;

  2. Зажать левую кнопку мыши на любом из выделенных файлов;

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

Чтобы добавить файлы, используя клавиши быстрого копирования Ctrl+C, необходимо следующее:

  1. Выделить необходимые файлы в любом окне Проводника Windows;

  2. Нажать комбинацию клавиш Ctrl+C.

Чтобы добавить файлы с помощью пункта контекстного меню «Копировать», необходимо:

  1. Выделить необходимые файлы в любом окне Проводника Windows;

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

  3. Выбрать пункт «Копировать».

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

Для скопированных в буфер обмена файлов можно просмотреть необходимую информацию, расположенную в информационном блоке под списком файлов (рисунок 6.6), а именно:

- место хранения данного файла на диске (путь к файлу);

- имя файла и расширение;

- занимаемый объем в памяти;

- системную иконку файла;

- общее количество всех файлов.

Рисунок 6.6 – Информационный блок

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

Рисунок 6.7 – Отображение информации для одного файла, одной папки и нескольких файлов соответственно

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

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

Занесенные в буфер обмена с помощью программы BuffON файлы можно извлечь тремя способами: перетаскиванием, используя клавиши быстрой вставки, с помощью пункта «Вставить» контекстного меню Проводника.

Чтобы извлечь файлы, используя функцию Drag & Drop (перетаскивание), необходимо выполнить следующие шаги:

  1. Выделить необходимые элементы в списке файлов программы;

  2. Нажать и удерживать левую кнопку мыши на любом из выделенных элементов;

  3. Продолжая удерживать левую кнопку мыши переместить курсор в область любого окна Проводника Windows и отпустить кнопку.

Чтобы извлечь файлы, используя клавиши быстрой вставки Ctrl+V необходимо:

  1. Выделить необходимые элементы в списке файлов программы;

  2. Сделать активным то окно Проводника, в которое планируется вставить файлы простым нажатием кнопкой мыши на окне;

  3. Нажать комбинацию клавиш Ctrl+V на клавиатуре.

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

  1. Выделить необходимые элементы в списке файлов программы;

  2. Сделать активным то окно Проводника, в которое планируется вставить файлы простым нажатием кнопкой мыши на окне;

  3. Правой кнопкой мыши на окне Проводника вызвать контекстное меню и выбрать пункт «Вставить».

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

Для отображения окна поверх всех окон служить кнопка на панели инструментов. При повторном нажатии на эту кнопку главное окно будет иметь возможность перемещаться на задний план.

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

Данную информацию также можно найти в окне справки программы, нажав кнопку на панели инструментов, а также нажав клавишу F1 на клавиатуре.

Заключение

Курсовой проект носит учебный характер. В ходе её были закреплены, углублены и систематизированы имеющиеся знания и практические умения, полученные при изучении дисциплины КПиЯП; привиты навыки самостоятельной разработки программных средств в среде разработки приложений Visual Studio.NET на языке программирования C# 4.0; закреплены навыки разработки удобного интерфейса пользователя, навигации и системы помощи.

Программа соответствует всем требованиям, которые были поставлены в начале проектирования, а именно:

- быстродействие;

- наглядность;

- логичность;

- лёгкость в использовании;

- компактность.

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

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

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

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

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

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

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

Список использованных источников

  1. Биллиг В. А. Основы программирования на C#/ В.А. Биллиг. — М.: Изд-во «Интернет-университет информационных технологий — ИНТУИТ.ру», 2006. — 488 c.

  2. Шилдт Г. C# 4.0: полное руководство/ Г. Шилдт. – М.: ООО «И.Д. Вильямс», 2011. – 1056 с.

  3. Культин Н. Б. Microsoft Visual Studio C# в задачах и примерах/ Н.Б. Культин. – СПб.: БХВ-Петербург, 2009. – 320с.

  4. Ватсон Б. C# 4.0 на примерах/ Б. Ватсон. – СПб.: БХВ-Петербург, 2011. – 608 с.

  5. Нейгел К. C# 4.0 и платформа .NET 4 для профессионалов/ К. Нейгел. – М.: ООО «И.Д. Вильямс», 2011. – 1440 с.

  6. Петцольд Ч. Программирование для MS Windows на C#. Том 1/ Ч. Петцольд. — М.: Издательско-торговый дом «Русская Редакция», 2002. — 576 с.

  7. Петцольд Ч. Программирование для MS Windows на C#. Том 2/ Ч. Петцольд. — М.: Издательско-торговый дом «Русская Редакция», 2002. — 624 с.

  8. Агуров П.В. C#. Сборник рецептов/ П. В. Агуров. – СПб.: БХВ-Петербург, 2007. – 432 с.

  9. Лабор В. В. Си Шарп: Создание приложений для Windows/ В. В. Лабор. – Мн.: Харвест, 2003. – 384 с.

  10. Шилдт Г. Полный справочник по C#/ Г. Шилдт. — М.: Издательский дом «Вильямс», 2004. — 752 с.

Приложение А

(справочное)

Листинг программы

using System;

using System.Collections.Generic;

using System.Linq;

using System.Windows.Forms;

namespace BuffProgramm

{

static class Program

{

/// <summary>

/// Главная точка входа для приложения.

/// </summary>

[STAThread]

static void Main()

{

if (System.Diagnostics.Process.GetProcessesByName(Application.ProductName).Length > 1)

{

return;

}

else

{

Application.EnableVisualStyles();

Application.SetCompatibleTextRenderingDefault(false);

Application.Run(new BuffON());

}

}

}

}

using System;

using System.Collections.Generic;

using System.ComponentModel;

using System.Data;

using System.Drawing;

using System.Linq;

using System.Text;

using System.Windows.Forms;

using System.IO;

using System.Reflection;

using System.Diagnostics;

using System.Runtime.InteropServices;

using System.Drawing.Drawing2D;

using System.Resources;

using System.Threading;

namespace BuffProgramm

{

public partial class BuffON : Form

{

ListView focusedListView; //listView с фокусом

ListView.SelectedListViewItemCollection selectedItems;

DirectoryInfo directory;

StreamReader settingUp;

StreamWriter settingDown;

long fullSizeAll = 0;

public BuffON()

{

InitializeComponent();

//начальные размеры окна

this.Height = 482;

this.Width = 268;

settingUp = new StreamReader("setting.bfn");

if (settingUp.ReadLine() == "0")

{

TopMost = false;

поверхToolStripMenuItem2.Text = "Поверх всех окон ВКЛ";

}

else

{

TopMost = true;

поверхToolStripMenuItem2.Text = "Поверх всех окон Откл";

}

settingUp.Close();

settingDown = new StreamWriter("setting.bfn");

Location = new Point(SystemInformation.WorkingArea.Width - Width, SystemInformation.WorkingArea.Height - Height);

LabelVisible(false, false, false);

pictureBox1.BackColor = Color.FromArgb(0, 0, 0, 0);

pictureBox1.Size = new Size(0, 0);

SetLocations();

selectedItems = null;

focusedListView = listViewAll;

Clipboard.Clear();

IContainer components = new Container();

ResourceManager resources = new ResourceManager(typeof(BuffON));

ImageList myImages = new ImageList(components);

tabControl1.ImageList = myImages;

tabPageAll.ImageIndex = 0;

tabPageAudio.ImageIndex = 1;

tabPageVideo.ImageIndex = 2;

tabPageImage.ImageIndex = 3;

tabPageText.ImageIndex = 4;

myImages.Images.Add("all",Image.FromFile("Icons\\all.png"));

myImages.Images.Add("music", Image.FromFile("Icons\\music.png"));

myImages.Images.Add("video", Image.FromFile("Icons\\video.png"));

myImages.Images.Add("image", Image.FromFile("Icons\\image.png"));

myImages.Images.Add("document", Image.FromFile("Icons\\document.png"));

myImages.ImageSize = new Size(16,16);

myImages.TransparentColor = Color.FromArgb(0, 0, 0, 0);

}

//получение данных

void InDaList( string[] files)

{

int c = 0;

foreach (string x in files)

{

foreach (ListViewItem item in listViewAll.Items)

{

if (x == item.Text)

c++;

}

if (c == 0)

{

listViewAll.Items.Add(x);

}

fullSizeAll += Calculating.GetSizeOfDirectory(x);

}

files = null;

}

//установка координат объектов

void SetLocations()

{

label1.Location = new Point(splitContainer1.Panel2.Padding.Right+pictureBox1.Width+pictureBox1.Margin.Right+label1.Margin.Left, label1.Margin.Top);

label2.Location = new Point(splitContainer1.Panel2.Padding.Right + pictureBox1.Width + pictureBox1.Margin.Right + label2.Margin.Left, label2.Location.Y);

label3.Location = new Point(splitContainer1.Panel2.Padding.Right + pictureBox1.Width + pictureBox1.Margin.Right + label3.Margin.Left, label3.Location.Y);

label4.Location = new Point(splitContainer1.Panel2.Padding.Right + pictureBox1.Width + pictureBox1.Margin.Right + label4.Margin.Left, label4.Location.Y);

pathLink.Location = new Point(label1.Location.X+label1.Width+label1.Margin.Right+pathLink.Margin.Left, label1.Margin.Top);

fileName.Location = new Point(label2.Location.X+label2.Width+label2.Margin.Right+fileName.Margin.Left, label2.Location.Y);

fileSize.Location = new Point(label3.Location.X+label3.Width+label3.Margin.Right+fileSize.Margin.Left, label3.Location.Y);

fileCount.Location = new Point(label4.Location.X + label4.Width + label4.Margin.Right + fileCount.Margin.Left, label4.Location.Y);

pathLink.MaximumSize = new Size(splitContainer1.Panel2.Width - pathLink.Location.X - pathLink.Margin.Right - splitContainer1.Panel2.Margin.Left, pathLink.Height);

fileName.MaximumSize = new Size(splitContainer1.Panel2.Width - fileName.Location.X - fileName.Margin.Right - splitContainer1.Panel2.Margin.Left, fileName.Height);

}

//отображение лейблов

void LabelVisible(bool f1,bool f2, bool f3)

{

//label1 и pathLink

label1.Visible = f1;

pathLink.Visible = f1;

//label2 и fileName

label2.Visible = f2;

fileName.Visible = f2;

//label3 и fileSize

label3.Visible = f3;

fileSize.Visible = f3;

}

#region DragNDrop

private void listViewAll_DragEnter(object sender, DragEventArgs e)

{

e.Effect = DragDropEffects.All;

}

//перетаскивание из Проводника на форму

private void listViewAll_DragDrop(object sender, DragEventArgs e)

{

string[] files;

focusedListView = listViewAll;

toolStrip1.Items[0].Enabled = true;//выделение

toolStrip1.Items[3].Enabled = true;//удаление

toolStrip1.Items[4].Enabled = true;//очистка

files=(string[])e.Data.GetData(DataFormats.FileDrop,false);

InDaList(files);

}

//переаскивание из списков в Проводник

private void listViewAll_ItemDrag(object sender, ItemDragEventArgs e)

{

ListView.SelectedListViewItemCollection files = focusedListView.SelectedItems;

string[] names = new string[files.Count];

int i = 0;

foreach (ListViewItem x in files)

{

names[i++] = x.Text;

}

if (files != null)

{

Clipboard.Clear();

DoDragDrop(new DataObject(DataFormats.FileDrop, names), DragDropEffects.Copy | DragDropEffects.Move);

i = 0;

foreach (ListViewItem x in files)

{

if (x.Checked)

{

try

{

new FileInfo(x.Text).Delete();

}

catch

{

continue;

}

}

}

}

}

#endregion

#region открытие файла или директории

//открытие файла или директории

private void listViewAll_ItemActivate(object sender, EventArgs e)

{

if (focusedListView.FocusedItem.Checked)

focusedListView.FocusedItem.Checked = false;

else

focusedListView.FocusedItem.Checked = true;

Process.Start(focusedListView.FocusedItem.Text);

}

//переход по ссылке

private void pathLink_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)

{

Process.Start(pathLink.Text);

}

#endregion

//отметка для перемещения

private void listViewAll_ItemChecked(object sender, ItemCheckedEventArgs e)

{

if (e.Item.Checked)

e.Item.Selected = true;

else e.Item.Selected = false;

toolStrip1.Items[1].Text = focusedListView.SelectedItems.Count.ToString();

ShowInfo(focusedListView.SelectedItems.Count);

if (focusedListView.SelectedItems.Count > 0)

ClipboardIn();

}

//сортировка по расширениям и фокусировка

private void tabControl1_Selecting(object sender, TabControlCancelEventArgs e)

{

Extention GetData = new Extention();

switch (e.TabPageIndex)

{

case 0:

{

focusedListView = listViewAll;

focusedListView.Focus();

break;

}

case 1:

{

focusedListView = listViewAudio;

focusedListView.Focus();

GetData.getDataIntoListView(listViewAll, listViewAudio, e.TabPageIndex - 1);

break;

}

case 2:

{

focusedListView = listViewVideo;

focusedListView.Focus();

GetData.getDataIntoListView(listViewAll, listViewVideo, e.TabPageIndex - 1);

break;

}

case 3:

{

focusedListView = listViewImage;

focusedListView.Focus();

GetData.getDataIntoListView(listViewAll, listViewImage, e.TabPageIndex - 1);

break;

}

case 4:

{

focusedListView = listViewText;

focusedListView.Focus();

GetData.getDataIntoListView(listViewAll, listViewText, e.TabPageIndex - 1);

break;

}

}

}

#region привязка к границам и сокрытие формы

//привязка к границам экрана

private void Form1_Move(object sender, EventArgs e)

{

const int magnetPixels = 15;

int x = this.Location.X;

int y = this.Location.Y;

int ww = Screen.GetWorkingArea(this).Width;

int hh = Screen.GetWorkingArea(this).Height;

//горизонталь

if (x <= magnetPixels) x = 0;

else if ((ww - this.Location.X - this.Width) <= magnetPixels) x = ww - this.Width;

//вертикаль

if (y <= magnetPixels) y = 0;

else if ((hh - this.Location.Y - this.Height) <= magnetPixels) y = hh - this.Height;

this.Location = new Point(x, y);

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

}

Point Loc;

//сокрытие формы

private void Form1_Resize(object sender, EventArgs e)

{

if (FormWindowState.Minimized == WindowState)

Hide();

}

//двойной клик по иконке в трее

private void notifyIcon1_DoubleClick(object sender, EventArgs e)

{

Show();

WindowState = FormWindowState.Normal;

}

//одиночный клик по иконке в трее

private void notifyIcon1_MouseClick(object sender, MouseEventArgs e)

{

TopMost = true;

TopMost = false;

}

//меню для иконки в трее

//выход

private void выходToolStripMenuItem_Click(object sender, EventArgs e)

{

Close();

}

//открыть/скрыть

private void открытьBuffONToolStripMenuItem_Click(object sender, EventArgs e)

{

if (WindowState != FormWindowState.Normal)

{

открытьBuffONToolStripMenuItem.Text = "Скрыть BuffProgramm";

Show();

WindowState = FormWindowState.Normal;

}

else

{

открытьBuffONToolStripMenuItem.Text = "Открыть BuffProgramm";

WindowState = FormWindowState.Minimized;

}

}

#endregion

#region панель инструментов

bool selectedAll = false;

void SelectAll()

{

foreach (ListViewItem x in focusedListView.Items)

{

x.Selected = true;

focusedListView.EnsureVisible(x.Index);

selectedAll = true;

toolStrip1.Items[0].ToolTipText = "Снять выделение";

//размер всех файлов

fullSizeAll = 0;

foreach (ListViewItem item in focusedListView.Items)

{

fullSizeAll += Calculating.GetSizeOfDirectory(item.Text);

}

fileSize.Text = Calculating.ToByte(fullSizeAll);

LabelVisible(false, false, true);

pictureBox1.Refresh();

SetLocations();

ClipboardIn();

}

}

private void выделитьВсёToolStripButton_Click(object sender, EventArgs e)

{

try

{

if (!selectedAll)

{

//выделяем все файлы

SelectAll();

}

else

{

//отменяем выделение

focusedListView.SelectedItems.Clear();

selectedItems.Clear();

LabelVisible(false, false, false);

selectedAll = false;

toolStrip1.Items[0].ToolTipText = "Выделить все элементы";

}

toolStrip1.Items[1].Text = focusedListView.SelectedItems.Count.ToString();

}

catch

{

}

}

//очистка всех listView

void ListsClear()

{

listViewAll.Items.Clear();

listViewAudio.Items.Clear();

listViewVideo.Items.Clear();

listViewImage.Items.Clear();

listViewText.Items.Clear();

}

//очистка остального

void ClearAll()

{

LabelVisible(false, false, false);

toolStrip1.Items[1].Text = "0";

fullSizeAll = 0;

Clipboard.Clear();

if (selectedItems != null)

selectedItems.Clear();

toolStrip1.Items[0].Enabled = false;//выделение

toolStrip1.Items[3].Enabled = false;//удаление

toolStrip1.Items[4].Enabled = false;//очистка

pictureBox1.Refresh();

}

private void очисткаToolStripButton_Click(object sender, EventArgs e)

{

ListsClear();

ClearAll();

}

private void справкаToolStripButton1_Click(object sender, EventArgs e)

{

Process.Start("BuffON Help.chm");

}

private void toolStripMenuItem2_Click(object sender, EventArgs e)

{

if (TopMost)

{

TopMost = false;

поверхToolStripMenuItem2.Text = "Поверх всех окон ВКЛ";

}

else

{

TopMost = true;

поверхToolStripMenuItem2.Text = "Поверх всех окон ОТКЛ";

}

}

private void удалитьToolStripButton2_Click(object sender, EventArgs e)

{

Delete();

}

#endregion

#region в буфер/из буфера

//в буфер

private void ClipboardIn()

{

System.Collections.Specialized.StringCollection filesCopy= new System.Collections.Specialized.StringCollection();

if (selectedItems!=null)

{

foreach (ListViewItem x in selectedItems)

{

filesCopy.Add(x.Text);

}

Clipboard.SetFileDropList(filesCopy);

}

}

//показать всю информацию о файлах

void ShowInfo(int selCount)

{

//для одного

if (selCount == 1)

{

ClipboardIn();

FileInfo file = new FileInfo(focusedListView.SelectedItems[0].Text);

try

{

long a = file.Length;

Bitmap pic;

try

{

pic = new Bitmap(file.FullName);

}

catch

{

Icon ico = System.Drawing.Icon.ExtractAssociatedIcon(file.FullName);

pic = ico.ToBitmap();

}

DrawMiniature.DrawingFile(pictureBox1, pic);

pathLink.Text = file.DirectoryName;

fileName.Text = file.Name;

fileSize.Text = Calculating.ToByte(file.Length);

SetLocations();

LabelVisible(true, true, true);

DrawMiniature.DrawingFile(pictureBox1, pic);

pic.Dispose();

}

catch

{

pictureBox1.Size = new System.Drawing.Size(0, 0);

pictureBox1.Refresh();

SetLocations();

directory = new DirectoryInfo(file.FullName);

pathLink.Text = directory.FullName;

fileName.Text = "";

fileSize.Text = Calculating.ToByte(Calculating.CountFiles(directory.FullName));

LabelVisible(true, false, true);

}

}

//для нескольких

else if (selCount > 1)

{

ClipboardIn();

fullSizeAll = 0;

foreach (ListViewItem item in focusedListView.SelectedItems)

{

fullSizeAll += Calculating.GetSizeOfDirectory(item.Text);

}

pictureBox1.Size = new System.Drawing.Size(0, 0);

pictureBox1.Refresh();

SetLocations();

pathLink.Text = "";

fileName.Text = "";

fileSize.Text = Calculating.ToByte(fullSizeAll);

LabelVisible(false, false, true);

}

// для нуля

else

{

pictureBox1.Size = new System.Drawing.Size(0, 0);

pictureBox1.Refresh();

SetLocations();

pathLink.Text = "";

fileName.Text = "";

fileSize.Text = "";

LabelVisible(false,false,false);

}

}

//отпускание кнокпи мышки

private void listViewAll_MouseUp(object sender, MouseEventArgs e)

{

selectedItems = null;

selectedItems = focusedListView.SelectedItems;

toolStrip1.Items[1].Text = selectedItems.Count.ToString();

ShowInfo(focusedListView.SelectedItems.Count);

}

//нажатие кнопки мышки

private void listViewAll_MouseDown(object sender, MouseEventArgs e)

{

Clipboard.Clear();

pictureBox1.Refresh();

pictureBox1.Size = new System.Drawing.Size(0, 0);

pathLink.Text = "";

fileName.Text = "";

fileSize.Text = "";

LabelVisible(false, false, false);

}

//удаление несуществующих файлов

void IsExist()

{

fileCount.Text = listViewAll.Items.Count.ToString();

if (focusedListView.Items != null)

{

foreach (ListViewItem x in focusedListView.Items)

{

FileInfo file;

file = new FileInfo(x.Text);

try

{

long a = file.Length;

if (!file.Exists)

{

focusedListView.Items[x.Index].Remove();

}

}

catch

{

directory = new DirectoryInfo(x.Text);

if (!directory.Exists)

{

focusedListView.Items[x.Index].Remove();

}

directory = null;

}

file = null; }

}

}

//проверка буфера

private void timer1_Tick(object sender, EventArgs e)

{

IsExist();

System.Collections.Specialized.StringCollection files =Clipboard.GetFileDropList();

int c = 0;

if (files.Count!=0)

{

toolStrip1.Items[0].Enabled = true;

toolStrip1.Items[3].Enabled = true;

toolStrip1.Items[4].Enabled = true;

timer2.Stop();

foreach (string x in files)

{

foreach (ListViewItem item in listViewAll.Items)

{

if (x == item.Text)

c++;

}

if (c == 0)

{

listViewAll.Items.Add(x);

}

}

timer2.Start();

}

}

//

private void timer2_Tick(object sender, EventArgs e)

{

timer1.Stop();

if (focusedListView.Items != null)

{

if (focusedListView.SelectedItems.Count == 0 && focusedListView.Items.Count != 0)

{

System.Collections.Specialized.StringCollection filesCopy = new System.Collections.Specialized.StringCollection();

foreach (ListViewItem x in focusedListView.Items)

{

filesCopy.Add(x.Text);

}

Clipboard.SetFileDropList(filesCopy);

}

}

timer1.Start();

}

#endregion

#region обработка клавиш

//удаление выделеных элементов

void Delete()

{

if (focusedListView.SelectedItems.Count != 0)

{

if (focusedListView.SelectedItems.Count == focusedListView.Items.Count)

{

ListsClear();

ClearAll();

}

Clipboard.Clear();

foreach (ListViewItem x in focusedListView.SelectedItems)

{

x.Remove();

}}}

private void listViewAll_KeyDown(object sender, KeyEventArgs e)

{

//удаление из списка

if (e.KeyCode == Keys.Delete)

{

Delete();

}

}

private void listViewAll_KeyUp(object sender, KeyEventArgs e)

{

toolStrip1.Items[1].Text = focusedListView.SelectedItems.Count.ToString();

ShowInfo(focusedListView.SelectedItems.Count);

if (focusedListView.SelectedItems.Count > 0)

ClipboardIn();

}

#endregion

#region ToolTip

private void pathLink_MouseHover(object sender, EventArgs e)

{

toolTip1.Show(pathLink.Text, pathLink);

}

private void fileName_MouseHover(object sender, EventArgs e)

{

toolTip1.Show(fileName.Text, fileName);

}

private void fileSize_MouseHover(object sender, EventArgs e)

{

toolTip1.Show(fileSize.Text, fileSize);

}

#endregion

}

}

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

using System.IO;

using System.Threading;

using System.Windows.Forms;

namespace BuffProgramm

{

class Calculating

{

//всех выбранных файлов

public static long GetSizeOfDirectory(string x)

{

FileInfo file;

file = new FileInfo(x);

try

{

long a = file.Length;

return file.Length;

}

catch

{

return CountFiles(x);

}

}

//всей папки

public static long CountFiles(string path)

{

DirectoryInfo directory;

long count = 0;

directory = new DirectoryInfo(path);

foreach (FileInfo x in directory.GetFiles())

{

count += x.Length;

}

foreach (DirectoryInfo x in directory.GetDirectories())

{

count += CountFiles(x.FullName);

}

return count;

}

//перевод в байты

public static string ToByte(long size)

{

string suffix = " Б";

double newsize = 0;

if (size > Math.Pow(2, 0) && size < Math.Pow(2, 10))

{

suffix = " Б";

newsize = size;

}

else if (size > Math.Pow(2, 10) && size < Math.Pow(2, 20))

{

suffix = " КБ";

newsize = size / Math.Pow(2, 10);

}

else if (size > Math.Pow(2, 20) && size < Math.Pow(2, 30))

{

suffix = " МБ";

newsize = size / Math.Pow(2, 20);

}

else if (size > Math.Pow(2, 30) && size < Math.Pow(2, 40))

{

suffix = " ГБ";

newsize = size / Math.Pow(2, 30);

}

else if (size > Math.Pow(2, 40) && size < Math.Pow(2, 50))

{

suffix = " ТБ";

newsize = size / Math.Pow(2, 40);

}

return (Math.Round(newsize,2).ToString() + suffix);

}

}

}

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

using System.Drawing.Drawing2D;

using System.Drawing;

using System.Windows.Forms;

namespace BuffProgramm

{

class DrawMiniature

{

public static void DrawingFile(PictureBox Box, Bitmap pict)

{

Graphics grfx = Box.CreateGraphics();

Box.Refresh();

if (pict != null)

{

double imageHeight = pict.Height;

double imageWidth = pict.Width;

double k;

int side = 45;

if (imageHeight > side)

{

k = side / imageHeight;

imageHeight = side;

imageWidth *= k;

if (imageWidth > side)

{

k = side / imageWidth;

imageWidth = side;

imageHeight *= k;

}

}

else if (imageWidth > side)

{

k = side / imageWidth;

imageWidth = side;

imageHeight *= k;

if (imageHeight > side)

{

k = side / imageHeight;

imageHeight = side;

imageWidth *= k;

}

}

Box.Size = new Size((Int32)imageWidth, (Int32)imageHeight);

//SetLocations();

grfx.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighSpeed;

grfx.DrawImage(pict, new Rectangle(0, 0, Box.Size.Width, Box.Size.Height));

}

else

{

Box.Size = new Size(0, 0);

}

}

}

}

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

using System.Windows.Forms;

using System.IO;

namespace BuffProgramm

{

class Extention

{

string[] Audio = { ".aac", ".ac3", ".ape",

".cda", ".fla", ".flac",

".kar", ".m4a", ".m4b",

".mac", ".mid", ".midi",

".mp+", ".mp1", ".mp2",

".mp3", ".mpc", ".oga",

".ogg", ".rmi", ".tta",

".wav", ".wma" };

string[] Video = { ".3g2",".3gp",".3gp2",

".3gpp",".amv",".asf",

".avi",".avi",".dat",

".dpg",".evo",".flv",

".ifo",".k3g",".m1v",

".m2t",".m2ts",".mkv",

".mov",".mp2v",".mp4",

".mpe",".mpeg",".mpg",

".mpv2",".mts",".nsv",

".ogm",".ogv",".qt",

".rm",".rmvb",".rmp",

".tp",".tpr",".ts",

".vob",".webm",".wm",

".wmp",".wmv" };

string[] Image = { ".jpg", ".jpeg", ".gif", ".bmp", ".png" };

string[] Text = { ".doc", ".txt", ".rtf", ".docx",".pdf",".djvu"};

readonly string[][] s=new string[4][];

public Extention()

{

s[0] = Audio;

s[1] = Video;

s[2] = Image;

s[3] = Text;

}

//cортировка по расширениям

public void getDataIntoListView(ListView listViewFrom, ListView listViewIn, int Index)

{

listViewIn.Items.Clear();

foreach (ListViewItem x in listViewFrom.Items)

{

FileInfo file;

file = new FileInfo(x.Text);

foreach (string y in s[Index])

{

if (file.Extension == y)

{

listViewIn.Items.Add(x.Text);

break;

}

}

file = null;

}

}

}

}

Приложение Б

(справочное)

Диаграмма классов

Приложение В

(справочное)

Диаграмма вариантов использования

68