Шаг 18.
Компоненты библиотеки RX.
Вкладка Controls. Компонент TRxDrawGrid

    На этом шаге мы рассмотрим компонент TRxDrawGrid.

    Компонент TRxDrawGrid (рис.1) - наследник TDrawGrid - наследует все свойства и методы этого компонента, и имеет некоторые дополнительные возможности.


Рис.1. Компонент TRxDrawGrid

    Так, при редактировании текста в строке редактирования ячейки таблицы, событие OnSetEditText вызывается не при каждом изменении содержимого строки ввода, а только при выходе из режима редактирования. Во время заполнения текста в строке редактирования вызываются события OnAcceptEditKey и OnEditChange, позволяющие разрешить или запретить ввод определенных символов в строку редактирования.

    В 32-разрядной реализации компоненты Вы можете указать стиль строки редактирования для каждой ячейки (например, задав выпадающий список для редактора или определив событие на нажатие кнопки справа от строки редактора) с помощью события OnGetEditStyle.

    Кроме того, для доступа к строке редактирования в ячейке таблицы свойство InplaceEditor вынесено в секцию public, и имеется ряд дополнительных полезных событий.

    Компонент имеет дополнительные методы DrawStr, DrawMultiline, DrawPicture и DrawMasked для рисования в ячейках таблицы текста, картинок и "прозрачных" битовых изображений.

    Некоторые свойства компонента:

Таблица 1. Свойства и методы компонента TRxDrawGrid
Свойство Описание
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 определяет, как пользователи могут редактировать данные ячейки сетки. Возможные значения:
  • ieSimple – ни одна ячейка таблицы не связана с кнопкой, т.е. пользователь не может выбрать содержание ячейки от списка;
  • iePicklist – ячейка становится во время редактирования строкой редактирования с кнопкой , и пользователь может выбрать значение из раскрывающегося списка. Вы должны определить содержание списка, обращаясь к OnGetPicklist;
  • ieEllipsis - ячейка становится во время редактирования строкой редактирования с кнопкой , которую пользователь может нажать, чтобы выбрать значение. Щелчок кнопки вызывает OnEditButtonClick.
Событие происходит, если свойство Options содержит значение goEditing.
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.




Предыдущий шаг Содержание Следующий шаг