Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ШПОРЫ ПО ПРОГРАММ.docx
Скачиваний:
3
Добавлен:
16.04.2019
Размер:
107.4 Кб
Скачать

2. Функция для преобразования целого числа в строку:

IntToStr (K: integer): string Например:

Label1.Caption:= ‘Результат’ + IntToStr(K) 3. Функция для преобразования вещественного числа в строку:

FloatToStr (K: Extended): string Например:

Label1.Caption:= FloatToStr(K)  4. Функция для преобразования вещественного числа в строку в формате:

FloatToStrF (K: Extended, F, n,m: byte): string, где F – формат вывода изображения числового значения (ffGeneral – уни- версальный, ffFixed – с фиксированной точкой (рекомендуемый), ffExponent – научный, ffNumber – с разделителями групп разрядов, ffCurrency – финансовый), n – ширина поля для вывода числа, m – количе- ство цифр после десятичной точки. Например: Label1.Caption:=’k=’+FloatToStrF(k,ffFixed,6,3) Программа может получить данные из окна ввода или поля редактиро- вания (Edit).

16.

Компонент Delphi Memo это простой текстовый редактор. Delphi Memo позволяет вводить многострочный текст с клавиатуры, загружать его из файла, редактировать и сохранять в файл текстового формата. При изучении работы с Delphi Edit советую посетить страничку работа со строками Delphi, так как там описываются функции Delphi для работы с данными, представленными в текстовой форме, с которыми и оперирует компонент Memo.    Простота текстового редактора компонента Delphi Memo заключается в том, что текстовый редактор Delphi Memo не обладает возможностями форматирования содержещегося в нём текста. Это означает, что все атрибуты выбранного шрифта будут относиться ко всему тексту.    Текст в компоненте Delphi Memo размещается построчно. Поэтому имеется доступ к каждой строке текста отдельно. Строки в редакторе Delphi Memo являются объектами Lines[i] типа String, где i - номер строки, отсчитываемый от нуля. Объект Lines[i]доступен и для чтения, и для записи. Соответственно, текст в компоненте Memo можно редактировать не только с клавиатуры, но и программно: var S: String; begin  Memo1.Lines[3]:='Четвёртая строка по счёту';  S:=Memo1.Lines[3]; end;    Естественно, для успешного присвоения текста определённой строке необходимо, чтобы эта строка физически существовала! То есть, данным способом можно только редактировать текст. Новую строку создать таким способом невозможно. Для создания новых строк служат методы

  • Add()

  • Insert()

   Метод Add() добавляет новую строку в конец, а метод Insert() внедряет новую строку перед указанной, для чего метод Insert()имеет соответствующий параметр: begin  Memo1.Lines.Add('Это будет последняя строка');  Memo1.Lines.Insert(2, 'Эта строка будет третьей');  //Так как отсчёт идёт от нуля! end;    Delphi Memo имеет также метод для удаления строки: Memo1.Lines.Delete(i); //Удаление строки с индексом i     Компонент Delphi Memo позволяет получить доступ к тексту как целому. Свойство Text типа String является текстом, содержащимся в редакторе, в виде одной строки. Необходимо учитывать, что эта строка также будет включать в себя и непечатаемые символы конца строки #13 и символы переноса строки #10. Кстати, чтобы продолжить текст с новой строки, необходимо использовать последовательно оба этих символа:   Memo1.Text:='Предыдущий текст'+#13+#10+'Это уже новая строка';    Delphi Memo обладает свойствами для перемещения курсора и выделения текста, такими же, как и у компонента Delphi Edit:

  • SelStart

  • SelLenght

  • SelText

Напоминаю: - свойство SelStart типа Integer задаёт номер символа, после которого будет стоять курсор (отсчитывается от начала всего текста); - свойство SelLenght типа Integer определяет количество выделенных символов; - свойство SelText типа String содержит выделенный текст.    Для того, чтобы выделение текста было заметно на экране, небходимо, чтобы компонент обладал фокусом ввода. То есть, чтобы ранее либо пользователь переместил туда курсор, клавишей Tab или щёлкнув мышкой, либо был выполнен операторMemo1.SetFocus.    Остаётся вопрос, как определить, где сейчас находится курсор, на какой строке, и позицию в строке. Эти параметры содержатся в свойстве CaretPos компонента Delphi Memo, которое имеет тип TPoint, то есть точка - запись с координатами X и Y:    Memo1.CaretPos.X // позиция курсора в строке (в отличие от SelStart);    Memo1.CaretPos.Y // номер строки где находится курсор; 

