Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/delphi/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Delphi-OpenDialog和DBGrid的复选框单击问题_Delphi_Vcl_Delphi 10.2 Tokyo_Dbgrid - Fatal编程技术网

Delphi-OpenDialog和DBGrid的复选框单击问题

Delphi-OpenDialog和DBGrid的复选框单击问题,delphi,vcl,delphi-10.2-tokyo,dbgrid,Delphi,Vcl,Delphi 10.2 Tokyo,Dbgrid,如果我打开TDBGrid上方的TOpenDialog并双击以选择项目,则单击会重定向到TDBGrid,并标记复选框 要进行测试,请单击按钮并双击以在OpenDialog上打开一个文件。将选中第一个复选框 Pas文件 unit Unit2; interface uses Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics, Vcl.Controls

如果我打开
TDBGrid
上方的
TOpenDialog
并双击以选择项目,则单击会重定向到
TDBGrid
,并标记复选框

要进行测试,请单击按钮并双击以在OpenDialog上打开一个文件。将选中第一个复选框

Pas文件

unit Unit2;

interface

uses
  Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
  Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Data.DB, FireDAC.Stan.Intf,
  FireDAC.Stan.Option, FireDAC.Stan.Param, FireDAC.Stan.Error,
  FireDAC.DatS, FireDAC.Phys.Intf, FireDAC.DApt.Intf,
  FireDAC.Stan.StorageBin, FireDAC.Comp.DataSet, FireDAC.Comp.Client,
  Vcl.StdCtrls, Vcl.ExtCtrls, Vcl.Grids, Vcl.DBGrids;

type
  TForm2 = class(TForm)
    DBGrid1: TDBGrid;
    Panel1: TPanel;
    Button1: TButton;
    OpenDialog1: TOpenDialog;
    MemData: TFDMemTable;
    MemDataCHECKBOX: TStringField;
    MemDataNAME: TStringField;
    DataSource1: TDataSource;
    procedure DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect;
      DataCol: Integer; Column: TColumn; State: TGridDrawState);
    procedure DBGrid1CellClick(Column: TColumn);
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form2: TForm2;

implementation

{$R *.dfm}

procedure TForm2.Button1Click(Sender: TObject);
begin
  if OpenDialog1.Execute then
  Begin
    //
  End;
end;

procedure TForm2.DBGrid1CellClick(Column: TColumn);
begin
  if Column.FieldName = 'CHECKBOX' then
  begin
    if Column.Grid.DataSource.DataSet.RecordCount > 0 then
    Begin
      Column.Grid.DataSource.DataSet.Edit;

      if Column.Grid.DataSource.DataSet.FieldByName('CHECKBOX').AsString = 'T' then
      begin
        Column.Grid.DataSource.DataSet.FieldByName('CHECKBOX').AsString := 'F';
      end
      else
      begin
        Column.Grid.DataSource.DataSet.FieldByName('CHECKBOX').AsString := 'T';
      end;

      Column.Grid.DataSource.DataSet.Post;
    End;
  end;
end;

procedure TForm2.DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect;
  DataCol: Integer; Column: TColumn; State: TGridDrawState);
var
  Check: Integer;
  R: TRect;
begin
  if not (odd(DBGrid1.DataSource.DataSet.RecNo)) then
  begin
    DBGrid1.Canvas.Brush.Color := $EBEBEB;
    DBGrid1.Canvas.Font.Color := clBlack;
    DBGrid1.Canvas.FillRect(Rect);
  end;

  if (gdSelected in State) or (DBGrid1.SelectedRows.CurrentRowSelected) then
  begin
    DBGrid1.Canvas.Brush.Color := clHighlight;
    DBGrid1.Canvas.Font.Color := clWhite;
    DBGrid1.Canvas.FillRect(Rect);
  end;

  DBGrid1.DefaultDrawColumnCell(Rect, DataCol, Column, State);

  if Column.FieldName = 'CHECKBOX' then
  begin
    if MemData.FieldByName('CHECKBOX').AsString = 'T' then
    begin
      Check := DFCS_CHECKED;
    end
    else
      Check := 0;

    DBGrid1.Canvas.FillRect(Rect);
    R := Rect;
    InflateRect(R, -2, -2);
    DrawFrameControl(DBGrid1.Canvas.handle, R, DFC_BUTTON, DFCS_BUTTONCHECK or Check);
  end;
end;

end.
Dfm文件

