![]() |
|
| Правила Форума редакция от 22.06.2020 |
|
|||||||
|
|
Окажите посильную поддержку, мы очень надеемся на вас. Реквизиты для переводов ниже. |
|
![]() |
|
|
Опции темы | Опции просмотра |
Language
|
|
|
#1
|
|
Итак, уважаемые программисты! Давайте в этой теме будем делиться своими наработками по работе с ExpressQuantumGrid Suite. Предлагаю на ваше рассмотрение свой код, предназначенный для вставки изображения в ячейку грида из рессурса. Изображение зависит от параметра, который указан в другой ячейке.
Код:
procedure TForm3.cxGrid1DBTableView1DBColumn27CustomDrawCell(
Sender: TcxCustomGridTableView; ACanvas: TcxCanvas;
AViewInfo: TcxGridTableDataCellViewInfo; var ADone: Boolean);
var
ARec: TRect;
APicture: TPicture;
begin
inherited;
if AViewInfo.GridRecord.Values[cxGrid1DBTableView1DBColumn7.Index] = 'Автомобили легковые'
then
begin
ACanvas.Canvas.FillRect( AViewInfo.Bounds );
APicture := TPicture.Create;
APicture.Bitmap.LoadFromResourceName(HInstance, 'Car');
ACanvas.Canvas.StretchDraw(AViewInfo.Bounds,APicture.Bitmap);
APicture.Free;
ADone := True;
end;
if AViewInfo.GridRecord.Values[cxGrid1DBTableView1DBColumn7.Index] = 'Автомобили грузовые'
then
begin
ACanvas.Canvas.FillRect( AViewInfo.Bounds );
APicture := TPicture.Create;
APicture.Bitmap.LoadFromResourceName(HInstance, 'Truck');
ACanvas.Canvas.StretchDraw(AViewInfo.Bounds,APicture.Bitmap);
APicture.Free;
ADone := True;
end;
if AViewInfo.GridRecord.Values[cxGrid1DBTableView1DBColumn7.Index] = 'Мотоциклы'
then
begin
ACanvas.Canvas.FillRect( AViewInfo.Bounds );
APicture := TPicture.Create;
APicture.Bitmap.LoadFromResourceName(HInstance, 'Bike');
ACanvas.Canvas.StretchDraw(AViewInfo.Bounds,APicture.Bitmap);
APicture.Free;
ADone := True;
end;
if AViewInfo.GridRecord.Values[cxGrid1DBTableView1DBColumn7.Index] = 'Автобусы'
then
begin
ACanvas.Canvas.FillRect( AViewInfo.Bounds );
APicture := TPicture.Create;
APicture.Bitmap.LoadFromResourceName(HInstance, 'AUTOBUS');
ACanvas.Canvas.StretchDraw(AViewInfo.Bounds,APicture.Bitmap);
APicture.Free;
ADone := True;
end;
end;
Последний раз редактировалось tFeniks; 17.08.2007 в 10:48.. |
|
|
|
|
|
|
#2
|
|
Второй код предназначен для нумерации строк в гриде
Код:
procedure TForm3.cxGrid1DBTableView1CustomDrawIndicatorCell(
Sender: TcxGridTableView; ACanvas: TcxCanvas;
AViewInfo: TcxCustomGridIndicatorItemViewInfo; var ADone: Boolean);
var
AText: string;
ARect: TRect;
begin
if not (AViewInfo is TcxGridIndicatorRowItemViewInfo) then
exit;
ACanvas.Brush.Color := AViewInfo.Params.Color;
ACanvas.FillRect(AViewInfo.Bounds);
ACanvas.Pen.Color := clBlack;
ACanvas.Canvas.Rectangle(AViewInfo.Bounds);
ARect := AViewInfo.Bounds;
InflateRect(ARect, 0, -1);
AText := GetIndicatorText(TcxGridIndicatorRowItemViewInfo(AViewInfo).GridRecord);
DrawText(ACanvas.Handle, PChar(AText), Length(AText), ARect, DT_VCENTER or DT_CENTER);
ADone := True;
end;
Третий код - для расскрашивания строк грида разными цветами, в зависимости от значения определённого параметра. Код:
procedure TForm3.cxGrid1DBTableView1CustomDrawCell(
Sender: TcxCustomGridTableView; ACanvas: TcxCanvas;
AViewInfo: TcxGridTableDataCellViewInfo; var ADone: Boolean);
begin
inherited;
if AViewInfo.GridRecord.Values[cxGrid1DBTableView1Edits.Index] = TRUE
then
begin
ACanvas.Canvas.Brush.Color := clLime;
ACanvas.Canvas.Font.Color := clBlack;
end
else
begin
ACanvas.Canvas.Font.Color := clBlack;
end;
begin
if AViewInfo.GridRecord.Values[cxGrid1DBTableView1Autom.Index] = '1'
then
begin
ACanvas.Canvas.Brush.Color := clLime;
ACanvas.Canvas.Font.Color := clBlack;
end;
begin
if AViewInfo.GridRecord.Values[cxGrid1DBTableView1DBColumn22.Index] = '' then
if AViewInfo.GridRecord.Values[cxGrid1DBTableView1DBColumn24.Index] = ',000000000' then
if AViewInfo.GridRecord.Values[cxGrid1DBTableView1DBColumn25.Index] = ',,,,,,,,' then
begin
ACanvas.Canvas.Brush.Color := clRed;
ACanvas.Canvas.Font.Color := clYellow;
end;
end;
ADone := False;
end;
end;
Последний раз редактировалось tFeniks; 17.08.2007 в 10:54.. Причина: Добавлено сообщение |
|
|
|
|
|
|
#3
|
|
Неактивный пользователь
Пол:
Регистрация: 23.10.2007
Адрес: St.-Petersburg
Сообщений: 6
Репутация: 8
|
Могу предложить простой способ построчной раскраски грида (применяется обычно для улучшения читаемости таблиц):
Код:
procedure TMainForm.cxGrid1DBTableView1CustomDrawCell(
Sender: TcxCustomGridTableView; ACanvas: TcxCanvas;
AViewInfo: TcxGridTableDataCellViewInfo; var ADone: Boolean);
var
V: Variant;
begin
if (cxchkbColour.Checked) then
begin
if Odd(AViewInfo.GridRecord.Index) and
not TcxGridDataCellViewInfo(AViewInfo).IsMerging and // IsMerged - ХЗ что это, но в данном обработчике всегда возвращало False
not TcxGridDataCellViewInfo(AViewInfo).Selected
// and not(TcxGridColumn(AViewInfo.Item).Options.Grouping) - излишне
then
ACanvas.Brush.Color:=clLtGray;
V:=cxGrid1DBTableView1.DataController.Values[AViewInfo.GridRecord.RecordIndex,
AViewInfo.Item.Index];
if not VarIsNull(V) then
if (Pos('-',VarToStr(V)) > 0) then ACanvas.Brush.Color:=clRed;
end;
end;
Этот код так же делает подсветку красным фоном в случае вывода отрицательного значения (первый знак - "-"). |
|
|
|
|
|
#4
|
|
Неактивный пользователь
Регистрация: 29.10.2007
Сообщений: 1
Репутация: 0
|
Вообще-то, у класса TcxCustomGridTableView есть свойство
property Styles: TcxCustomGridTableViewStyles; А у класса TcxCustomGridTableViewStyles есть свойства ContentEven и ContentOdd - это стили для четных и нечетных строк. А так же есть стандартный обработчик OnGetContentStyle - это если надо в индивидуальном порядке "раскрасить" ячейки грида... |
|
|
|
|
|
#5
|
|
Неактивный пользователь
Регистрация: 29.03.2007
Сообщений: 6
Репутация: 19
|
Скажите, а есть ли в DevExpress компонент для построения диаграмм?
|
|
|
|
|
|
#6
|
|
Неактивный пользователь
Пол:
Регистрация: 24.11.2007
Сообщений: 1
Репутация: 0
|
Alienka,
просто выбираешь вид view типа chart |
|
|
|
|
|
#7
|
|
Подскажите как сделать чтобы в cxTDateTime... не отображалось время (только дата)? Собственно и с гридом такая же проблема. Свойства:
Kind = Date ShowTime = false Время исчезает только при наличии фокуса на элементе управления, после потери фокуса время добавляется к дате. ![]() Тип данных поля в БД timestamp (дата + время). |
|
|
|
|
|
|
#8
|
|
Новичок
Пол:
Регистрация: 21.07.2007
Сообщений: 8
Репутация: 2
|
У полей таблиц БД есть поле Format. Задай туда dd.mm.yy и будет у тебя только дата, без времени.
Подскажите, как впихнуть в dxDBGrid юникод? |
|
|
|
|
|
#9
|
|
Неактивный пользователь
Пол:
Регистрация: 09.01.2008
Сообщений: 16
Репутация: 25
|
|
|
|
|
|
|
#10
|
|
Новичок
Пол:
Регистрация: 21.07.2007
Сообщений: 8
Репутация: 2
|
Нет ничего невозможного, друг мой.
Поимев сексуальные отношения с компонентом, в течение часа нашел способ отображения юникодного текста в таблице. Но сделать корректное отображение и при редактировании не смог. Где-то находил и даже пробовал один способ - заменить их InplaceEdit TNTшным. Но сейчас не могу найти. Правда для меня это не особо важно. Главное - получилось отобразить текст. |
|
|
|
|
|
#11
|
|
Неактивный пользователь
Пол:
Регистрация: 09.01.2008
Сообщений: 16
Репутация: 25
|
|
|
|
|
|
|
#12
|
|
Новичок
Пол:
Регистрация: 21.07.2007
Сообщений: 8
Репутация: 2
|
Вот что я сделал в самом проекте. Работает и без TNT, но писать приходится в обработчике каждой колонки с юникодом:
Код:
procedure TForm1.dxDBGrid1comandNameCustomDrawCell(Sender: TObject; ACanvas: TCanvas; ARect: TRect; ANode: TdxTreeListNode; AColumn: TdxTreeListColumn; ASelected, AFocused, ANewItemRow: Boolean; var AText: String; var AColor: TColor; AFont: TFont; var AAlignment: TAlignment; var ADone: Boolean); var ws:WideString; begin ACanvas.Font.Name := 'Tahoma'; if VarIsNull(ANode.Values[2]) then ws:='' else ws:=ANode.Values[2]; if ASelected or AFocused then begin ACanvas.Brush.Color:=TdxDBGrid(ANode.Owner).HighlightColor; ACanvas.Font.Color:=TdxDBGrid(ANode.Owner).HighlightTextColor; end else begin ACanvas.Brush.Color:=TdxDBGrid(ANode.Owner).Color; ACanvas.Font.Color:=TdxDBGrid(ANode.Owner).Font.Color; end; ACanvas.FillRect(ARect); InflateRect(ARect, -2, -1); DrawTextW(ACanvas.Handle,@ws[1],length(ws),ARect,DT_LEFT+DT_TOP); ADone:=true; end; |
|
|
|
| Сказали спасибо: |
|
|
#13
|
|
Не подскажете как сделать в ExpressQuantumGrid вычисляемое поле (перемножить два других поля)? Вычисление в запросе не предлагать...
Сделал вычисляемое поле в БД (Firebird), но, думаю, будет оптимальнее считать это поле на клиенте. Добавлено через 56 минут Разобрался... Сделать это можно создав в DataSet вычисляемое поле и добавив обработчик на событие OnCalcFields. Иногда нужно лучше поискать... Последний раз редактировалось neonman; 23.01.2008 в 17:38.. Причина: Добавлено сообщение |
|
|
|
|
|
|
#14
|
|
Еще вопрос по этому гриду. Лучше опишу задачу:
-запрос заранее неизвестен, поля, естественно, тоже -нужно отобразить результаты запроса в гриде В результате получаю одно пустое поле, повторенное столько раз, сколько записей. Стандартный грид это умеет по-умолчанию. Как сделать в этом? Спасибо. |
|
|
|
|
|
|
#15
|
|
Новичок
Пол:
Регистрация: 23.11.2007
Сообщений: 15
Репутация: 2
|
Здравствуйте! У меня вопрос ... не давно у меня захателос ставит RichEdit в TcxDBTreeList, что бы сделат видимы текст как форматираны, за примера мне нужно сделат bold первы из двух или трех строка. Но, не успел. Компонент не работыет как я хочу... Кто то столкивался с такой проблем?
Последний раз редактировалось nyckneykov; 03.05.2008 в 09:16.. Причина: Добавлено сообщение |
|
|
|
![]() |
Похожие темы
|
||||
| Тема | Автор | Раздел | Ответов | Последнее сообщение |
| SDL Component Suite | Velich2008 | Компоненты | 15 | 02.01.2013 13:42 |
| PDF Suite | GroW | Варезник | 1 | 28.12.2010 23:46 |
| ExpressQuantumGrid и добавление данных в ячейку | tFeniks | Компоненты | 1 | 08.04.2008 14:06 |
| Explorer Suite I | linhanshi | Freeware софт | 2 | 03.02.2008 20:29 |
| YouTube FLV to AVI Suite PRO | Gindoss | Варезник | 1 | 12.04.2007 07:53 |
|
|