17.

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

Класс TStrings не используется в программах непосредственно (т. е. не надо пытаться создать переменную такого типа). Чаще всего он используется или как свойство некоторого компонента (например, у компонента Memo есть свойство Lines типа TStrings). Если же нам в программе нужен просто набор строк, то следует использовать экземпляр класса TStringList, который является потомком класса TStrings.

Рассмотрим основные свойства и методы класса TString. В наших примерах мы для конкретности будем иметь дело со свойством Lines экземпляра класса TMemo(компонент Memo расположен на вкладке Standard палитры компонентов). Его свойство Lines как раз и имеет тип TStrings.

Основное свойство для класса TStrings - это Strings, в которое можно записывать отдельные строки через индекс.

 

Код:

 

            Memo1.Lines.Strings[0]:='London';

            Memo1.Lines.Strings[0]:='Paris';

 

Свойство Count возвращает число элементов в списке:

 

ShowMessage(IntToStr(Memo1.Lines.Count));

 

А вот так можно пройтись по всем строкам, входящим в TStrings:

 

var

            i: Integer;

            ...

            for i := 0 to Memo1.Lines.Count - 1 do

            ShowMessage(Memo1.Lines[i]);

 

Свойство IndexOf позволяет выяснить, на каком месте в списке находится некоторая строка (и есть ли она вообще).

 

Вот пример его использования:

 

var

            k: Integer;

begin

            //Получаем номер строки "Igor".

            k:=Memo1.Lines.IndexOf('Igor');

            ShowMessage(IntToStr(k));

end;

 

Свойство IndexOf равно номеру места, на котором находится нужная строка (нумерация идет с нуля). Если такой строки вообще нет, то свойство IndexOf будет равно -1.

Методы Add и Insert служат для добавления строк в конец и на определенное место соответственно.

 

Вот пример их применения:

 

            //Добавление в конец списка.

            Memo1.Lines.Add('Roma');

            //Добавление на второе место.

            Memo1.Lines.Insert(2, 'Berlin');

 

Удаление элемента с определенного места делаем методом Delete.

 

Вот пример его использования:

var

             i:Integer;

             ...

             //Получаем номер элемента Roma.

            i:= Memo1.Lines.IndexOf('Roma');

            //Если элемент существует.

            if i> -1 then

            Memo1.Lines.Delete(i);

 

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

Всё на этом урок закончен.

18

Изучим компонент StringGrid. Компонент StringGrid предназначен для отображения и хранения текстовой информации в виде таблицы. Расположен он на вкладкеAdditional палитры компонентов.

Размер таблицы определяется свойствами ColCount и RowCount. Они задают количество столбцов и строк соответственно. При необходимости эти свойства можно менять и программно. Размеры же ячеек в пикселях задают свойства DefaultColWidth и DefaultRowHeight. Если же надо задать размер некоторого столбца или некоторой строки отдельно, то надо воспользоваться свойствами ColWidths или RowHeights соответственно.

 

Вот пример, в котором мы задаем для первого столбца ширину в 40 пикселов:

 

StringGrid1.ColWidths[0]:=40;

 

Как видно, нумерация идет с нуля.

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

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

 

Вот пример, в котором мы записываем во вторую строчку второго столбца значение abcd:

 

StringGrid1.Cells[1,1]:='abcd';

 

При необходимости можно работать и со строками или столбцами целиком. Для работы со строками надо использовать свойство Rows, а со столбцами - Cols.

 

Скажем, вот так можно целиком скопировать вторую строки в третью (помните, что нумерация идет с нуля):

 

StringGrid1.Rows[2]:=StringGrid1.Rows[1];

 

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

Множество важных параметров компонента StringGrid являются подсвойствами свойства Options. Вот некоторые из них. Подсвойство goEditing отвечает за возможность редактирования ячеек таблицы. Если это свойство установить в true, то редактирование возможно (путем двойного щелчка на нужной ячейке). ПодсвойствоgoRowSelect. Если оно установлено в true, то при щелчке на ячейке выделяется весь ряд. Установленное в true подсвойство goTabs позволяет перемещаться между ячейками посредством клавиши TAB. Если вы хотите позволить пользователю изменять размеры столбцов путем перетаскивания границ у заголовков, то установите значение подсвойства goColSizing в true.

