vladman
Advanced Member | Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору Dm_Sok Цитата: а вот геморроя хотелось бы избежать | А что вы понимаете под этим словом, в чем он выражается? в количестве строк кода? в том, что нужно разобраться в принципах работы механизма обработки события onCustomDrawCell? И почему вы считаете что onCustomDrawCell не штатный способ? Вот рабочий пример: Код: procedure <YourForm>.<YourcxGridDBTableView>CustomDrawCell(Sender: TcxCustomGridTableView; ACanvas: TcxCanvas; AViewInfo: TcxGridTableDataCellViewInfo; var ADone: Boolean); var vRect: TRect; vPreviousViewInfo: TcxGridTableDataCellViewInfo; vTextAreaBounds: TRect; vMargedField1, vMargedField2: TcxGridDBColumn; vBorderColor: TColor; begin vMargedField1 := <YourcxGridDBTableViewMergedField1>; vMargedField2 := <YourcxGridDBTableViewMergedField2>; if (AViewInfo.Item.Index in [vMargedField1.Index, vMargedField2.Index]) and (AViewInfo.GridRecord.Values[vMargedField1.Index] = AViewInfo.GridRecord.Values[vMargedField2.Index]) then begin AViewInfo.Borders := []; if AViewInfo.Item.Index = vMargedField2.Index then begin vPreviousViewInfo := Sender.ViewInfo.RecordsViewInfo.Items[vMargedField1.Index].GetCellViewInfoByItem(vMargedField1); vTextAreaBounds := AViewInfo.TextAreaBounds; vTextAreaBounds.Left := vPreviousViewInfo.TextAreaBounds.Left; ACanvas.DrawTexT(AViewInfo.Text, vTextAreaBounds, cxAlignHCenter); vRect := AViewInfo.Bounds; vRect.Left := vPreviousViewInfo.Bounds.Left - 1; vRect.Top := vRect.Top - 1; vBorderColor := AViewInfo.BorderColor[bLeft]; ACanvas.DrawComplexFrame(vRect, vBorderColor, vBorderColor, [bTop, bLeft, bBottom, bRight], 1); end; ADone := True; end; end; | Добавлено: JohnSilver182 Цитата: Похоже DEvki не перебирают данные из Рекордсетов | И правильно делают, иначе - что б вы говорили о быстродействии, если бы при каждой перерисовке ячейки перебирались (locate) бы данные из "Рекордсетов"? |