отправка события в класс (c++builder + devexpress)
От: Bonjo  
Дата: 23.05.06 14:15
Оценка:
подскажите плиз как вызвать событие класса

имеем:
таблица (TdxDBGrid)

на событии OnCustomDrawCell необходимо отправить обработчик в класс (чтобы там все отрисовалось), а потом добавить кое-что от себя.

приьлизительно такая конструкция:

void __fastcall TfmEquipRemPlan::dbgPlanCustomDrawCell(TObject *Sender,
TCanvas *ACanvas, TRect &ARect, TdxTreeListNode *ANode,
TdxTreeListColumn *AColumn, bool ASelected, bool AFocused,
bool ANewItemRow, AnsiString &AText, TColor &AColor, TFont *AFont,
TAlignment &AAlignment, bool &ADone)
{

//!!!!!!этот вызов компилятор не пропускает!!!!!
TCustomdxDBGrid::OnCustomDrawCell(Sender,
ACanvas, ARect, ANode,
AColumn, ASelected, AFocused,
ANewItemRow,
AText, AColor, AFont,
AAlignment, ADone);

//
ACanvas->Pen->Color = clGreen;
ACanvas->MoveTo( ARect.Left, ARect.Top+3);
ACanvas->LineTo(ARect.Left+3, ARect.Top);

ADone = true;
}

компилятор ругается на вызов события базового класса
[C++ Error] UEquipRemPlan_fmEquipRemPlan.cpp(212): E2231 Member TCustomdxTreeListControl::OnCustomDrawCell cannot be used without an object

подскажите кто знает как правильно его туда отправить
Re: отправка события в класс (c++builder + devexpress)
От: ak_miass Россия  
Дата: 24.05.06 05:50
Оценка:
Вообще то правильно компилятор говорит. Если нет объекта, то нельзя вызывать нестатические методы. Экземпляр этого самого TCustomdxDBGrid есть? Если есть можно попытаться вызвать через него.
Re[2]: отправка события в класс (c++builder + devexpress)
От: Bonjo  
Дата: 24.05.06 06:54
Оценка:
Здравствуйте, ak_miass, Вы писали:

_>Вообще то правильно компилятор говорит. Если нет объекта, то нельзя вызывать нестатические методы. Экземпляр этого самого TCustomdxDBGrid есть? Если есть можно попытаться вызвать через него.


экземпляр есть — dbgPlan, его тип TdxDBGrid

если вызывать через него, то вот такая конструкция

dbgPlan->OnCustomDrawCell(...);

естественно приводит к бесконечному циклу

а вот такие

dbgPlan->TdxDBGrid::OnCustomDrawCell(...);
dbgPlan->TCustomdxDBGrid::OnCustomDrawCell(...);

компилятор не пропускает, говорит ...is not accessible
Re[3]: отправка события в класс (c++builder + devexpress)
От: ak_miass Россия  
Дата: 24.05.06 07:57
Оценка:
Здравствуйте, Bonjo, Вы писали:

Что такое TdxDBGrid не знаю, и TCustomdxDBGrid тоже, но может у них есть какой нибдь DefaultDrawCell наподобии DefaultDrawDataCell у TCustomDBGrid? Тогда можно вызывать его.
Re[3]: отправка события в класс (c++builder + devexpress)
От: Danchik Украина  
Дата: 24.05.06 13:54
Оценка:
Здравствуйте, Bonjo, Вы писали:

[Skip]

В Delphi это бы выглядело так:
type
  TCustomdxTreeListAccess = class (TCustomdxTreeList);

procedure TForm1.dxDBGrid1CustomDrawCell(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
  aCellKind : TdxGridDrawCellKind;
begin
  if FSkipDrawing then
    Exit;

  FSkipDrawing := True;
  try
    if ANewItemRow then
      aCellKind := ckNewItemRow
    else
      aCellKind := ckRow;

    if dxDBGrid1 is TCustomdxTreeList then begin
      TCustomdxTreeListAccess (dxDBGrid1).DrawCellEx (ACanvas, ARect, 
        TCustomdxTreeListAccess (dxDBGrid1).DrawBitmap, ANode, AColumn.Index, ASelected, AFocused, AColor, AFont.Color,
        ACanvas.Brush.Handle, False {Is Multiline}, aCellKind, True, True, AColor, ACanvas.Brush.Handle);
    end;

    { Дорисовываем свое }
    ACanvas.MoveTo(ARect.Left, ARect.Top);
    ACanvas.LineTo(ARect.Right, ARect.Bottom);

    ADone := True;
  finally
    FSkipDrawing := False;
  end;
end;

Дальше думайте сами
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.