Одна из частых задач - это получение информации, в какую из ячеек пользователь внес изменения.

Для определения этого надо воспользоваться обработчиком события OnSetEditText для StringGrid:

 

procedure TForm1.StringGrid1SetEditText(Sender: TObject; ACol,

            ARow: Integer; const Value: String);

begin

            Form1.Caption:=IntToStr(ACol) + ' ' + IntToStr(ARow);

end;

 

Как видно, номера строки и столбца измененной ячейки передаются в параметрах ACol и ARow.

Всё на этом урок закончен.

Свойство RowCount компонента StringGrid содержит количество строк таблицы.    RowCount - это общее количество строк в таблице, без разделения на строки фоксированной зоны и рабочей зоны. Свойство ColCount компонента StringGrid содержит количество колонок, или столбцов таблицы.    ColCount - это общее количество столбцов в таблице, без разделения на столбцы фоксированной зоны и зоны редактирования.    Свойство ScrollBars StringGrid Delphi определяет поведение компонента StringGrid если количество строк или столбцов не помещается в окне компонента. То есть свойство ScrollBars позволяет управлять наличием или отсутствием полос прокрутки таблицы.   Свойство DefaultColWidth компонента StringGrid задаёт ширину по умолчанию для столбцов таблицы. То есть, именно ширину в пикселах, равнуюDefaultColWidth, будут иметь все столбцы таблицы StringGrid Delphi при добавлении её на Форму. Свойство компонента StringGrid DefaultRowHeightзадаёт высоту по умолчанию для строк таблицы. То есть, именно ширину в пикселах, равную DefaultRowHeight, будут иметь все строки таблицы StringGrid Delphi при добавлении её на Форму.    Также и все новые строки при добавлении их в таблицу как на этапе проектирования, при изменении параметра RowCount в Инспекторе Объектов, так и в ходе работы программы при выполнении оператора  Свойство FixedCols компонента StringGrid задаёт количество первых столбцов, которые будут фиксированными, то есть не будут участвовать в горизонтальной прокрутке. Свойство FixedRows компонента StringGrid задаёт количество первых строк, которые будут фиксированными, то есть не будут участвовать в вертикальной прокрутке.

19

  Компонент Delphi ListBox это компонент, служащий для хранения и обработки текстовой информации. Каждая строка Delphi ListBox хранит строку данных в формате String. Компонент ListBox - это массив строк. ListBox может загружать данные с диска, и сохранять информацию в файл. Также ListBox может сортировать строки. Доступ к строкам предоставляет свойство Items этого компонента. В соответствии с этим, вот как происходит обращение к строке с номером i:    ListBox1.Items[i-1]; // Минус один, так как нумерация строк в компоненте начинается с нуля.    Прежде всего рассмотрим методы добавления строк в компонент Delphi ListBox:

  1. Считывание из файла;

  2. Добавление строки в конец списка;

  3. Добавление строки перед строкой с номером i;

  4. Добавление строк на этапе конструирования.

понента Delphi ComboBox вначале скрыт, и раскрывается при щелчке мышкой по треугольничку раскрытия, который находится справа в строке ввода:  Таким образом, с помощью Delphi ComboBox место на Форме экономится для расмещения других элементов интерфейса программы. А при необходимости раскрытие списка строк можно вообще запретить.    Многие свойства и возможности компонента Delphi ComboBox по работе со строками (объектами Items) такие же как и у компонента Delphi ListBox, поэтому повторно описывать их не буду. Опишу отличия и дополнительные возможности.    Итак, за возможность раскрытия компонента ComboBox отвечает стиль - свойство Style:

