Об интерфейсе

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

Это делат программу весьма простой в использовании, а алгоритм работы простым в понимании. Вся необходимая для работы информация представлена в диалогах, о неправильных ситуциях программа сообщает пользователю и это единственный и законный случай нарушения свободы действий пользователя. Далее приводится исходный текст программы с обширными комментариями, в которых делается упор не на особенности языка программирования и конкретной реализации, а на представление составляющих файловой системы как объектов, а процедур и функций как методов, применяемых к этим объектам. Макросы, вызываемые событиями Public Type FileID Тип, описывающий файл имя, размер и точка входа в FAT Name As String Size As Integer First As Integer End Type Sub PressAddFile Макрос, вызываемый кнопкой Добавить Файл DialogSheetsAdd. EditBoxesName. Text подготовка диалога Добавление файла DialogSheetsAdd. EditBoxesSize. Text очистка полей ввода SheetsAdd. Show Вызов диалога Добавление файла With DialogSheetsAdd Проверка на правильность введенных данных If. EditBoxesName. Text Or. EditBoxesSize. Text Or. EditBoxesSize. Text 0 Then Exit Sub End With Dim NewFile As FileID Экземпляр переменной с описанием создаваемого файла With DialogSheetsAdd NewFile. Name. EditBoxesName. Text NewFile. Size. EditBoxesSize. Text End With Call AddFileNewFile Вызов процедуры добавления файла Refresh обновили графическое изображение размещения файлов End Sub Sub PressDeleteFile в основном рабочем листе нажата кнопка Удалить Файл temp 4 With DialogSheetsDelete подготавливаем к работе диалог Delete. ListBoxesName. RemoveAllItems While SheetsSheet. Cellstemp 2 заполняем список имеющимися в каталоге файлами. ListBoxesName. AddItem TextWorksheetsSheet. Cellstemp 2.Value Indextemp - 3 temp temp 1 Wend. Show показываем диалог Delete If. ListBoxesName 0 Then Exit Sub Dim File As FileID переменная для идентификатора удаляемого файла. Передается процедуре DeleteFile File. Name SheetsSheet. Cells. ListBoxesName 3 2 File. Size SheetsSheet. Cells. ListBoxesName 3 3 File. First SheetsSheet. Cells. ListBoxesName 3 4 Call DeleteFileFile Вызываем процедуру удаления файла Refresh обновили графическое изображение размещения файлов End With End Sub Sub PressRemakeFile нажата кнопка Изменитьразмерыфайла по этому поводу подготавливаем к работе диалог Remake temp 4 With DialogSheetsRemake. ListBoxesName. RemoveAllItems. EditBoxesSize. Text While SheetsSheet. Cellstemp 2 заполняем список имеющимися в каталоге файлами. ListBoxesName. AddItem TextWorksheetsSheet. Cellstemp 2.Value Indextemp - 3 temp temp 1 Wend. Show показываем диалог Remake при нажатии кнопки OK в диалоге запустится макрос DialogRemakePressOK End With End Sub Sub DialogRemakePressName в диалоге Перезапись выбран файл из списка With DialogSheetsRemake и поэтому в диалоге Перезапись обновляем поле размера файла в соотв. с выбранным файлом. EditBoxesSize. Text SheetsSheet. Cells3 .ListBoxesName. ListIndex 3.Value End With End Sub Sub DialogRemakePressOK в диалоге изменение размеров файла нажата кнопка OK With DialogSheetsRemake. Hide убрали с экрана диалог If. ListBoxesName. ListIndex 0 Then Exit Sub Dim File As FileID Экземпляр типа FileID - идентификатор файла File. Name SheetsSheet. Cells3 .ListBoxesName. ListIndex 2.Text File. Size SheetsSheet. Cells3 .ListBoxesName. ListIndex 3.Value File. First SheetsSheet. Cells3 .ListBoxesName. ListIndex 4.Value проверка на наличие изменений If. EditBoxesSize. Text File. Size Or. EditBoxesSize. Text 0 Then Exit Sub проверка на помещаемость If. EditBoxesSize. Text FreeSize File. Size - 1 8 1 8 Then temp MsgBoxФайл File. Name размером. EditBoxesSize. Text не может быть размещен vbExclamation Перезапись файла Exit Sub End If перезапись удаление, а затем запись файла, но с другим размером Call DeleteFileFile удалили File. Size. EditBoxesSize. Text изменили размер Call AddFileFile записали Refresh обновили таблицу распределения файлов End With End Sub Sub Visualisation визуализация файла temp 4 With DialogSheetsVisualisation подготавливаем к работе диалог Visualisation. ListBoxesName. RemoveAllItems While SheetsSheet. Cellstemp 2 заполняем список имеющимися в каталоге файлами. ListBoxesName. AddItem TextWorksheetsSheet. Cellstemp 2.Value Indextemp - 3 temp temp 1 Wend. Show показываем диалог Visualisation If. ListBoxesName 0 Then Exit Sub выбрали ли что-нибудь Dim NumberFile As Integer NumberFile. ListBoxesName. ListIndex номер по каталогу визуализируемого файла SheetsSheet. CellsNumberFile 3 2.ShowDependents показываем линии, проходящие от ячейки каталога с именем визуализируемого файла до всех занятых им ячеек области файлов End With End Sub Базовые события Const ColorOfPaper 33 цвет фона области файлов Const ColorUsedPartOfFAT 2 цвет занятой части области файлов Sub AddFileNewFile As FileID Процедурa добавления файла Проверка наличия присутствия в достаточном для создания файла количестве свободного пространства If NewFile. Size FreeSize Then temp MsgBoxФайл NewFile. Name не может быть размещен из-за нехватки свободного места. vbExclamation Процесс создания файла Exit Sub End If count NewFile. Size счетчик уже записанной части файла NewFile. First NextFreeCellFAT задание точки входа в FAT для данного файла Dim PreviousCellFAT As Integer Номер последней модифицировавшейся ячейки FAT PreviousCellFAT NextFreeCellFAT Call ToFATPreviousCellFAT 0 Записали в нее ноль-признак того, что это последний пока кластер данного файла count count - 8 как минимум 8 байт файла уже размещены While count 0 пока весь файл не разместился Call ToFATPreviousCellFAT NextFreeCellFAT в последнюю модифицировавшуюся ячейку FAT вносим указатель на следующую свободную ячейку PreviousCellFAT NextFreeCellFAT Call ToFATPreviousCellFAT 0 Записали в нее ноль-признак того, что это последний пока кластер данного файла count count - 8 как минимум 8 байт файла уже размещены Wend Call AddFileToCatalogNewFile добавили файл в каталог End Sub Sub DeleteFileFile As FileID процедура удаляет заданный файл без разговоров Call DeleteCellFromFATFile. First Call DeleteFileFromCatalogFile. Name End Sub Sub Refresh обновление изображения области файлов With SheetsSheet. RangeF6U13.Interior. ColorIndex ColorOfPaper окрасили область файлов в цвет фона. RangeF6U13.Value очистили все ячейки области файлов. RangeF6U13.NumberFormat 0 формат числа для области файлов-целые числа. ClearArrows убрали все стрелки Dim PointerToFile As String NumberFile 1 While. CellsNumberFile 3 2 последовательно просматриваем область файлов. Для каждого файлавыполняется следующая процедура NumberCellFAT .CellsNumberFile 3 4 точка входа в FAT N-ного файла PointerToFile R NumberFile 3 C2 указатель на ячейку каталога с именем N-ного файла Relation. CellsNumberFile 3 3 - 1 Mod 8 смещение.

