Добрый день!
Возникла проблема с реализацией "счета за услуги"... Есть форма, на ней dbgrid(подключена база access через элемент data sourse, query, ado connection), попыталась сделать сама прорисовку checkbox в пустом столбце подключаемой таблицы, но при нажатии на квадратик вылетает ошибка "Access violation at address 004CE3C0 in module Project1.exe. Read of address 00000000" При компиляции ошибки нет. я так понимаю, что где-то что-то не дописано? Если кто может, ткните где и как...
Спасибо!
В коде есть много лишнего (label, listbox и тд, я пробовал по-разному)
Код:
Код:
unit Unit10;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, Buttons, DBCtrls, DB, ADODB, Grids, DBGrids, ValEdit,
  CheckLst;

type
  TForm10 = class(TForm)
    btn1: TBitBtn;
    cbb1: TComboBox;
    lbl1: TLabel;
    lbl2: TLabel;
    cbb2: TComboBox;
    chklst1: TCheckListBox;
    lst1: TListBox;
    lbl3: TLabel;
    con1: TADOConnection;
    qry1: TADOQuery;
    dbgrd1: TDBGrid;
    ds1: TDataSource;
    procedure btn1Click(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure dbgrd1DblClick(Sender: TObject);
    procedure lst1DblClick(Sender: TObject);
    procedure dbgrd1DrawColumnCell(Sender: TObject; const Rect: TRect;
      DataCol: Integer; Column: TColumn; State: TGridDrawState);
    procedure dbgrd1CellClick(Column: TColumn);
{    procedure dbgrd1DrawColumnCell(Sender: TObject; const Rect: TRect;
      DataCol: Integer; Column: TColumn; State: TGridDrawState);
    procedure dbgrd1CellClick(Column: TColumn);       }


  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form10: TForm10;
  m: String;
  n: string;
  DrawRect: Trect;
  bState: Boolean;
  StrList: TStringList;
implementation

uses Unit3, Unit4, Unit6;

{$R *.dfm}

procedure TForm10.btn1Click(Sender: TObject);
begin
Form10.Hide;
Form3.Show;
end;



procedure TForm10.FormCreate(Sender: TObject);
begin
Form4.qry1.first;
while not Form4.qry1.eof do
begin
cbb2.items.add(Form4.qry1.fieldByName('ИИИ?').value);
Form4.qry1.next
end;




{ИИИИ
Form6.qry1.first;
while not Form6.qry1.eof do
begin
lst1.items.add(Form6.qry1.fieldByName('ИИИИИИ').value);
Form6.qry1.next
end;   }

end;

procedure TForm10.dbgrd1DblClick(Sender: TObject);
begin
{lst1.items.Add(dbgrd1.SelectedField.asstring);  }
end;

procedure TForm10.lst1DblClick(Sender: TObject);
begin
 lst1.DeleteSelected;
end;



{procedure TForm10.dbgrd1DrawColumnCell(Sender: TObject; const Rect: TRect;
  DataCol: Integer; Column: TColumn; State: TGridDrawState);
 begin
   {DrawColCell('ИИИИ?',Rect,Column,dbgrd1,StrList); }

{    if Column.FieldName = 'ИИИИ?' then
    begin
      DrawFrameControl(dbgrd1.Canvas.Handle, Rect,DFC_BUTTON, 0);
    end;

end;


procedure TForm10.dbgrd1CellClick(Column: TColumn);
begin
  lbl3.Visible:=false;
 lbl3.Caption:=IntToStr(Qry1.RecNo);

  if dbgrd1.DataSource.DataSet.IsEmpty=true then exit;
  //Grid.SelectedRows.CurrentRowSelected := false;
  if(Column.FieldName='ИИИИ?')and(dbgrd1.DataSource.DataSet.RecordCount>0)then
  begin
    if StrList.Strings[dbgrd1.DataSource.DataSet.RecNo - 1] = '0' then
      StrList.Strings[dbgrd1.DataSource.DataSet.RecNo - 1] := '1'
    else
      StrList.Strings[dbgrd1.DataSource.DataSet.RecNo - 1] := '0';
    dbgrd1.Repaint;
  end;
  dbgrd1.SelectedRows.CurrentRowSelected := True;
end;  }

procedure TForm10.dbgrd1DrawColumnCell(Sender: TObject; const Rect: TRect;
  DataCol: Integer; Column: TColumn; State: TGridDrawState);
begin
    {DrawColCell('ИИИИ?',Rect,Column,dbgrid1,StrList);   }

   if Column.FieldName = 'ИИИИ?' then
    begin
      DrawFrameControl(dbgrd1.Canvas.Handle, Rect,DFC_BUTTON, 0);
    end;
end;

procedure TForm10.dbgrd1CellClick(Column: TColumn);
begin
StrList.Clear;
StrList:=TStringList.Create;
 lbl3.Visible:=false;
 lbl3.Caption:=IntToStr(qry1.RecNo);

  if dbgrd1.DataSource.DataSet.IsEmpty=true then exit;
  //dbGrid1.SelectedRows.CurrentRowSelected := false;
  if(Column.FieldName='ИИИИ?')and(dbgrd1.DataSource.DataSet.RecordCount>0)then
  begin
    if StrList.Strings[dbgrd1.DataSource.DataSet.RecNo - 1] = '0' then
      StrList.Strings[dbgrd1.DataSource.DataSet.RecNo - 1] := '1'
    else
      StrList.Strings[dbgrd1.DataSource.DataSet.RecNo - 1] := '0';
    dbgrd1.Repaint;
  end;
  dbgrd1.SelectedRows.CurrentRowSelected := True;
end;

end.


---------- Post added at 17:24 ---------- Previous post was at 17:20 ----------

В коде стоит дублирование части кода (взято в {}, прошу прощения...)