PDA

Просмотр полной версии : Delphi, checkbox в DBGrid для подсчета стоимости услуг



Processkill
17.02.2016, 15:24
Добрый день!
Возникла проблема с реализацией "счета за услуги"... Есть форма, на ней 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('ИИИ?').v alue);
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,StrLis t); }

{ 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.DataSou rce.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,StrLi st); }

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.DataSou rce.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 ----------

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