Являет собой размер неполностью заполненного кластера While. Cells3 NumberCellFAT 5 0 просмотр FAT до признака конца цепочки. RangeCells6 NumberCellFAT 5 Cells6 7 NumberCellFAT 5.Interior. ColorIndex ColorUsedPartOfFAT NumberFile выделение цветом очередного непоследнего кластера N-ного файла. RangeCells6 NumberCellFAT 5 Cells6 7 NumberCellFAT 5.Font. ColorIndex ColorUsedPartOfFAT NumberFile. RangeCells6 NumberCellFAT 5 Cells6 7 NumberCellFAT 5.Formula PointerToFile каждая ячейка этого кластера теперь указывает на ячейку с именем файла в каталоге NumberCellFAT .Cells3 NumberCellFAT 5 взяли следующую ячейку FAT из цепочки Wend теперь обработка последнего кластера N-ного файла.

Отличается тем, что он может быть занят не полностью. RangeCells6 NumberCellFAT 5 Cells6 Relation NumberCellFAT 5.Interior. ColorIndex ColorUsedPartOfFAT NumberFile. RangeCells6 NumberCellFAT 5 Cells6 Relation NumberCellFAT 5.Font. ColorIndex ColorUsedPartOfFAT NumberFile. RangeCells6 NumberCellFAT 5 Cells6 Relation NumberCellFAT 5.Formula PointerToFile NumberFile NumberFile 1 работаем со следующим файлом Wend End With End Sub Макросы нижнего уровня абстракции Function FreeSize As Integer Функция для определения количества свободного места в области файлов FreeSize 0 temp 6 While temp 22 просмотр области FAT If SheetsSheet. Cells3 temp. Value Then FreeSize FreeSize 8 если ячейка FAT пуста, то своб.места в ней 8 байт temp temp 1 Wend End Function Function NextFreeCellFAT As Integer Функция возвращает номер первого найденного свободного элемента FAT NextFreeCellFAT 1 While NextFreeCellFAT 17 If SheetsSheet. Cells3 NextFreeCellFAT 5.Value Then Exit Function NextFreeCellFAT NextFreeCellFAT 1 Wend End Function Sub AddFileToCatalogFile As FileID добавление файла в область каталога temp 4 With SheetsSheet While. Cellstemp 2 temp temp 1 поиск свободного места в каталоге файлов Wend кто дочитает до этого места-бутылка шампанского. Cellstemp 2 File. Name Запись в каталог информации о файле. Cellstemp 3 File. Size. Cellstemp 4 File. First End With End Sub Sub DeleteFileFromCatalogNameDeletedFile As String удаление информации о файле из каталога Position 4 While SheetsSheet. CellsPosition 2.Text NameDeletedFile Position Position 1 Wend For temp Position To 16 3 следующие за удаляемым файлом ячейки сдвигаются, затирая запись об удаляемом файле Sheetssheet. RangeCellstemp 2 Cellstemp 4.Value Sheetssheet. RangeCellstemp 1 2 Cellstemp 1 4.Value Next End Sub Sub ToFATNumberCell As Integer Value As Integer Процедура записи в заданную ячейку FAT заданного значения SheetsSheet. Cells3 NumberCell 5.Value Value End Sub Sub DeleteCellFromFATStartCell As Integer рекурсивная функция удаления цепочки из FAT Вызывается с номером точки входа MsgBox DeleteCellFromFAT, StartCell StartCell If SheetsSheet. Cells3 5 StartCell. Value 0 Then если в рассматриваемой точке - 0, то это значит, что она является указателем конца файла SheetsSheet. Cells3 5 StartCell и поэтому очищаем эту ячейку FAT Else в противном случае это указатель на следующую ячейку FAT - вызываем эту же процедуру DeleteCellFromFAT Sheetssheet. Cells3 5 StartCell. Value но с новым номером ячейки FAT Sheetssheet. Cells3 5 StartCell и затем ее очищаем End If End Sub