Форум — Ответы     (  К темам )
 ?  Новичок: TDrawGrid (21-11-2002 16:43:19)
Привет ребята!
Помогите пожалуйста новичку!
Поставил CBuilfer, начал изучать его, до этого пользовался Borland C 3 версии.
Захотел сделать несложный редактор карты для своей аркадки. Посмотрел , какие там существуют компоненты — для меня очень полезным оказался TDrawGrid. Он как раз позволяет расставлять спрайтики одинаковго размера. Почитал HELP — вообще не понял как с ним работать.
Расскажите пожалуйста:
как его создать правильно.
как поместить в ячейку картинку или текст и получить оттуда

Спасибо всем большое, кто поможет мне.
 Владимир (21-11-2002 20:09:28)
Итак, начинаем читать help к Builder, но поскольку он тьфу...сволочь...английский,
запускаем пиратский переводчик Promt XT, немного редактируем и вот что
приблизительно получаем:

TDrawGrid — таблица рисунков
Используется для отображения в строках и столбцах нетекстовых данных.

TDrawGrid отображает произвольные данные в табличном формате.
Напишите OnDrawCell обработчик, чтобы заполнить ячейки сетки.
>Напишите OnDrawCell обработчик, чтобы рисовать содержание всех ячеек в сетке. Рисуйте в ячейке, используя методы свойства Canvas. Параметр Rect указывает местоположение ячейки на холсте.Col и Row указывают столбец и индексы строки ячейки, которая должна быть перерисована. Параметр State указывает, имеет ли ячейка фокус ввода, выбрана ли ячейка, и является ли ячейка фиксированной.
Если OnDrawCell обработчик не назначен, все ячейки в draw grid будут казаться пустыми. Если DefaultDrawing свойство — true, draw grid paints цвет фона ячейки перед OnDrawCell событием, и рисует прямоугольник вокруг выбранной ячейки после того, как OnDrawCell обработчик заканчивает рисовать содержание ячейки. Если DefaultDrawing свойство — false, OnDrawCell обработчик должен красить фон ячейки и обеспечивать всю визуальную индикацию относительно выбора и фокуса..

CellRect метод возвращает координаты экрана указанной ячейки, в то время как MouseToCell метод возвращает столбец и строку ячейки в указанных аппаратных координатах устройства. Свойство Selection указывает границы в настоящее время выбранных ячеек.
TopRow свойство определяет, какая строка является в настоящее время наверху сетки. LeftCol свойство определяет первый видимый столбец слева. VisibleColCount и VisibleRowCount — номер столбцов и строк, видимых в сетке.
Вы можете изменить ширину или высоту столбца или строки с ColWidths и RowHeights свойствами. Установите ширину линий координатной сетки с GridLineWidth свойством. Добавьте полосы прокрутки к сетке со свойством ScrollBars.
Вы можете выбрать зафиксировать или нет прокрутку столбцов и строк с FixedCols и FixedRows свойствами. Установить цвет на зафиксированные столбцы и строки можно FixedColor свойством.
Options, DefaultColWidth, и DefaultRowHeight свойства также затрагивают вид и поведение сетки.

Если ячейки сетки содержат текстовые строки, лучше использовать TStringGrid.
Если сетка отображает значения полей DataSet, используйте лучше TDBGrid.

Смотрим прилагающийся пример:
Следующий код использует bitmaps в image list component , чтобы рисовать содержание каждой ячейки в draw grid.
It draws a focus rectangle around the cell that has focus

void __fastcall TForm1::DrawGrid1DrawCell(TObject *Sender, long Col, long Row, TRect &Rect, TGridDrawState State)
{
long index = Row * DrawGrid1->ColCount + Col;
DrawGrid1->Canvas->Brush->Color = clBackground;
DrawGrid1->Canvas->FillRect(Rect);
ImageList1->Draw(DrawGrid1->Canvas,Rect.Left,Rect.Top,index);
if (State.Contains(gdFocused)) DrawGrid1->Canvas->DrawFocusRect(Rect);
}



Кроме того, в библиотеке компонентов RXLib есть компонента TRxDrawGrid
там к ней есть и русский help:


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

В 32-разрядной реализации компоненты Вы можете указать стиль строки редактирования для каждой ячейки (например, задав выпадающий список для редактора или определив событие на нажатие кнопки справа от строки редактора) с помощью события OnGetEditStyle.
Кроме того, для доступа к строке редактирования в ячейке таблицы свойство InplaceEditor вынесено в секцию public, и имеется ряд дополнительных полезных событий.
Компонента имеет дополнительные методы DrawStr, DrawMultiline, DrawPicture и DrawMasked для рисования в ячейках таблицы (grid) текста, картинок и "прозрачных" битовых изображений.
и т.д.  — русский help к RxLib здесь
 Владимир (21-11-2002 21:34:18)
//---------------------------------------------------------------------------
// DrawGrid — от него произошел компонент StringGrid,
// обладающий большими возможностями !
// компонент DrawGrid имеет канву Canvas, на которой различными методами
// можно размещать изображения, в тч есть метод CellRect, который
// возвращает область канвы, отведенную под заданную ячейку, он определен так
// Windows::TRect __fastcall CellRect(int ACol, int ARow); в котором
// ACol, ARow — индексы столбца и строки, начинающиеся с 0, на пересечении
// которых расположена ячейка, те эта функция возвращпет область канвы, на
// которой можно рисмовать изображение

// поместить изображение можно например, так:
void __fastcall TForm1::BitBtn1Click(TObject *Sender)
{
TImage* BitMap = new TImage(this);
BitMap->Picture->LoadFromFile("c:\img.bmp");
DrawGrid1->Canvas->CopyRect(DrawGrid1->CellRect(2,3),
BitMap->Canvas,Rect(0,0,BitMap->Height, BitMap->Width));
delete BitMap;
}
//---------------------------------------------------------------------------
// здесь мы из файла img.bmp считываем изображение и копируем его методом
// CopyRect в ячейку (2,3) таблицы DrawGrid1

А вообще — купите книгу Архангельского А.Я. по C++Builder 5 или 6,
там очень просто и ясно все изложено про очень многие компоненты,
или купите у него Help на русском языке, тоже очень удобно.