Студопедия

КАТЕГОРИИ:


Архитектура-(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)

Интерфейс Drag and Drop




Begin

Implementation

Type

End.

Работа с потоками реализована в обработчиках OpenButtonclick и SaveButtonClick, в которых соответственно выполняется чтение файла в поток Readstream и запись потока SaveStream в файл. Компонент TChart работает с собственным типом бинарных файлов. Потоки Readstream и SaveStream корректно записывают и воспроизводят информацию. В данном случае информация складывается из целых чисел в следующей последова­тельности: точки графиков, признак меток (преобразуется в булевый тип из числа), виды графиков и их цвета.

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

В данном примере рассмотрим работу с потоками в памяти (Tmem-oryStream).

Пусть вводится информация о некоторых спортивных соревнованиях. Примем для упрощения, что необходимо ввести порядковый номер участни­ка и время, которое он показал. Эту информацию далее необходимо отсор­тировать в порядке возрастания по времени и записать в файл. Пусть пока­занное участниками соревнования время колеблется от 20 до 35 минут и


пусть оно генерируется в программе с помощью генератора случайных чи­сел. Ниже приводится программа решения данного примера.

unit prim22; interface

uses Windows,Messages,SysUtils,Variants,Classes,Graphics, Controls,Forms,Dialogs,ExtCtrls,StdCtrls,StrUtils,Buttons;

TForm1 = class(TForm)

Panel1: TPanel;

OpenDialog1: TOpenDialog;

SaveDialog1: TSaveDialog;

Memo1: TMemo;

Memo2: TMemo;

МеmоЗ: TMemo;

Label1: TLabel;

Label2: TLabel;

Label3: TLabel;

BitBtnl: TBitBtn;

Button1: TButton;

GroupBox1: TGroupBox;

CheckBox1: TCheckBox;

CheckBox2: TCheckBox;

procedure Button1Click (Sender: TObject);

end;

Res=record

n:word;

t:TDateTime;

end;

const k=50;

var Form1: TForm1;

{$R *.dfm}

function ResToStr(r:Res): string;

var s:string;

s:=IntToStr(r.n);

Result:=StringOfChar (' ',4-length(s))+

s+’ ’+FormatDateTime('nn.ss1,r.t);

end;

procedure TForm1.Button1Click (Sender: TObject);

var i,m:Integer;

TRes,VRes:Res;

CurrentFile,s:string;

MyMemoryStream:TMemoryS tream;

begin

Randomize;

Memo1.Lines.Clear;


memo2.Lines.Clear; MyMemoryStream:=nil; try

MyMemoryStream: =TMemoryStream.Create; MyMemoryStream.SetSize (k*SizeOf (Res)); for i:= 1 to к do begin

Tres.n:=i;

TRes.t:=0.014+0.01*Random; MyMemoryStream.Write(TRes,SizeOf(Res)); s:=ResToStr(TRes);

memo1.Lines.Add(s);

end;

for m:=k-l downto 1 do begin

MyMemoryStream.Seek(m*SizeOf(Res) ,0); MyMemoryStream.Read(VRes, SizeOf(Res)); for i:=l to m do begin

MyMemoryStream.Seek((i-1)*SizeOf(Res),0); MyMemoryStream.Read(TRes,SizeOf(Res));

if Tres.t > Vres.t then begin

 

MyMemoryStream.Seek((i-1)«SizeOf(Res),0); MyMemoryStream.Write(VRes,SizeOf(Res)); VRes:=TRes;

end;

end;

MyMemoryStream.Seek(m*SizeOf(Res),0); MyMemoryStream.Write(VRes,SizeOf(Res)); end;

MyMemoryStream.Seek(0,0);

for i:= 1 to к do begin MyMemoryStream.Read(TRes, SizeOf(Res)); s:=ResToStr(TRes);

memo2.Lines.Add(s);

end;

if CheckBox1.Checked then

if SaveDialog1.Execute then begin CurrentFile:= SaveDialog1.Filename; MyMemoryStream.SaveToFile(CurrentFile); end;

if CheckBox2.Checked then if OpenDialog1.Execute then begin CurrentFile:= OpenDialog1.Filename; MyMemoryStream.Clear;

MyMemoryStream.LoadFromFile(CurrentFile) memo3.Clear;

MyMemoryStream.Seek(0, 0); for i:= 1 to к do begin

MyMemoryStream.Read(TRes,SizeOf(Res)); s:=ResToStr(TRes);


memo3.Lines.Add(s); end; end; finally

MyMemoryStream.Free; end; end; end.

Вариант решения примера приведен на рис. 50, где показано, что отсор­тированные данные (второй столбец) из потока в памяти корректно записы­ваются в файл (третий столбец).

Рис. 50

Для настройки диалоговых компонентов можно воспользоваться табл. 15, задав какое-либо расширение файлов, например, *.dat. Это расширение необходимо также записать в свойство DefaultExt (задать dat). В примере показана работа потока при чтении и записи, а также его взаимодействие с файлами.

Интерфейс Drag and Drop обеспечивает один из механизмов взаимо­действия двух элементов управления во время выполнения приложения. При


этом могут выполняться различные операции переноса и приема данных или перемещения элемента, например, на форме. Для того чтобы этот механизм заработал, требуется настроить соответствующим образом с помощью обра­ботчиков событий и инспектора объектов некоторые заданные элементы управления. В заданной паре один должен быть источником (Source), другой -приемником (Target).

Пользователь помещает указатель мыши на нужный элемент, нажимает левую кнопку мыши и, не отпуская ее, начинает перемещение курсора ко второму элементу. При достижении этого элемента пользователь отпускает кнопку мыши. В этот момент выполняются предусмотренные разработчиком действия. Среди этих действий могут быть передача текста, значений свойств, шрифта, простое перемещение с места на место и т.д. Таким обра­зом, Drag and Drop - средство связывания двух компонентов при помощи указателя мыши.

Любой элемент управления является изначально источником в механиз­ме Drag and Drop. Его поведение на начальном этапе настраивается с помо­щью свойства Property DragMode: TDragMode, где Type TDragMode = (dmManual, dmAutomatic);.

Значение dmAutomatic обеспечивает автоматическую реакцию компо­нента на нажатие левой кнопки мыши - механизм перетаскивания включает­ся самостоятельно. Значение dmManual (установлено по умолчанию) требует от разработчика обеспечить включение специфических действий при пере­таскивании.

Для инициализации переноса в источнике используется метод Begxn-Drag (если не включено dmAutomatic), который можно включить, напри­мер, в обработчике OnMouseDown. Приемником может стать любой компо­нент, для которого создан обработчик события onDragOver. Этот обработ­чик вызывается при достижении курсором мыши компонента-приемника. Окончание переноса фиксируется работой обработчика OnDragDrop, в кото­ром можно выполнить некоторые действия в приемнике. Определенные дей­ствия предусмотрены и в источнике с помощью обработчика OnEndDrag, после того как он получит сообщение об окончании операции переноса. Следует отметить, что не любые действия возможно реализовать.

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

Рассмотрим пример по использованию Drag and Drop. В программе, приведенной ниже, представлены почти все вышеуказанные виды обработ­чиков событий по реализации данного интерфейса.

unit Prim23;




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


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


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



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




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