Компьютерный форум NoWa.cc Здесь может быть Ваша реклама
Правила Форума
редакция от 22.06.2020
Форум .::NoWa.cc::.
Вернуться   Компьютерный форум NoWa.cc > В помощь вебмастеру > Программирование > Delphi

Уважаемые пользователи nowa.cc. Мы работаем для вас более 20 лет и сейчас вынуждены просить о финансовой помощи по оплате за сервер.
Окажите посильную поддержку, мы очень надеемся на вас. Реквизиты для переводов ниже.
Webmoney Webmoney WMZ: Z021474945171 Webmoney WME: E159284508897 Webmoney WMUSDT: T206853643180
Кошелёк для вашей помощи YooMoney 4100117770549562
YooMoney Спасибо за поддержку!

Ответ
 
Опции темы Опции просмотра Language
Старый 14.08.2007, 11:38   #1
Неактивный пользователь
 
Аватар для tFeniks
 
Пол:Мужской
Регистрация: 21.07.2007
Сообщений: 55
Репутация: 177
По умолчанию ExpressQuantumGrid Suite

Итак, уважаемые программисты! Давайте в этой теме будем делиться своими наработками по работе с 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..
tFeniks вне форума
 
Ответить с цитированием Вверх
Здесь может быть Ваша реклама
Здесь может быть Ваша реклама


Реклама: варочную панель купить электрическуюпреобразователь частотный veda drive vf-101-p55k-0110-a-t4-e20-n-h abc00036стол письменный с ящиками купитьбилет на концерт агутина спб - redkassa.rupalit infinity 3


Старый 17.08.2007, 10:51   #2
tFeniks
Неактивный пользователь
 
Аватар для tFeniks
 
Пол:Мужской
Регистрация: 21.07.2007
Сообщений: 55
Репутация: 177
По умолчанию Ответ: ExpressQuantumGrid Suite

Второй код предназначен для нумерации строк в гриде

Код:
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;
Добавлено через 2 минуты
Третий код - для расскрашивания строк грида разными цветами, в зависимости от значения определённого параметра.

Код:
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.. Причина: Добавлено сообщение
tFeniks вне форума
 
Ответить с цитированием Вверх
Старый 24.10.2007, 12:53   #3
Mechanist
Неактивный пользователь
 
Пол:Мужской
Регистрация: 23.10.2007
Адрес: St.-Petersburg
Сообщений: 6
Репутация: 8
По умолчанию Ответ: ExpressQuantumGrid Suite

Могу предложить простой способ построчной раскраски грида (применяется обычно для улучшения читаемости таблиц):

Код:
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;
где cxchkbColour.Checked - проверка установки галочки отвечающей за раскраску.

Этот код так же делает подсветку красным фоном в случае вывода отрицательного значения (первый знак - "-").
Mechanist вне форума
 
Ответить с цитированием Вверх
Старый 29.10.2007, 09:50   #4
Durilka
Неактивный пользователь
 
Регистрация: 29.10.2007
Сообщений: 1
Репутация: 0
По умолчанию Ответ: ExpressQuantumGrid Suite

Вообще-то, у класса TcxCustomGridTableView есть свойство
property Styles: TcxCustomGridTableViewStyles;

А у класса TcxCustomGridTableViewStyles есть свойства
ContentEven и ContentOdd - это стили для четных и нечетных строк.

А так же есть стандартный обработчик OnGetContentStyle - это если надо в индивидуальном порядке "раскрасить" ячейки грида...
Durilka вне форума
 
Ответить с цитированием Вверх
Старый 23.12.2007, 11:22   #5
Alienka
Неактивный пользователь
 
Регистрация: 29.03.2007
Сообщений: 6
Репутация: 19
По умолчанию Ответ: ExpressQuantumGrid Suite

Скажите, а есть ли в DevExpress компонент для построения диаграмм?
Alienka вне форума
 
Ответить с цитированием Вверх
Старый 15.01.2008, 09:22   #6
Shureg
Неактивный пользователь
 
Пол:Мужской
Регистрация: 24.11.2007
Сообщений: 1
Репутация: 0
По умолчанию Ответ: ExpressQuantumGrid Suite

Alienka,
просто выбираешь вид view типа chart
Shureg вне форума
 
Ответить с цитированием Вверх
Старый 15.01.2008, 11:50   #7
neonman
Постоялец
 
Аватар для neonman
 
Пол:Мужской
Регистрация: 03.07.2006
Сообщений: 360
Репутация: 88
По умолчанию Ответ: ExpressQuantumGrid Suite

Подскажите как сделать чтобы в cxTDateTime... не отображалось время (только дата)? Собственно и с гридом такая же проблема. Свойства:
Kind = Date
ShowTime = false
Время исчезает только при наличии фокуса на элементе управления, после потери фокуса время добавляется к дате.
Тип данных поля в БД timestamp (дата + время).
neonman вне форума
 
Ответить с цитированием Вверх
Старый 15.01.2008, 12:50   #8
Testudo
Новичок
 
Пол:Мужской
Регистрация: 21.07.2007
Сообщений: 8
Репутация: 2
По умолчанию Ответ: ExpressQuantumGrid Suite