object Form2: TForm2
  Left = 0
  Top = 0
  Caption = 'Form2'
  ClientHeight = 509
  ClientWidth = 756
  Color = clBtnFace
  Font.Charset = DEFAULT_CHARSET
  Font.Color = clWindowText
  Font.Height = -11
  Font.Name = 'Tahoma'
  Font.Style = []
  OldCreateOrder = False
  Position = poScreenCenter
  PixelsPerInch = 96
  TextHeight = 13
  object DBGrid1: TDBGrid
    Left = 0
    Top = 41
    Width = 756
    Height = 468
    Align = alClient
    DataSource = DataSource1
    DefaultDrawing = False
    Options = [dgTitles, dgIndicator, dgColumnResize, dgColLines, dgRowLines, dgTabs, dgConfirmDelete, dgCancelOnExit, dgTitleClick, dgTitleHotTrack]
    TabOrder = 0
    TitleFont.Charset = DEFAULT_CHARSET
    TitleFont.Color = clWindowText
    TitleFont.Height = -11
    TitleFont.Name = 'Tahoma'
    TitleFont.Style = []
    OnCellClick = DBGrid1CellClick
    OnDrawColumnCell = DBGrid1DrawColumnCell
    Columns = <
      item
        Expanded = False
        FieldName = 'CHECKBOX'
        Visible = True
      end
      item
        Expanded = False
        FieldName = 'NAME'
        Width = 635
        Visible = True
      end>
  end
  object Panel1: TPanel
    Left = 0
    Top = 0
    Width = 756
    Height = 41
    Align = alTop
    BevelInner = bvLowered
    TabOrder = 1
    ExplicitLeft = 120
    ExplicitTop = 16
    ExplicitWidth = 185
    object Button1: TButton
      Left = 14
      Top = 8
      Width = 75
      Height = 25
      Caption = 'Open Dialog'
      TabOrder = 0
      OnClick = Button1Click
    end
  end
  object OpenDialog1: TOpenDialog
    Left = 153
    Top = 137
  end
  object MemData: TFDMemTable
    Active = True
    FieldDefs = <
      item
        Name = 'CHECKBOX'
        DataType = ftString
        Size = 1
      end
      item
        Name = 'NAME'
        DataType = ftString
        Size = 50
      end>
    IndexDefs = <>
    FetchOptions.AssignedValues = [evMode]
    FetchOptions.Mode = fmAll
    ResourceOptions.AssignedValues = [rvPersistent, rvSilentMode]
    ResourceOptions.Persistent = True
    ResourceOptions.SilentMode = True
    UpdateOptions.AssignedValues = [uvCheckRequired, uvAutoCommitUpdates]
    UpdateOptions.CheckRequired = False
    UpdateOptions.AutoCommitUpdates = True
    StoreDefs = True
    Left = 153
    Top = 184
    Content = {
      414442530F00C31DA2040000FF00010001FF02FF0304000E0000004D0065006D
      00440061007400610005000A0000005400610062006C00650006000000000007
      0000080032000000090000FF0AFF0B04001000000043004800450043004B0042
      004F00580005001000000043004800450043004B0042004F0058000C00010000
      000E000D000F0001000000100001110001120001130001140001150001160010
      00000043004800450043004B0042004F005800170001000000FEFF0B04000800
      00004E0041004D0045000500080000004E0041004D0045000C00020000000E00
      0D000F0032000000100001110001120001130001140001150001160008000000
      4E0041004D004500170032000000FEFEFF18FEFF19FEFF1AFF1B1C0000000000
      FF1D000001000000460100040000004A484F4EFEFEFF1B1C0001000000FF1D00
      0001000000460100050000004C55434153FEFEFF1B1C0002000000FF1D000001
      000000460100050000004B454C4C59FEFEFF1B1C0003000000FF1D0000010000
      004601000500000053494C4153FEFEFF1B1C0004000000FF1D00000100000046
      0100060000004D4152435553FEFEFF1B1C0005000000FF1D0000010000004601
      00050000004A454E4E59FEFEFF1B1C0006000000FF1D00000100000046010004
      00000052495441FEFEFF1B1C0007000000FF1D00000100000046010005000000
      5045544552FEFEFF1B1C0008000000FF1D000001000000460100080000004245
      4E4A414D494EFEFEFF1B1C0009000000FF1D000001000000460100060000004D
      4152434941FEFEFF1B1C000A000000FF1D000001000000460100080000005041
      545249434941FEFEFF1B1C000B000000FF1D0000010000004601000500000046
      4142494FFEFEFF1B1C000C000000FF1D000001000000460100070000004D4152
      43454C4FFEFEFF1B1C000D000000FF1D000001000000460100080000004C454F
      4E4152444FFEFEFF1B1C000E000000FF1D00000100000046010005000000414C
      494E45FEFEFF1B1C000F000000FF1D000001000000460100070000004144494C
      534F4EFEFEFF1B1C00100000001F001E00FF1D00000100000046010001000000
      31FEFEFF1B1C00110000001F001E00FF1D0000010000004601000100000032FE
      FEFF1B1C00120000001F001E00FF1D0000010000004601000100000033FEFEFF
      1B1C00130000001F001E00FF1D0000010000004601000100000034FEFEFF1B1C
      00140000001F001E00FF1D0000010000004601000100000035FEFEFF1B1C0015
      0000001F001E00FF1D0000010000004601000100000036FEFEFF1B1C00160000
      001F001E00FF1D0000010000004601000100000037FEFEFF1B1C00170000001F
      001E00FF1D0000010000004601000100000038FEFEFF1B1C00180000001F001E
      00FF1D0000010000004601000100000039FEFEFF1B1C00190000001F001E00FF
      1D000001000000460100020000003130FEFEFF1B1C001A0000001F001E00FF1D
      000001000000460100020000003131FEFEFF1B1C001B0000001F001E00FF1D00
      0001000000460100020000003132FEFEFF1B1C001C0000001F001E00FF1D0000
      01000000460100020000003133FEFEFEFEFEFF20FEFF2122002A000000FF23FE
      FEFE0E004D0061006E0061006700650072001E00550070006400610074006500
      73005200650067006900730074007200790012005400610062006C0065004C00
      6900730074000A005400610062006C00650008004E0061006D00650014005300
      6F0075007200630065004E0061006D0065000A00540061006200490044002400
      45006E0066006F0072006300650043006F006E00730074007200610069006E00
      740073001E004D0069006E0069006D0075006D00430061007000610063006900
      74007900180043006800650063006B004E006F0074004E0075006C006C001400
      43006F006C0075006D006E004C006900730074000C0043006F006C0075006D00
      6E00100053006F0075007200630065004900440018006400740041006E007300
      690053007400720069006E006700100044006100740061005400790070006500
      0800530069007A0065001400530065006100720063006800610062006C006500
      120041006C006C006F0077004E0075006C006C00080042006100730065001400
      4F0041006C006C006F0077004E0075006C006C0012004F0049006E0055007000
      640061007400650010004F0049006E00570068006500720065001A004F007200
      6900670069006E0043006F006C004E0061006D006500140053006F0075007200
      63006500530069007A0065001C0043006F006E00730074007200610069006E00
      74004C00690073007400100056006900650077004C006900730074000E005200
      6F0077004C00690073007400060052006F0077000A0052006F00770049004400
      10004F0072006900670069006E0061006C0016007200730055006E0063006800
      61006E006700650064001A0052006F0077005000720069006F00720053007400
      6100740065001800520065006C006100740069006F006E004C00690073007400
      1C0055007000640061007400650073004A006F00750072006E0061006C001200
      530061007600650050006F0069006E0074000E004300680061006E0067006500
      7300}
    object MemDataCHECKBOX: TStringField
      FieldName = 'CHECKBOX'
      Size = 1
    end
    object MemDataNAME: TStringField
      FieldName = 'NAME'
      Size = 50
    end
  end
  object DataSource1: TDataSource
    DataSet = MemData
    Left = 153
    Top = 232
  end
