Заглавная страница Избранные статьи Случайная статья Познавательные статьи Новые добавления Обратная связь FAQ Написать работу КАТЕГОРИИ: АрхеологияБиология Генетика География Информатика История Логика Маркетинг Математика Менеджмент Механика Педагогика Религия Социология Технологии Физика Философия Финансы Химия Экология ТОП 10 на сайте Приготовление дезинфицирующих растворов различной концентрацииТехника нижней прямой подачи мяча. Франко-прусская война (причины и последствия) Организация работы процедурного кабинета Смысловое и механическое запоминание, их место и роль в усвоении знаний Коммуникативные барьеры и пути их преодоления Обработка изделий медицинского назначения многократного применения Образцы текста публицистического стиля Четыре типа изменения баланса Задачи с ответами для Всероссийской олимпиады по праву Мы поможем в написании ваших работ! ЗНАЕТЕ ЛИ ВЫ?
Влияние общества на человека
Приготовление дезинфицирующих растворов различной концентрации Практические работы по географии для 6 класса Организация работы процедурного кабинета Изменения в неживой природе осенью Уборка процедурного кабинета Сольфеджио. Все правила по сольфеджио Балочные системы. Определение реакций опор и моментов защемления |
Редактирование значений в TDrawGridСодержание книги
Поиск на нашем сайте
Для отображения значений в TDrawGrid необходимо реализовать обработчик события OnDrawCell. Пример:
procedure TForm1.dgMtrDrawCell(Sender: TObject; ACol, ARow: Integer; Rect: TRect; State: TGridDrawState); var V: Integer; begin if ACol=0 then begin if ARow=0 then Exit; V:= ARow end else if ARow=0 then V:= ACol else V:= ACol*ARow; dgMtr.Canvas.TextRect(Rect,Rect.Left+3,Rect.Top+1,IntToStr(V)); end;
Для того, чтобы значения в TDrawGrid можно было редактировать необходимо включить флаг goEditing в Options и реализовать обработчик события On GetEditText. Пример:
procedure TForm1.dgMtrGetEditText(Sender: TObject; ACol, ARow: Integer; var Value: String); begin Value:= IntToStr(FMtr[ARow-1, ACol-1]); end;
(здесь FMtr – массив значений ячеек)
Для того, чтобы значения, отредактированные в TDrawGrid, сохранялись необходимо реализовать обработчик события On SetEditText. Пример: procedure TForm1.dgMtrSetEditText(Sender: TObject; ACol, ARow: Integer; const Value: String); var V: Integer; begin if TryStrToInt(Value,V) then FMtr[ARow-1, ACol-1]:= V; end;
(здесь FMtr – массив значений ячеек)
50. Работа с компонентом TListView. Отображение в ListView больших объёмов данных в виртуальном режиме (OwnerData=true). Компонент Список элементов (TListView) В отличие от компонента TListBox, представляющего собой стандартный список строк, существующий еще с первых версий Windows, список элементов содержит значительно больше возможностей представления информации. ВНИМАНИЕ Данный компонент ориентирован на представление данных в виде структуры "объект — набор свойств", например файлов вместе со своими характеристиками: размером, датой создания, атрибутами. Использовать его как список однородной информации некорректно.
Первоначально, сразу после создания, в списке не содержится ни одного элемента. Режим его будущей работы определяется значением свойства ViewStyle. Возможны следующие значения. VsIcon Каждый элемент представлен полноразмерным значком с подписью, который можно перетаскивать. Так работают папки Windows 9x в режиме Крупные значки v sSmallIcon Каждый элемент представлен маленьким значком с подписью справа от него. Эти значки можно перетаскивать. Так работают папки Windows 9x в режиме Мелкие значки VsList Каждый элемент представлен маленьким значком с подписью справа от него. Эти значки, расположенные по столбцам, перетаскивать нельзя. Там работают папки Windows 9x в режиме Список VsReport Объект работает как обычный список с несколькими столбцами
Число и свойства столбцов задаются в свойстве Columns, которое представляет собой коллекцию объектов THnaTListColumn. Основное их свойство — Caption. Оно содер- жит заголовок столбца. Пользователь может редактировать его во время работы программы, если значение свойства списка Readonly не равно True и если заголовки не работают в режиме кнопок.
Выбор элементов может выполняться путем ввода первых букв имени, при этом фокус перескакивает по элементам списка в соответствии с набранной пол ьзователем строкой. Данные для списка формируются в свойстве Items (тип TListltems), представляю- щим собой список объектов типа TListItem. Эти объекты можно создавать на этапе проектирования с помощью специального редактора (рис. 4.20, стр 285). После щелчка на кнопке New Item (Новый элемент) в поле Caption (Заголовок) задается его имя, в поле Image Index (Номер рисунка) — номер рисунка (значка) из списка рисун- ков LargeImages или SmallImages (см. ниже), в поле State Index (Номер состояния) — номер рисунка из списка рисунков StateImages. Каждый элемент, в свою очередь, может состоять из нескольких вложенных элементов (больший уровень вложенности не допускается), представляющих собой, по замыслу создателей, свойства этого элемента. Названия элементов и номера картинок хранятся в свойстве Items, а обратиться к вложенным объектам (свойствам) можно через подсвойство SubItems (см, далее).
Настройка структуры и внешнего вида списка осуществляется с помощью свойств: АllосВу Число элементов списка, хранимое в памяти. Управляя этим значением, можно существенно повысить быстродействие некоторых операций по работе со списком, например сортировки Checkboxes Имеет значение True, если в начале каждой строки списка отображается флажок ColumnClick Имеет значение True, если заголовкам столбцов разрешено работать в режиме кнопок: допустимы щелчки на заголовках и обработка этих щелчков. Такая возможность полезна для сортировки содержимого списка щелчком на его заголовке FlatScrollBars Имеет значение True, если полосы прокрутки должны выглядеть плоскими FullDrag Имеет значение True, если разрешается полностью перерисовывать заголовки столбцов во время перетаскивания, а не только отображать границы GridLines Имеет значение True, если между элементами списка рисуются разделительные линии HideSelection Имеет значение True, если выделение текущего элемента списка автоматически сбрасывается при переключении фокуса на другой элемент формы. Такая возможность используется, когда ведется одновременная работа с несколькими списками, что позволяет быстро определить, какой список имеет фокус HotTrack Имеет значение True, если выбор элемента осуществляется наведением на него указателя (без щелчка) HotTrackStyles Если значение свойства HotTrack равно True, то способ выделения элемента определяется комбинацией значений данного свойства (множества). Возможные значения — htHandPoint (указатель мыши принимает вид руки), htUnderLineCold (невыделенные элементы подчеркиваются), htUnderLineHot (выделенный элемент подчеркивается) HoverTime Если значение свойства HotTrack равно True, то данное свойство определяет время (в миллисекундах), по истечении которого после наведения на него указателя элемент будет считаться выделенным IconOptions Способ упорядочения значков в списке. Имеет три подсвойства. Подсвойство Arrangement определяет порядок выравнивания (слева направо или сверху вниз), Подсвойство AutoArrange определяет, будут ли значки переупорядочиваться автоматически. Подсвойство WrapText определяет, будет ли заголовок выравниваться по ширине значка илирасполагаться слева от него LargeImages Список картинок-значков. Стиль отображения определен значением vsIcon MultiSelect Имеет значение True, если разрешается выбирать несколько элементов списка OwnerData Имеет значение True, если обработка содержимого списка выполняется в тексте программы. Подобный список называется виртуальным, и разработчик берет на себя программирование его основных функций,связанных с динамическим формированием значений элементов.Это требуется при обработке больших наборов данных OwnerDraw Имеет значение True, если рисование списка и его элементов явно выполняется в тексте программы по алгоритму разработчика RowSelect Имеет значение True, если разрешается выделять целую строку списка ShowColumnHeaders Имеет значение True, если отображаются заголовки столбцов SmallImages Список картинок-значков. Стиль отображения определен значением,отличающимся от vsIcon SortType Способ автоматической сортировки списка. Возможные значения — stNone (сортировка не выполняется), stData (сортировка выполняется на основе значений свойства Data каждого элемента списка), stText (сортировка выполняется на основе значений свойства Caption каждого элемента списка), stBoth (сортировка выполняется на основе значений как свойства Data, так и свойства Caption) Statelmages Список картинок, отражающих промежуточное состояние объекта
ВНИМАНИЕ Общая идеология работы данного компонента не меняется при переходе к различным формам его внешнего представления и отражает работу папок Windows 9x. В крайнем левом столбце отображается значок, затем идут его имя и свойства. Над каждым столбцом выводится заголовок. В режиме vsReport самый левый столбец (с номером 0) содержит имя элемента, а все последующие — именно его свойств, что соответствует классическому представлению файлов папки.
Пример:
Рассмотрим работу списка элементов в различных режимах на примере. Заранее надо подготовить три набора картинок (значков) по три элемента в каждом. Они будут указаны в свойствах LargeImages, SmallImages и StateImages. Установим для свойства ViewStyle значение vsReport. Редактируя свойство Columns, создадим три столбца: КО, К1 и К2 (рис. 4.21, стр 287). С помощью редактора свойства Items добавим три элемента Э1, Э2 и Э3, каждый из которых будет иметь по два подсвойства СЭ*1 и СЭ*2. Звездочкой здесь обозначен номер элемента (рис. 4.22, стр 287). Укажем для каждого элемента номер его картинки. Список примет вид, показан- ный на рис. 4.23, стр 287.
Теперь можно откомпилировать и запустить программу. Размеры столбцов регулируются с помощью мыши стандартным способом. Добавим на форму четыре кнопки. Каждая из них будет отвечать за представление списка в ином режиме. procedure TForrnl.ButtonlClick (Sender: TObject),- begin ListViewl.ViewStyle:= vsReport; end; procedure TForml.Button2Click(Sender: TObj ect); begin ListViewl.ViewStyle:= vsIcon; end; procedure TForml.Button3Click(Sender: TObject]; begin ListViewl.ViewStyle:= vsSmallIcon; end; procedure TForml. Button4Click (Sender: TObject),- begin ListViewl.ViewStyle:= vsList; end; Как только изменяется значение свойства ViewStyLe, тут же изменяется и внешний вид списка. Теперь научимся заполнять список динамически, во время работы программы. Допустим, требуется показывать содержимое заданного каталога: список имен всех вложенных каталогов и файлов с их характеристиками (датой создания, размером и признаками "скрытый" и "системный"). Таким образом, всего столбцов в списке будет пять, а сам список будет работать в режиме vsReport. Создадим новое приложение и разместим на нем пустой список, текстовое поле и кнопку. Для визуального разделения файлов и папок подготовим список (ImageList) из двух маленьких значков, первый из которых (под номером 0) соответствует файлу, а второй (под номером 1) — папке. В обработчике создания формы сформируем структуру списка и определим его внешний вид. Для добавления и настройки свойств нового столбца используется метод Add свойства Columns, который создает новый объект класса TListColumn и возвращает ссылку на него. Заключительный цикл устанавливает ширину каждого столбца равной 150 пикселам. procedure TForml.FormCreate(Sender: TObj e c t); var NewColunm: TListColumn; i: integer; begin with ListViewl do begin ViewStyle: = vsReport; NewColumn:= Columns.Add; NewColumn.Caption:= 'Название'; NewColumn:= Columns.Add; HewColumn.Caption:= 'Дата создания'; NewColumn:= Columns.Add,- NewColumn.Caption:= 'Размер, байтов'; NewColumn:= Columns.Add; HewColumn.Caption:= 'Скрытый'; NewColumn;= Columns.Add,- NewColumn.Caption:= 'Системный'; for i:= 0 to 4 do Columns[i].Width:= 100; end end; Перебор файлов будем выполнять с помощью функций Find First/Find Next, Для этого подготовим процедуру (метод формы TForml), которая будет записывать содержи- мое структуры TSearchRec в конец списка. procedure TForml.AddNewFile(F: TSearchRec); begin with ListViewl.Items.Add, F do begin Caption:= Name; if (Attr and faDirectory) о О then Imagelndex:= 0 else Imagelndex:= 1; SubItems.Add(DateTimeToStr((FileDateToDateTime(Time)))); SubItems.Add(IntToStr(Size)); if (Attr and faHidden] о О then SubItems.Add('да') else SubItems.Add ('нет'); if (Attr and faSysFile) о О then SubItems.Add('да') else SubItems.Add('нет'); end; end; В операторе with используются два параметра. Первый, представляющий собой экземпляр класса TListItem, создается динамически с помощью метода Add, а второй описывает текущую структуру TSearchRec, из которой необходимо извлечь нужную информацию для списка. Первоначально задается название самому элементу списка, а также указывается номер картинки в зависимости от типа файла (каталог или обычный файл). Далее новые строки добавляются с помощью метода Add свойства SubItems, принадлежащего свойству Items, У этого метода один параметр — текстовая спрока, записываемая в свойство Caption. Ее содержимое зависит от наличия или отсутствия различных характеристик у анализируемого файла. В поле Editl будет вводиться полный путь поиска для каталога и маска файла, например С:\*.*. Содержимое этого каталога будет отображаться после щелчка на кнопке Button1. Вот обработчик этого события. procedure TForml.ButtonlClick(Sender: TObject); var F: TSearchRec; fa: integer; begin fa:= faAnyFile; if FindFirst(Edit 1.Text, fa, F] <> 0 then Exit; AddNewFile(F); while FindNext(F) = 0 do AddNewFile(F); FindClosefF); end; После запуска программы и щелчка на кнопке Buttonl будет получен результат, подобный изображенному на рис. 4.24, стр 290. Папки и файлы здесь расположены вперемешку. Это неправильно. Их надо отсорти- ровать в соответствии с номерами картинок: первыми должны идти папки (значе- ние свойства ImageIndex равно 0), за ними — обычные файлы. Сортировка в классе TListView выполняется путем вызова метода AlphaSort, который обычно сортирует все элементы в списке в порядке "возрастания" их имен, если для объекта ListViewl не определен обработчик события OnCompare (Сравнить два элемента). Если же он определен, то сортировка выполняется на основе результатов его работы. Сформируем такой обработчик. Два объекта, Iteml и Item2, будут сравниваться по значениям свойства Imagelndex. Б параметр Compare записывается отрицательное число, если первый объект "меньше" второго; 0, если они равны; положительное число, если первый объект "больше" второго. procedure TForml.ListViewlCompare(Sender: TObject; Iteml, Item2: TListItem; Data: Integer; var Compare: Integer); Begin if Iteml.Imagelndex = Item2.Imagelndex then Compare := 0 else if Iteml.Iraagelndex < Itern2.Imagelndex then Compare:= -1 else Compare:- +1 end; Осталось только добавить в конец метода ButtonlClick вызов сортировки. ListViewl.AlphaSort; Теперь каталоги будут отображаться в списке первыми. Класс TListView содержит немало дополнительных возможностей. В частности, каж- дый элемент списка (класс TListltem) имеет свойство Data (тип Pointer), в котором может храниться произвольная информация, связанная с конкретным элементом.
В заключение приведем перечень наиболее важных методов и событий для класса TListView (приведены ниже). Некоторые методы (например, получение элемента, ближайшего к указанной точке клиентской области) могут показаться на первый взгляд странными. Не надо забывать, что основное назначение данного компонен- та — работа в стиле папок Windows 9x, когда пользователь может щелкать на значке или рядом с ним. procedure Arrange(Code: TList Arrangement); Задает способ выравнивания значков, когда значение свойства ViewStyle равно vsIcon или VsSmallIcon function FindCaption (StartIndex: Integer;Value: string;Partial,Inclusive, Wrap: Boolean):TListltem; Поиск элемента списка, заголовок которого совладает со значением параметра Value. Если параметр Inclusive имеет значение True, то поиск выполняется начинал с элемента с номером, хранящимся в параметре Startlnde x. При этом, если параметр Wrap также имеет значение True, то поиск по достижении конца списка продолжается c его начала. Параметр Partial разрешает не искать полное совпадение заголовков, а использовать значение Value как подстроку function FindData(Startlndex: Integer; Value: Pointer;Inclusive, Wrap: Boolean): TListltem; Аналогично предыдущему, только производится сравнение не заголовков, а связанных с объектом данных (свойство Data) function GetHitTestInfoAt(X, Y: Integer):THitTests; Возвращает подробную информацию об указанной точке клиенткой области. Тип THitTests описывает различные местоположения точки function GetItemAt(X, Y: Integer): TListItem; Возвращает элемент списка, области которого принадлежит указанная точка function GetNearestltem(Point: TPoint;Direction: TSearchDirection): TListltem; Возвращает элемент списка, ближайший к указанной точке по заданному направлению (параметр Direction) function GetNextItem(StartItem: TListItem;Direction: TSearch Direction; States: TItemStates): TListItem; Возвращает элемент списка, следующий за указанным в параметре StartItem в направлении Direction. Если используется список StateImages, то можно учитывать и наличие свойства State function GetSearchString: String; Возвращает текущую строку, которую пользователь ввел для поиска нужного элемента procedure Scroll(DX, DY: Integer); Прокрутка содержимого списка на DX пикселов по горизонтали и DY пикселов по вертикали function StringWidth(S: string): Integer; Возвращает ширину строки S в пикселах с учетом текущего шрифта списка procedure UpdateItems(FirstIndex, LastIndex: Integer); Перерисовка диапазона элементов списка в диапазоне от FirstIndex до LastIndex
|
||||
Последнее изменение этой страницы: 2017-02-21; просмотров: 304; Нарушение авторского права страницы; Мы поможем в написании вашей работы! infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 18.191.233.198 (0.008 с.) |