У полей таблиц БД есть поле Format. Задай туда dd.mm.yy и будет у тебя только дата, без времени.

Подскажите, как впихнуть в dxDBGrid юникод?
Testudo вне форума
 
Ответить с цитированием Вверх
Старый 15.01.2008, 15:53   #9
DrLo
Неактивный пользователь
 
Пол:Мужской
Регистрация: 09.01.2008
Сообщений: 16
Репутация: 25
По умолчанию Ответ: ExpressQuantumGrid Suite

Цитата:
Сообщение от Testudo Посмотреть сообщение
Подскажите, как впихнуть в dxDBGrid юникод?

А это разве в принципе возможно? dx - ы же не юникодные
DrLo вне форума
 
Ответить с цитированием Вверх
Старый 15.01.2008, 16:45   #10
Testudo
Новичок
 
Пол:Мужской
Регистрация: 21.07.2007
Сообщений: 8
Репутация: 2
По умолчанию Ответ: ExpressQuantumGrid Suite

Нет ничего невозможного, друг мой.
Поимев сексуальные отношения с компонентом, в течение часа нашел способ отображения юникодного текста в таблице.
Но сделать корректное отображение и при редактировании не смог. Где-то находил и даже пробовал один способ - заменить их InplaceEdit TNTшным. Но сейчас не могу найти. Правда для меня это не особо важно. Главное - получилось отобразить текст.
Testudo вне форума
 
Ответить с цитированием Вверх
Старый 15.01.2008, 17:25   #11
DrLo
Неактивный пользователь
 
Пол:Мужской
Регистрация: 09.01.2008
Сообщений: 16
Репутация: 25
По умолчанию Ответ: ExpressQuantumGrid Suite

Цитата:
Сообщение от Testudo Посмотреть сообщение
нашел способ отображения юникодного текста в таблице

Супер!!! Ты б для страждущих поделился свои сексуальным опытом - может кому и помогло бы.
DrLo вне форума
 
Ответить с цитированием Вверх
Старый 15.01.2008, 18:28   #12
Testudo
Новичок
 
Пол:Мужской
Регистрация: 21.07.2007
Сообщений: 8
Репутация: 2
По умолчанию Ответ: ExpressQuantumGrid Suite

Вот что я сделал в самом проекте. Работает и без 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;
И еще, не помню уже где (пройдись отладчиком, увидишь) в компоненте есть определение, принадлежит ли тип данных колонки к простым. В этом случае он будет читаться из Variant'а, иначе - из строки. ftWideString естественно к простым не относится, вот его и нужно к ним отнести (где то в начале есть определение-список простых типов, просто добавить туда).
Testudo вне форума
 
Ответить с цитированием Вверх
Старый 23.01.2008, 16:41   #13
neonman
Постоялец
 
Аватар для neonman
 
Пол:Мужской
Регистрация: 03.07.2006
Сообщений: 360
Репутация: 88
По умолчанию Ответ: ExpressQuantumGrid Suite

Не подскажете как сделать в ExpressQuantumGrid вычисляемое поле (перемножить два других поля)? Вычисление в запросе не предлагать...
Сделал вычисляемое поле в БД (Firebird), но, думаю, будет оптимальнее считать это поле на клиенте.

Добавлено через 56 минут
Разобрался... Сделать это можно создав в DataSet вычисляемое поле и добавив обработчик на событие OnCalcFields. Иногда нужно лучше поискать...

Последний раз редактировалось neonman; 23.01.2008 в 17:38.. Причина: Добавлено сообщение
neonman вне форума
 
Ответить с цитированием Вверх
Старый 14.02.2008, 21:40   #14
neonman
Постоялец
 
Аватар для neonman
 
Пол:Мужской
Регистрация: 03.07.2006
Сообщений: 360
Репутация: 88
По умолчанию Ответ: ExpressQuantumGrid Suite

Еще вопрос по этому гриду. Лучше опишу задачу:
-запрос заранее неизвестен, поля, естественно, тоже
-нужно отобразить результаты запроса в гриде
В результате получаю одно пустое поле, повторенное столько раз, сколько записей.
Стандартный грид это умеет по-умолчанию. Как сделать в этом?
Спасибо.
neonman вне форума
 
Ответить с цитированием Вверх
Старый 29.04.2008, 13:33   #15
nyckneykov
Новичок
 
Пол:Мужской
Регистрация: 23.11.2007
Сообщений: 15
Репутация: 2
По умолчанию Ответ: ExpressQuantumGrid Suite

Здравствуйте! У меня вопрос ... не давно у меня захателос ставит RichEdit в TcxDBTreeList, что бы сделат видимы текст как форматираны, за примера мне нужно сделат bold первы из двух или трех строка. Но, не успел. Компонент не работыет как я хочу... Кто то столкивался с такой проблем?

Последний раз редактировалось nyckneykov; 03.05.2008 в 09:16.. Причина: Добавлено сообщение
nyckneykov вне форума
 
Ответить с цитированием Вверх
Ответ


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
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

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход


Текущее время: 12:10. Часовой пояс GMT +3.


Copyright ©2004 - 2025 NoWa.cc

Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2026, vBulletin Solutions, Inc. Перевод: zCarot
Время генерации страницы 0.09110 секунды с 11 запросами