Стиль компонента ComboBox1 равен   ComboBox1.Style = csDropDown (список может быть раскрыт, можно писать в строке ввода) Стиль компонента ComboBox2 равен   ComboBox1.Style = csSymple (список не может быть раскрыт, можно писать в строке ввода) При стиле csDropDownList компонент может быть раскрыт, но свойство Text может принимать значения только одной из строк, сохранённых в компоненте, то есть пользователь лишён возможности писать в строке ввода.

   Количество строк, видимых при раскрытии списка, равно DropDownCount. Если реальное количество сохранённых строк больше этого количества, то автоматически появляется полоса прокрутки. Программист может заставить список раскрыться в нужный момент. Для этого нужно свойству DroppedDown присвоить значение True. Для этой же цели пользователь может использовать клавиатурную комбинацию ALT+ВНИЗ.    Максимально допустимое количество символов в текстовой строке задаётся параметром MaxLemgth, причём значение 0 означает отсутствие ограничений. Свойство CharCase управляет преобразованием вводимого текста к верхнему (значениеCharCase = ecUpperCase) или нижнему (значение CharCase = ecLowerCase) регистру. Значение ecNormal означает, что текст вводится без преобразования.    Основными событиями компонента Delphi ComboBox являются:

20

Данные типа file - это любые файлы: картинки, аудио и видео файлы, дистрибутивы программ, документы, в том числе html-документы. Как они используются на страничке (отображаются, проигрываются или скачиваются) задается в шаблоне. В дескрипторе же просто задется тип - file, а пользователь просто закачивает файл на сайт. Как уже говорилось выше — в Linux все представлено в виде файлов. Но файлы бывают разных типов.

Тип файла можно узнать при помощи программы ls (первый символ первого поля) или при помощи программы stat.

В Linux используются файлы следующих типов:

  • Обыкновенный файл — то, что принято считать файлом в Windows: текстовые файлы, файлы баз данных, исполняемые файлы программ и т.д. Программа ls обозначает их символом тире ().

  • Директория. Обозначаются символом d.

  • Символьная ссылка. Обозначаются символом l.

  • Файл блочного устройства. Обозначаются символом b.

  • Файл символьного устройства. Обозначаются символом c.

  • FIFO. Обозначаются символом f.

  • Socket (соединение). Обозначаются символом s.

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

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

С файлами устройств можно работать при помощи стандартных функций open, read, write, close. Т.е. не требуется написания специальных механизмов доступа к драйверам устройств из программ. После того, как файл устройства будет открыт при помощи open, мы можем передавать информацию драйверу устройств записывая её в файл при помощи write. Для того что бы прочитать информацию, передаваемую нам драйвером устройства, достаточно воспользоваться функцией read для чтения из файла устройства. Как вы видите, с файлом устройством работают так же как и с обыкновенным файлом.

Кроме облегчения доступа к драйверам, файлы устройств используются для ограничения доступа к оборудованию. Например, если вы запретите пользователю доступ к файлу устройства, соответствующего DVD-ROM, вы запретите пользователю доступ к соответствующему устройству.

В Linux существуют два типа устройств: символьные и блочные. В символьных устройствах информация передается последовательно, по одному биту. Например, COM порт или консоль — это символьные устройства. В блочных устройствах информация передается параллельно. К таким устройствам относятся жесткие диски, CD-ROM и т.д. Все блочные устройства в системе для ускорения работы с ними буферизируются.

Файлы FIFO (иногда их ещё называют именованными каналами) предназначены для передачи данных между программами. Представьте, что одной программе необходимо передать другой программе большое количество данных. В Linux программы не имеют доступ к оперативной памяти другой программы и не могут передать данные непосредственно в память. Но одна программа может открыть FIFO файл на запись, а другая открыть его на чтение. FIFO — это first input first output, первый вошел, первый вышел. То есть данные передаются как по трубе.

У FIFO файлов много достоинств, но есть один серьезный недостаток: данные можно передавать только в одну сторону. Если программам необходимо организовать двухстороннюю передачу данных, то лучше воспользоваться сетевым соединением. Но использовать реальное сетевое соединение имеет смысл только тогда, когда программы выполняются на разных компьютерах в сети. Если они работают на одном и том же компьютере, то лучше передавать данные через специальные файлы, так называемые UNIX domain sockets. При использовании файлов типа socket, как и в случае использования FIFO файлов, данные передаются через буфера файловой системы но в обеих направлениях.

Файлы типа socket в Linux применяются повсеместно. Например, графическая оболочка X Window построена по принципу клиент-сервер. Когда программы X сервер и Х клиенты работают на одной машине, они общаются через файлы типа socket. Множество этих файлов можно увидеть в директории /tmp. Или взаимодействие почтового сервера и антивируса. Антивирус ClamAV может принимать запросы как по реальному сетевому соединению, так и через файл типа socket. Но при настройке почтового сервера приходится явно указывать каким из способов передачи данных необходимо пользоваться.

21