Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
osnovy_programmirovanija_v_srede_lazarus.pdf
Скачиваний:
185
Добавлен:
18.03.2015
Размер:
6.53 Mб
Скачать

6.3 Визуальное программирование в среде Lazarus

____________________________________________________________________

end; initialization

{$I Unit1.lrs} end.

В программе пользователь может вводить коэффициенты и редактировать их прямо в TStringGrid. После нажатия кнопки "Решить" данные из

TStringGrid преобразуются в числовое представление и записываются в ди-

намические массивы a – матрица коэффициентов системы, b – вектор свобод-

ных членов. Далее осуществляется вызов процедуры Gauss()решения систе-

мы линейных алгебраических уравнений методом Гаусса, которая практически не отличается от консольного варианта. Если решение системы существует, по-

лученный вектор x[x1, x2, . . . , xn] преобразуется в строку и выводится на экран.

Для контроля ввода данных в Edit1 мы использовали метод, применен-

ный нами в 6.3.7.1. Для контроля ввода в StringGrid1 функцию Val(), а

при вычислениях применили механизм исключений.

6.3.10.3. Компоненты выбора

В этих компонентах можно организовать выбор каких-то элементов из списка. Весь список содержится в свойстве Items и имеет тип TString. Эле-

ментами списка являются строки. Строки нумеруются, начиная с нуля. Доступ к строке осуществляется с помощью указания индекса элемента в свойстве

Items, например Items[k] или свойства Items.Strings, например

Items.Strings[k].

Компонент TListBox

Рассмотрим компонент TListBox. Он расположен на странице

Standard. Основные свойства компонента:

MultiSelect – признак множественного выбора. Если MultiSelect = true, то разрешается выбор одновременно нескольких элементов.

616

Глава 6 Программирование приложений с графическим интерфейсом

____________________________________________________________________

ExtendedSelect – если ExtendedSelect= true и MultiSelect= true, то выбор нескольких элементов можно производить стандартным спосо-

бом, т.е. при нажатой клавише Shift можно выбрать несколько элементов,

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

Count – общее количество элементов в компоненте.

ItemIndex – индекс выбранного элемента (при MultiSelect= false).

Если выбрано несколько элементов (MultiSelect= true), то содержит ин-

декс элемента, на котором установлен фокус.

Selected[i] – если выбран элемент с индексом i, то значение этого свой-

ства равно true.

Sorted – если равно true, то элементы компонента автоматически сорти-

руются.

Рассмотрим несколько примеров для того, чтобы освоить простейшую тех-

нику работы с этим компонентом. Поместите на форму два компонента

TListBox и три кнопки, так как показано на рис. 6.61.

Заполним программно ListBox1 содержимым текстового файла, в кото-

ром содержатся фамилии, допустим студентов. Затем будем просто помещать выбранные элементы в ListBox2. Сначала реализуем выбор одиночного эле-

мента.

617

6.3 Визуальное программирование в среде Lazarus

____________________________________________________________________

Рис. 6.61. Форма приложения

Вот код этой программы:

unit Unit1;

{$mode objfpc}{$H+} interface

uses

Classes, SysUtils, FileUtil, LResources, Forms,

Controls, Graphics, Dialogs, StdCtrls;

type

{ TForm1 }

TForm1 = class(TForm)

Button1: TButton;

Button2: TButton;

Button3: TButton;

ListBox1: TListBox;

ListBox2: TListBox;

procedure Button1Click(Sender: TObject); procedure Button2Click(Sender: TObject); procedure Button3Click(Sender: TObject);

618

Глава 6 Программирование приложений с графическим интерфейсом

____________________________________________________________________

procedure FormCreate(Sender: TObject); private

{private declarations } public

{public declarations } end;

var

Form1: TForm1; implementation { TForm1 }

procedure TForm1.Button2Click(Sender: TObject); begin

with ListBox1 do begin

if ItemIndex >= 0 then ListBox2.Items.Add(Items[ItemIndex]);

end;

end;

procedure TForm1.Button1Click(Sender: TObject); begin

ListBox2.Clear;

end;

procedure TForm1.Button3Click(Sender: TObject); begin

Close;

end;

procedure TForm1.FormCreate(Sender: TObject); var

tfile: TStringList;

619

6.3 Визуальное программирование в среде Lazarus

____________________________________________________________________

str: string; begin

tfile:= TStringList.Create; tfile.LoadFromFile('List.txt'); str:= tfile.Text;

{$IFDEF WINDOWS}

str:= SysToUTF8(str); // преобразование в кодировку UTF-8

{$ENDIF}

with ListBox1 do begin

Items.Text:= str; end;

