Студопедия

КАТЕГОРИИ:


Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748)

Interface. StringGridl: TStringGrid;




Type

TForm1 = class(TForm)

Panel1: TPanel;

Button1: TButton;

BitBtnl: TBitBtn;

StringGridl: TStringGrid;

procedure Button1Click (Sender: TObnect);

end;

Form1: TForm1; implementation

Procedure TForm1.Button1Click (Sender: TObject);

,3.1,4.2);

x:array [l..n] of real =(0.2,0.7,1 var i:integer;

begin

for i:=l to n do

StringGridl.Cells[0,i]:=IntToStr(i)+’ элемент’;

StringGridl.Cells[1,0]: = ' x’;

StringGridl.Cells[2,0]: = ' x’;

for i:=l to n-do begin

StringGridl.Cells[l,i]: =

FormatFloat(' StringGridl.Cells[2,i]: = FormatFloat(' 0.0000’, cos(x[i]));

end; end; end.

СТРОКИ

В Delphi существует 5 типов строк:

ShortString - короткая строка;

• AnsiString - длинная строка;

WideString - длинная строка в кодировке UNICODE;

String - универсальная строка;

PChar - строка, оканчивающаяся нулевым кодом (#0), введена для со­
вместимости с другими языками программирования (такие строки исполь­
зуются в C++ и Windows).

Переменная PChar - это ссылка на строку. Строки типа PChar размеща­ются в динамической памяти. Динамическая память - это свободная память, которая остается после загрузки программ и данных. Программный элемент


получает ее в процессе выполнения программы, а не на этапе компиляцщ! (статическая память). Переменная типа PChar - это ячейка памяти, содержа! щая адрес строки. По этому адресу записываются необходимые данные. Компилятор выделяет под переменную PChar всего 4 байта, а сама строка. которая размещается по адресу, записанному в эти 4 байта, может быть лю­бой длины. Если строки не существует, а переменная PChar объявлена, то J эту переменную необходимо записать nil (пустой адрес).

Переменные типа AnsiString содержат динамические строки символов в ANSI-кодировке. Соответственно переменные типа WideString содержат динамические строки символов в кодировке UNICODE. Термин "динамиче­ские" означает, что переменные указанных типов, как и тип PChar, являются] адресами, т.е. ссылками на память с соответствующим типом данных.

ShortString - это фактически массив: array [0..255] of char. Па­мять в данном случае выделяется в 256 байт, а строка размещается динами­чески, т.е. через адрес. Символы строки содержатся в байтах с первого по 255. В байте с номером 0 содержится символ, порядковый номер которого представляет собой число фактически имеющихся в строке символов. Дан­ный тип ShortString введен для совместимости с более ранними версиями языка Pascal.

Строка String в зависимости от директивы компилятора {$Н} может совпадать с AnsiString ({$H+} установлено по умолчанию) или с ShortString({$H-}).

Для строки String можно задавать максимальное количество символов с помощью следующего объявления; var str: string{25];, т.е. строка str может содержать не более 25 символов и в памяти она занимает 26 байт (не считая "накладных расходов").

Доступ к строке может осуществляться посимвольно, так как все симво­лы в строке проиндексированы. В строке PChar символы нумеруются начи­ная с 0, в остальных строках - начиная с 1. Например, пусть объявлено: Var strl: string; str2: PChar; и выполнены присваивания: I strl:=' Pascal'; str2:= ' Pascal'; тогда atr[l] представляет символ! ЧР', a str2 [1] -символ *а'.

Co строками возможны операции конкатенации (сложения) и сравнения. Складываются строки, используя знак '+'. При сравнении строк действия выполняются слева направо в соответствии с ANSI-кодами отдельных сим­волов. Например, код А меньше, чем а. Если строки разной длины, то корот­кая строка дополняется справа, причем код, который участвует в дополнении строки, меньше кода любого символа, существующего в ANSI-кодировке.

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

Для выполнения различных операций над строками существует множе­ство подпрограмм (табл. 11).


 

Таблица 11
Операшя Описание
copy(S, Pos, len) Возвращает подстроку длиной len символов из строки S начиная с символа номер pos
lenght(S) Возврашает фактическую (динамическую) длину строки S
Pos(substr, S) Возвращает позицию первого вхождения подстроки substr в строку S
SetLenght(S, newlen) Задает новую гитну newlen строке S
StringOfChar(Ch, Count) Возвращает строку, заполненную символом Ch в количестве Count
Trim(s) Возвращает строку без начальных и конечных пробелов
UpperCase(S) Возвращает строку с прописными буквами

ПРИМЕР ПРИЛОЖЕНИЯ 9

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

ShowMessage отображает статические сообщения. Это диалоговое окно отображает в центре экрана строку текста и кнопку "ОК" (рис. 24). Вызыва­ется посредством использования процедуры ShowMessage(S), где S - строка типа String.

ShowMessagePos (рис. 25) предназначено для тех же целей, что и ShowMessage. При вызове, кроме строки текста, процедуре необходимо пе­редать экранные координаты X и Y расположения этого окна.

Рис. 25

Ряс. 24

В отличие от предыдущих диалоговых окон, MessageBox (рис. 26) по­зволяет задавать две строки: заголовок окна и поясняющий текст. Про­граммно вызов оформлен в виде функции. Эта функция возвращает то зна­чение, на какой кнопке щелкнул пользователь. Число отображаемых кнопок может быть одна или более и задается с помощью аргумента, представляю­щего собой набор предопределенных констант. Передаваемые в функцию строки заголовка и текста должны иметь тип PChar. Если эти строки типа String, то необходимо использовать преобразование типов, записывая Р = =PChar(S), где Р типа PChar, a S - String



 



MessageDlg (рис. 27) отличается от MessageBox тем, что заголовок этого окна предопределен.

Рис. 26 Рис. 27

Функция MessageDlg имеет 4 аргумента: первый передает текст в виде

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

Рис. 28

Как и в случае предыдущего окна, функция возвращает, на какой кнопке щелкнул пользователь. Окно Mes­sageDlg располагается в центре экрана. MessageDlgFos (рис. 28) является вариантом MessageDlg с той лишь разни­цей, что этому виду диалогового окна необходимо передавать координаты X и Y его расположения на экране.

Форма примера 9 представлена на рис. 29.

Рис. 29

Для реализации локального меню выбора варианта диалогового окна ис­пользовался компонент TRadioGroup - группа взаимосвязанных переклю­чателей TRadioButton.

С помощью свойства Items создается список взаимоисключающих аль­тернатив, в данном случае из пяти строк, для каждой из которых создаете* переключатель. При выборе мышью (или стрелками) того или иного пере­ключателя в списке фиксируется строка и ее номер, который позволяет в


программе обеспечить выполнение того или иного кода. Выбранный номер чаписывается в свойстве Itemlndex. Нумерация переключателей задается от ля. Переключатели можно располагать не только в один, но и в несколько столбцов. Число столбцов задается в свойстве Columns. С помощью свойст­ва Caption можно задавать заголовок всей группе взаимозависимых пере­ключателей.

Строки меню заносятся в список. Вызывая в инспекторе объектов свой­ство Items, можно набрать пять строк, а значение Itemlndex установить, на­пример, равным 3. Для данного компонента необходимо создать обрабочик OnCHck.

Текст программы приводится ниже. В данном примере имя формы (Name) выбрано MainForm, соответственно порождающий эту форму класс имеет имя TMainForm.

unit Prim9;

uses SysUtils, Windows, Messages, Classes, Graphics,

Controls, Forms, Dialogs, StdCtrls, ExtCtrls, Buttons;

type TMainForm = class (TForm)

 

RadioGroupl: TRadioGroup; Bevell: TBevel; Label1: TLabel; BitBtnl: TBitBtn;

procedure RadioGrouplClick (Sender: TObject); end;

var MainForm: TMainForm; imp1ementa tion {$R *.DFM}

 

procedure TMainForm.RadioGrouplClick(Sender: TObject); const sde=’Демонстрация '; sbi='Было выбрано’; var TheText,TheCaption: String;

S: String[6]; W: Word; X, Y: Integer; begin

case RadioGroupl.Itemlndex of 0: ShowMessage(sde+'ShowMessage'); 1:begin

X:= 50; Y:= 60;

ShowMessagePos (sde+'ShowMessagePos',X,Y); end; 2: begin

TheText:= 'Текст-пояснение к MessageBox'; TheCaption:- sde+'MessageBox '; if Application. MessageBox (PChar(TheText), PChar(TheCaption),MB_DEFBUTTON1 +


MB_ICONEXCLAMATION + MB_OKCANCEL) = IDOK

then ShowMessage(sbi+'OK') else ShowMessage(sbi+'Cancel'); end; 3:begin

W:= MessageDlg(sde+'MessageDlg'

[mbYes, mbNo, mblgnore],0); case W of

mrYes: S:= 'Yes';
mrNo: S:= 'No';
mrlgnore: S:= 'Ignore1;.
end; {case}
ShowMessage(sbi + S);
end;;

4:begin

X:= 50; Y:= 75;

W:= MessageDlgPos (sde+'MessageDlgPos', mtWarning,mbAbortRetryIgnore, 0, X, Y); case W of

mrAbort: S:= 'Abort'; mrRetry: S:= 'Retry'; mrlgnore: S:= 'Ignore'; end; {case} ShowMessage(sbi + S); end;

end; {case} end; end.

В программе при объявлении строки s задана максимальная длина при-сваимого ей значения, равная 6 символам. Аргумент функции MessageDlg, заданный в квадратных скобках, означает, что с помощью конструктора множества передается некоторое заданное множество.

ЗАПИСИ (ОБЪЕДИНЕНИЯ)

С помощью зарезервированного слова "record" в единой структуре можно объединить данные разных типов. Общий синтаксис объявления та­кого объединения следующий:

Туре <имя типа> = Record <СПисок полей>: <тип>; <Список полей>:

End;.

 

Поля записи (или объединения) могут быть любого типа, число их не ог­раничено. Например,

{Тип комплексных чисел}

туре

Complex = record

Re, Im: real;

end;

{Тип - дата рождения}

Data = record

Year:word;

Month: 1..12;

{Тип - сведения о сотруднике}

Day: 1..31; end; Person = record

Name: string[40];

Age: word;

Adres: string[80]; end;.

Количество памяти, выделяемой под запись, может быть различным в зависимости от директивы {$А} (выравнивание). Если установлено {$А+}, то поля выравниваются по четным адресам - уменьшается время доступа к переменной в памяти. По умолчанию установлено {$А-}. Перед ключевым словом "record" можно добавить слово "Packed". В этом случае под запись выделяется минимальное количество байт, причем директива {$А} игнори­руется.

После объявления типа можно объявить переменные или типизирован­ные константы, например,

Var Z: Data;

X: Complex; Const

Birthday: Data=(Year:197 4 ;Month:7; Day: 12); Petrov:Person= (Name:' Иван'; Age:22;

Adres: 'Новомосковск,Мира,20,3');

Доступ к полям записи в программе осуществляется следующим способом:

2.Year:=1969; {Z - селектор записи; Year - поле}. Z.Month:=7; Z.Day:=13; X.Re: 0.8; X.Im: 2.1; Z.Month:= Z.Day div 5+2;

Тип данных запись может иметь так называемую вариантную часть. Ва­риантная часть позволяет трактовать по-разному занимаемую полями одну и ту же память.




Поделиться с друзьями:


Дата добавления: 2014-12-29; Просмотров: 378; Нарушение авторских прав?; Мы поможем в написании вашей работы!


Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет



studopedia.su - Студопедия (2013 - 2024) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! Последнее добавление




Генерация страницы за: 0.035 сек.