end
对象格式2:TForm2
左=0
Top=0
标题='Form2'
ClientHeight=509
ClientWidth=756
颜色=clBtnFace
Font.Charset=默认字符集
Font.Color=clWindowText
字体高度=-11
Font.Name='Tahoma'
Font.Style=[]
OldCreateOrder=False
位置=位置中心
PixelsPerInch=96
text高度=13
对象DBGrid1:TDBGrid
左=0
Top=41
宽度=756
高度=468
Align=alClient
数据源=数据源1
DefaultDrawing=False
选项=[dgTitles、dgIndicator、dgColumnResize、dgColLines、dgRowLines、dgTabs、dgConfirmDelete、dgCancelOnExit、dgTitleClick、dgTitleHotTrack]
TabOrder=0
TitleFont.Charset=默认字符集
TitleFont.Color=clWindowText
标题字体高度=-11
TitleFont.Name='Tahoma'
TitleFont.Style=[]
OnCellClick=DBGrid1CellClick
OnDrawColumnCell=DBGrid1DrawColumnCell
列=<
项目
扩展=错误
字段名='复选框'
可见=真
结束
项目
扩展=错误
FieldName='NAME'
宽度=635
可见=真
结束>
结束
对象面板1:TPanel
左=0
Top=0
宽度=756
高度=41
Align=alTop
贝弗林纳=bVLINER
TabOrder=1
ExplicitLeft=120
显式t p=16
显式宽度=185
对象按钮1:t按钮
左=14
Top=8
宽度=75
高度=25
标题='打开对话框'
TabOrder=0
OnClick=按钮1单击
结束
结束
对象OpenDialog1:TopEndDialog
左=153
Top=137
结束
对象MemData:TFDMemTable
活动=真
FieldDefs=<
项目
名称='复选框'
数据类型=ftString
尺寸=1
结束
项目
Name='Name'
数据类型=ftString
尺寸=50
结束>
IndexDefs=
FetchOptions.AssignedValues=[evMode]
FetchOptions.Mode=fmAll
ResourceOptions.AssignedValues=[rvPersistent,rvSilentMode]
ResourceOptions.Persistent=True
ResourceOptions.SilentMode=True
UpdateOptions.AssignedValues=[uvCheckRequired,uvAutoCommitUpdates]
UpdateOptions.CheckRequired=False
UpdateOptions.AutoCommitUpdates=True
StoreDefs=True
左=153
Top=184
内容={
414442530F00C31DA2040000FF00010001FF02FF0304000E000004D0065006D
00440061007400610005000A000005400610062006C0065000600000000007
00000800320000000090000FF0AFF0B04001000000043004800450043004B0042
004F0058000501000000043004800450043004B0042004F0058000C000010000
000E000D000F00010000001000011000110001130001400011500011160010
000000 43004800450043004B0042004F005800170001000000FEFF0B04000800
00004E0041004D045000500080000000004E0041004D045000C000020000000E00
0D000F00320000000100011100011200011300014000115000116000800000
4E0041004D04500170032000000 FEFF18FEFF19FEFF1AFF1B1C00000000000
FF1D00000100000460100040000004A484F4EFEFFF1B1C000010000FF1D00
000100000460100050000004C55434153FEFF1B1C000020000FF1D00001
000000 460100000000004B454C59FEFEFF1B1C00003000000FF1D000010000
004601000000053494C4153FEFF1B1C00004000000FF1D000010000046
0100060000004D4152435553FEFF1B1C00005000000FF1D000001000004601
00050000004A454E4E59FEFF1B1C00006000000FF1D0001000046010004
000000 52495441FEFF1B1C00007000000 FF1D000010000046010005000000
504554552EFFEF1B1C0000800000FF1D000001000004601000800000004245
4E4A414D494EFEFF1BF1B1C0000900000FF1D00000100000460100060000004D
4152434941FEFF1B1C0000A00000FF1D000001000004601000800000005041
545249434941FEFF1B1C0000B00000FF1D000001000004601000500000046
4142494FFEFFF1B1C0000C00000FF1D000001000004601000700000004D4152
43454C4FFEF1B1C0000D00000FF1D000001000004601000800000004C454F
4E4152444FFEFFF1B1C0000E000000FF1D0000010000046010005000000000000414C
494E45FEFF1B1C0000F00000FF1D000001000004601000700000004144494C
534F4EFEFF1B1C000100000001F001E00FF1D0000010000046010001000000
31FEFF1B1C01000001F001E00FF1D00000100000460100010000032FE
FEFF1B1C0001200000001F001E00FF1D00000100000460100010000033FEFF
1B1C001300000001F001E00FF1D00000100000460100010000034FEFF1B1C
00140000001F001E00FF1D00000100000460100010000035FEFF1B1C0015
000000 1F001E00FF1D0000010000046010001000036FEFF1B1C000160000
001F001E00FF1D00000100000460100010000037FEFF1B1C0017000001F
001E00FF1D00000100000460100010000038FEFF1B1C001800000001F001E
00FF1D00000100000460100010000039FEFF1B1C0019000001F001E00FF
1D0000010000046010002000003130FEFF1B1C001A000001F001E00FF1D
000001000000460100000000031FEFF1B1C001B0000001F001E00FF1D00
00010000046010002000003132FEFF1B1C001C000001F001E00FF1D0000
01000004601000200000313FEFF20FEFF2122002A0000000FF23FE
FEFE0E004D0061006E0061006700650072001E00550070006400610740006500
7300520065006700700730074007200790012005400610062006C0065004C00
69007300774000A005400610062006C00650008004E0061006D00650014005300
6F0075007200630065004E0061006D0065000A0054006100620049004402400
45006E0066006F0072006300650043006F006E00730074007200610069006E00
740073001E004D00069006E0069006D0075006D0043006100700610063006900
74007900180043006800650063006B004E006F0074004E0075006C006C001400
43006F006C0075006D006E004C006900730074000C0043006F006C0075006D00
6E00100053006F00750072006300650049044018006400740041006E007300
6900530074
procedure TForm2.Button1Click(Sender: TObject);
begin
  DBGrid1.OnCellClick := nil;
  try
    if OpenDialog1.Execute then
    begin
      //
    end;
    Sleep(100);
    Application.ProcessMessages;
  finally
    DBGrid1.OnCellClick := DBGrid1CellClick;
  end;
end;