tfile.Free;

end; initialization

{$I unit1.lrs} end.

Если установить в ListBox2 свойство Sorted = true, то элементы будут выведены в отсортированном виде. При добавлении нового элемента, он будет помещен в нужное место автоматически.

В этой реализации, если при одном и том же выбранном элементе нажать на кнопку "Копировать" несколько раз, то этот элемент попадет в ListBox2

также несколько раз, т.е. строки в ListBox2 окажутся не уникальными.

Чтобы элементы в ListBox2 не повторялись, напишем функцию, кото-

рая проверяет не содержится ли уже этот элемент в ListBox2. Если такой элемент имеется, функция возвращает true, если нет, то false.

unit Unit1;

620

Глава 6 Программирование приложений с графическим интерфейсом

____________________________________________________________________

{$mode objfpc}{$H+} interface

uses

Classes, SysUtils, FileUtil, LResources, Forms,

Controls, Graphics, Dialogs, StdCtrls;

type

{ TForm1 }

TForm1 = class(TForm)

Button1: TButton;

Button2: TButton;

Button3: TButton;

ListBox1: TListBox;

ListBox2: TListBox;

procedure Button1Click(Sender: TObject); procedure Button2Click(Sender: TObject); procedure Button3Click(Sender: TObject); procedure FormCreate(Sender: TObject); function Search(str: string): boolean;

private

{private declarations } public

{public declarations } end;

var

Form1: TForm1; implementation { TForm1 }

function TForm1.Search(str: string): boolean; var

621

6.3 Визуальное программирование в среде Lazarus

____________________________________________________________________

i: integer; begin

Result:= false;

for i:= 0 to ListBox2.Count - 1 do if ListBox2.Items[i] = str then begin

Result:= true; exit;

end

else Result:= false; end;

procedure TForm1.Button2Click(Sender: TObject); begin

with ListBox1 do begin

if (ItemIndex >= 0) and (not Search(GetSelectedText)) then ListBox2.Items.Add(Items[ItemIndex]);

end;

end;

procedure TForm1.Button1Click(Sender: TObject); begin

ListBox2.Clear;

end;

procedure TForm1.Button3Click(Sender: TObject); begin

Close;

end;

procedure TForm1.FormCreate(Sender: TObject); var

622

Глава 6 Программирование приложений с графическим интерфейсом

____________________________________________________________________

tfile: TStringList; str: string;

begin

tfile:= TStringList.Create; tfile.LoadFromFile('List.txt'); str:= tfile.Text;

{$IFDEF WINDOWS}

str:= SysToUTF8(str); // преобразование в кодировку UTF-8

{$ENDIF}

with ListBox1 do begin

Items.Text:= str; end;

tfile.Free;

end; initialization

{$I unit1.lrs} end.

Реализуем теперь множественный выбор. Обработчик события

Button2Click несколько видоизменится, т.к. при множественном выборе для того, чтобы определить выбран ли этот элемент или нет, необходимо ис-

пользовать свойство Selected.

unit Unit1;

{$mode objfpc}{$H+} interface

uses

Classes, SysUtils, FileUtil, LResources, Forms,

Controls, Graphics, Dialogs, StdCtrls;

623

6.3 Визуальное программирование в среде Lazarus

____________________________________________________________________

type

{ TForm1 }

TForm1 = class(TForm)

Button1: TButton;

Button2: TButton;

Button3: TButton;

ListBox1: TListBox;

ListBox2: TListBox;

procedure Button1Click(Sender: TObject); procedure Button2Click(Sender: TObject); procedure Button3Click(Sender: TObject); procedure FormCreate(Sender: TObject); function Search(str: string): boolean;

private

{private declarations } public

{public declarations } end;

var

Form1: TForm1; implementation { TForm1 }

function TForm1.Search(str: string): boolean; var

i: integer; begin

Result:= false;

for i:= 0 to ListBox2.Count - 1 do if ListBox2.Items[i] = str then

624

Глава 6 Программирование приложений с графическим интерфейсом

____________________________________________________________________

begin

Result:= true; exit;

end

else Result:= false; end;

procedure TForm1.Button2Click(Sender: TObject); var

i: integer; begin

with ListBox1 do

for i:= 0 to Items.Count - 1 do begin

if (Selected[i]) and (not Search(Items[i])) then

ListBox2.Items.Add(Items[i]);

end;

end;

procedure TForm1.Button1Click(Sender: TObject); begin

ListBox2.Clear;

end;

procedure TForm1.Button3Click(Sender: TObject); begin

Close;

end;

procedure TForm1.FormCreate(Sender: TObject); var

tfile: TStringList;

625

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]