КАТЕГОРИИ: Архитектура-(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; Просмотров: 532; Нарушение авторских прав?; Мы поможем в написании вашей работы! Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет |