Программирование
Шрифт:
Name – внутреннее название объекта программы;
TabOrder – показывает направление движения фокуса в случае нажатия на клавишу Tab;
TabStop – при некотором значении False фокус в случае нажатия на клавишу Tab на данный объект не переводится.
Вышеприведенные свойства присущи многим компонентам. Но важно отметить, что, кроме приведенных параметров, компоненты обладают и специфическими свойствами.
40. Окно редактора кода Дельфи
Окно редактора кода. Окно данного редактора имеет три части:
1) панель модулей
2) панель кода программы;
3) панель найденных ошибок программы (на этапе создания программы данное окно является невидимым, активизируется, если это необходимо, при компиляции программы).
Рассмотрим конкретные проблемы программирования. Покажем раздел Delphi, который называется диалоги. С одной стороны, это достаточно простой раздел. Затруднительным является вопрос о том, как можно совершить операции над файлом, который должен выбрать пользователь. В различных литературных источниках встречаются разные варианты решения и создания дополнительной формы объекта: и попытка заставить пользователя от руки написать адрес файла, и предлагали воспользоваться компонентами Treeview, OutLine и им подобными. Однако существует и более короткий и простой путь для решения проблемы. Достаточно использовать компоненты OpenDialog. Этот компонент легко устанавливается на форму проекта в форме квадрата. В случае запуска программы он невидим. Квадрат только указывает на то, что компонент установлен и дает возможность обращаться к его свойствам с помощью инспектора объектов. Рассмотрим их поподробнее.
После установки компонента на конструкцию проекта диалоговое окно возможно активизировать, применяя функции Execute: Boolean. В этом случае, если пользователь выбрал один или несколько файлов и нажал кнопку ОК, функция возвращает True. Свойство элемента FileName включает имя последнего файла из всех выбранных в диалоге. Свойство Files является списком всех файлов, выбранных в диалоге. Свойство InitialDir определяет каталог, к которому диалог обращается в случае открытия. Свойство Title включает в себя заголовок диалогового окна. Необходимо кроме этого отметить свойство Filter. С помощью данного свойства в случае выбора и сохранения файлов удобно производить отбор файлов только с заданными расширениями. Например, при создании фильтра для исполняемых файлов в свойство должна входить следующая строка:
'Исполняемые файлы | *.EXE'
В одном фильтре можно отбирать файлы и с разными расширениями:
'Графические изображения | *.JPG; *.GIF; *.PNG'
Фильтр также можно создать в обычном редакторе, связанном со свойством Filter в инспекторе объектов.
41. Сообщения Дельфи
Осуществить сообщения можно с помощью нескольких процедур: с помощью процедуры ShowMessage, функции MessageDlg, создания дополнительного окна.
Процедура showmessage дает возможность вывести пользователю простое сообщение. При этом образуется дополнительное окно с названием проекта и кнопкой ОК. Выглядит все это так:
Синтаксис: ShowMessage(Msg: string);
Пример:
ShowMessage('Все задачи выполнены успешно');
Функция messageDlg дает возможность создавать сложные диалоговые запросы с применением обратной связи. Имеет форму дополнительного окна, дополненного изображением. Кроме того, можно применять диалоговые запросы. Название окна определяется типом запроса.
Синтаксис:
MessageDlg(Msg: string; AType: TMsgDlgType; ABut-tons: TMsgDlgButtons; HelpCtx: Longint): Word;
Msg – строковой параметр. Определяет выводимое сообщение;
Atype – внутренний параметр функции. Определяет тип сообщения:
1) mtWarning – сообщение о предупреждении;
2) mtError – сообщение об ошибке;
3) mtInformation – информационное сообщение;
4) mtConfirmation – сообщение о подтверждении;
5) mtCustom – сообщение не содержит в углу изображения. Название окна соответствует названию
исполняемого файла (аналогично showmessage);
Abuttons – определяет имена кнопок, отображающиеся в диалоговом запросе. Возможны значения: mbYes, mbNo, mbOK, mbCancel, mbHelp, mbAbort, mbRetry, mblgnore, mbAll;
HelpCtx – включает номер раздела, используемый пользователем, если он вызовет справку, когда диалог активизирован.
Например:
MessageDlg(‘Продолжить выполнение программы’,
mtConfirmation, [mbYes, mbNo], 0);
Для определения того, какой вариант ответа вы/
брал пользователь, можно применить простую про/
верку. В этом случае исходный код будет иметь сле/
дующий вид:
If MessageDlg(‘Закончить выполнение задачи?’,
mtConfirmation, [mbYes, mbNo], 0) = mrYes
Then
Begin
MessageDlg(‘Выполнение задачи закончено.’, mtIn/
formation, [mbOk], 0);
Создание сообщения с применением дополнительного окна достаточно трудно. Данный способ применяется для создания сложных запросов, когда одного только «Да» и «Нет» недостаточно. Например, когда от пользователя необходимо получить код продолжения, в зависимости от которого приложение выполнит те или иные операции.
42. Оптимизация по быстродействию в Ассемблер
Приведем некоторые из самых общих процедур этой категории.
1. Замена универсальных инструкций учитывающими конкретную ситуацию, например замена команды умножения на степень двойки на команды сдвига.
Уменьшение числа передач в программе: вследствие преобразования подпрограмм в макрокоманды для прямого включения в исполнимый код; за счет преобразования условных переходов, так, чтобы условие перехода было истинным относительно реже, чем причины для его отсутствия; перемещение условий общего характера к началу разветвленной последовательности переходов; изменение вызовов, сразу после чего происходит возврат в программу, в переходы и т. д.
2. Оптимизация циклов, в том числе сдвиг вычислений неизменяющихся величин за границы циклов, разворачивание циклов и «соединение» отдельных циклов, выполняемых одно и то же количество раз, в единый цикл («сжатие цикла»).
3. Наибольшее применение всех доступных регистров, в результате хранения в них рабочих значений каждый раз, когда это возможно, чтобы уменьшить число обращений к памяти, упаковка большого числа значений или флагов в регистры и устранение лишних продвижений стека (особенно на входах и выходах подпрограмм).