显示DBGrid中可编辑字段的密码字符

时间:2013-12-03 13:44:33

标签: delphi delphi-2010 informix

我有一个DBGrid,我使用以下查询来获取数据:

Select * from table1 where <condition>

密码中的一个字段来自数据库,我想显示为 * ** 。但要保持网格本身的可编辑性。

您能否建议可以为此做些什么。非常感谢示例代码

1 个答案:

答案 0 :(得分:1)

您可以通过在表单上删除TEdit并将密码char属性设置为“*”来完成此操作。然后,您需要将代码添加到TDBGrid的OnDrawColumnCell事件中,如下所示: -

procedure TForm1.DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect;
  DataCol: Integer; Column: TColumn; State: TGridDrawState);
var
  grid : TDBGrid;
  maskValue : String;
  aRect : TRect;
begin
  maskValue := '**';
  aRect := Rect;
  grid := sender as TDBGrid;

if column.FieldName = 'password' then if gdfocused in State then begin Edit1.Left := Rect.Left + grid.Left + 1; Edit1.Top := rect.Top + grid.Top + 1; Edit1.Width := Rect.Right - Rect.Left + 2; Edit1.Height := Rect.Bottom - Rect.Top + 2; Edit1.Clear; Edit1.Visible := True; end else begin grid.Canvas.FillRect(Rect); DrawText(grid.Canvas.Handle, PChar(maskValue), Length(maskValue), aRect, DT_SINGLELINE or DT_LEFT or DT_VCENTER); end else grid.DefaultDrawColumnCell(Rect, DataCol, Column, state); end;

procedure TForm1.DBGrid1ColExit(Sender: TObject); begin Edit1.Visible := False; end;

procedure TForm1.DBGrid1KeyPress(Sender: TObject; var Key: Char); begin if Key = Chr(9) then Exit;

if (Sender as TDBGrid).SelectedField.FieldName = 'password' then begin Edit1.SetFocus; SendMessage(Edit1.Handle, WM_CHAR, word(Key), 0); end; end;

procedure TForm1.Edit1Change(Sender: TObject); begin if DBGrid1.DataSource.State in [dsEdit, dsInsert] then DBGrid1.DataSource.DataSet.FieldByName('password').AsString := Edit1.Text; end;

procedure TForm1.Edit1Enter(Sender: TObject); begin DBGrid1.DataSource.Edit; end;

这应该让你顺利,但正如已经提到的那样以这种方式编辑密码并不理想。