На этом шаге мы рассмотрим компонент TRxDrawGrid.
Компонент TRxDrawGrid (рис.1) - наследник TDrawGrid - наследует все свойства и методы этого компонента, и имеет некоторые дополнительные возможности.
Рис.1. Компонент TRxDrawGrid
Так, при редактировании текста в строке редактирования ячейки таблицы, событие OnSetEditText вызывается не при каждом изменении содержимого строки ввода, а только при выходе из режима редактирования. Во время заполнения текста в строке редактирования вызываются события OnAcceptEditKey и OnEditChange, позволяющие разрешить или запретить ввод определенных символов в строку редактирования.
В 32-разрядной реализации компоненты Вы можете указать стиль строки редактирования для каждой ячейки (например, задав выпадающий список для редактора или определив событие на нажатие кнопки справа от строки редактора) с помощью события OnGetEditStyle.
Кроме того, для доступа к строке редактирования в ячейке таблицы свойство InplaceEditor вынесено в секцию public, и имеется ряд дополнительных полезных событий.
Компонент имеет дополнительные методы DrawStr, DrawMultiline, DrawPicture и DrawMasked для рисования в ячейках таблицы текста, картинок и "прозрачных" битовых изображений.
Некоторые свойства компонента:
Свойство | Описание |
---|---|
property OnAcceptEditKey: TAcceptKeyEvent; | Событие происходит, если свойство Options содержит значение goEditing и пользователь редактирует текст в ячейке таблицы при нажатии символьных клавиш на клавиатуре. Можно обработать это событие так, чтобы запретить, например, ввод определенных символов в строку редактирования и т.д. |
type TAcceptKeyEvent = function (Sender: TObject; var Key: Char): Boolean of object; |
Тип предназначен для определения методов - обработчиков события OnAcceptEditKey. |
property OnEditChange: TNotifyEvent; | Событие возникает при изменении текста в редакторе компонента TRxDrawGrid в режиме редактирования содержимого ячейки. Можно обработать событие OnEditChange, например, для проверки правильности ввода данных в строке редактирования. |
property OnGetEditStyle: TEditStyleEvent; | OnGetEditStyle происходит, когда редактор запрашивает стиль
редактирования.
Параметр Style определяет, как пользователи могут редактировать
данные ячейки сетки. Возможные значения:
|
property OnGetPicklist: TPicklistEvent; | OnGetPicklist происходит, когда возникает запрос на выбор строки из списка. Вы должны заполнить содержание списка PickList, добавляя возможные объекты к списку. Событие происходит, если свойство Options содержит значение goEditing. |
type TPicklistEvent = procedure (Sender: TObject; ACol, ARow: Longint; PickList: TStrings) of object; |
Тип предназначен для определения методов - обработчиков события OnGetPicklist. |
procedure DrawStr (ARect: TRect; const S: string; Align: TAlignment); | Метод предназначен для отрисовки строки в ячейке таблицы (в одну строку) с заданным выравниванием. Можно вызвать этот метод в обработчике события OnDrawCell. |
procedure DrawMultiline (ARect: TRect; const S: string; Align: TAlignment); | Метод предназначен для отрисовки строки текста в ячейке таблицы (в несколько строк, если весь текст не входит по ширине в ячейку) с заданным выравниванием. Можно вызвать этот метод в обработчике события OnDrawCell. |
procedure DrawPicture (ARect: TRect; Graphic: TGraphic); | Метод предназначен для отрисовки графического изображения в ячейке таблицы. Изображение рисуется в центре переданного прямоугольника ARect. Можно вызвать этот метод в обработчике события OnDrawCell. |
procedure DrawMasked (ARect: TRect; Graphic: TBitmap); | Метод предназначен для отрисовки "прозрачного" битового изображения (Bitmap) в ячейке таблицы. Изображение рисуется в центре переданного прямоугольника ARect. В качестве "прозрачного" цвета используется цвет левого нижнего пикселя битового изображения. Можно вызвать этот метод в обработчике события OnDrawCell. |
Приведем пример: создадим приложение, в котором TRxDrawGrid используется для показа картинок и их названий, причем текст можно редактировать.
Поместим на форму RxDrawGrid1 (рис.2):
Рис.2. Форма с размещенным на ней компонентом RxDrawGrid1
Зададим для компонента следующие значения свойств:
Т.к. компонент TRxDrawGrid является наследником компонента TDrawGrid, то для заполнения таблицы можно воспользоваться программой из шага 6 (Вкладка Additional. Компонент TDrawGrid).
Процедуры:
для компонента TRxDrawGrid будут абсолютно такими же, как и для компонента TDrawGrid.
Остановимся подробнее на следующих процедурах.
Для компонента RxDrawGrid1 напишем обработчик события OnDrawCell:
procedure TForm1.RxDrawGrid1DrawCell(Sender: TObject; ACol, ARow: Integer; Rect: TRect; State: TGridDrawState); var k: integer; begin //Пересчитываем координаты ячейки в индекс списка k:= 2*ACol + ARow; with RxDrawGrid1.Canvas, Rect, slBitMap do begin //Выравниваем текст по правому краю и выводим RxDrawGrid1.DrawStr(Rect,slBitMap[k],taRightJustify); //рисуем картинку RxDrawGrid1.DrawPicture(Rect, (Objects[k] as TBitMap)); end; end;
Для компонента RxDrawGrid1 напишем обработчик события OnGetEditStyle:
procedure TForm1.RxDrawGrid1GetEditStyle(Sender: TObject; ACol,ARow: Integer; var Style: TInplaceEditStyle); begin Style:=iePicklist; //Задаем стиль ячейки end;
Для компонента RxDrawGrid1 напишем обработчик события OnGetPicklist:
procedure TForm1.RxDrawGrid1GetPicklist(Sender: TObject; ACol, ARow: Integer; PickList: TStrings); begin PickList[0]:='1.bmp'; PickList[1]:='2.bmp'; PickList[2]:='3.bmp'; PickList[3]:='4.bmp'; //зададим значения раскрывающегося списка end;
Работа программы показана на рис.3(а-в).
Рис.3а. Компонент RxDrawGrid1 с отображенными в нем картинками
Рис.3б. Изменение названия картинки 1.BMP с помощью выпадающего списка
Рис.3в. Название картинки 1.BMP изменено на 4.BMP
Текст этого примера можно взять здесь.
На следующем шаге мы рассмотрим компонент TRxSpeedButton.