DBGridEh中自己划删除线(150分)

  • 主题发起人 主题发起人 regentsoft
  • 开始时间 开始时间
R

regentsoft

Unregistered / Unconfirmed
GUEST, unregistred user!
在做会计时,我们是不容许删除的。
但是比喻有一条记录要冲红,我们在DBGridEh中如何来画这个冲红线呢???
谢谢!
 
procedure TFmdayquery.DBGridEh1GetCellParams(Sender: TObject;
Column: TColumnEh;
AFont: TFont;
var Background: TColor;
State: TGridDrawState);
begin
if ADOQuery1.FieldByName('Fqty').AsFloat < 0 then
begin
//AFont.Style := AFont.Style + [fsBold];
Afont.Color := clRed;
end
else
begin
//AFont.Style := AFont.Style;
Afont.Color := clWindowText;
end;
end;
我只试过把负的写成红色!
 
procedure TFmSaleInvoice.GridDispDetailDrawColumnCell(Sender: TObject;
const Rect: TRect;
DataCol: Integer;
Column: TColumnEh;
State: TGridDrawState);
begin
if qry1.Active then
case qry1.FieldByName('AID_NoteType').AsInteger of
0, -1:
begin
TDBGridEh(Sender).Canvas.Font.Color := clRed;
TDBGridEh(Sender).Canvas.Font.Style := TDBGridEh(Sender).Canvas.Font.Style + [fsStrikeOut];
TDBGridEh(Sender).DefaultDrawColumnCell(Rect, DataCol, Column, State);
end;
end;
end;
这样字体是红色的,也画上线了,不知道是不是楼主想要的效果。
 
to happycyp:
老大:
我要的效果是这样的:
我要的划线,不是划在字体上。
而在要在DBGRIDEH中,发现这一行删除了,比喻:我删除了的标识字段是:DeleteFlag
当我的这一行的DeleteFlag为True时。
我要求在DBGridEh中的这一行,从头到尾能画上一条线!
 
procedure TFmSaleInvoice.GridGetCellParams(Sender: TObject;
Column: TColumnEh;
AFont: TFont;
var Background: TColor;
State: TGridDrawState);
var
Rect: TRect;
begin
inherited;
if cdsDetail.Active then
case cdsDetail.FieldByName('AID_NoteType').AsInteger of
0, -1:
begin
Rect := Column.Grid.DataRect;
TDBGridEh(Sender).Canvas.Font.Color := clRed;
TDBGridEh(Sender).Canvas.Pen.Color := clRed;
TDBGridEh(Sender).Canvas.Pen.Width := 1;
TDBGridEh(Sender).Canvas.MoveTo(Rect.Left, Rect.Top + 5);
TDBGridEh(Sender).Canvas.LineTo(Rect.Right, Rect.Top + 5);
end;
end;
end;
不是很完美,不知道能满足你的要求吗?
 
的确不是很完美,它画到别条记录上去了。
我再修改一下。
 
能不能画在指定的记录上呢???
 
把happycyp的適當修改下就差不多了
 
能不能画在指定的记录上呢???
 
挣点分还不容易。
procedure TFmSaleInvoice.GridDispDetailDrawColumnCell(Sender: TObject;
const Rect: TRect;
DataCol: Integer;
Column: TColumnEh;
State: TGridDrawState);
begin
inherited;
if cdsDetail.Active then
case cdsDetail.FieldByName('AID_NoteType').AsInteger of
0, -1:
begin
TDBGridEh(Sender).Canvas.Font.Color := clRed;{不设置字体不要这句}
TDBGridEh(Sender).DefaultDrawColumnCell(Rect, DataCol, Column, State); {不设置字体不要这句}
TDBGridEh(Sender).Canvas.Pen.Color := clRed;
TDBGridEh(Sender).Canvas.Pen.Width := 1;
TDBGridEh(Sender).Canvas.MoveTo(Rect.Left, Rect.Top + 5);
TDBGridEh(Sender).Canvas.LineTo(Rect.Right, Rect.Top + 5);
end;
end;
end;
注意所用的事件是onDrawColumnCell
 
接受答案了.
 
后退
顶部