procedure TForm4.BitBtn2Click(Sender: TObject);
var y : integer;
begin
for y := 1 to StringGrid1.RowCount - 1 do begin
StringGrid1.Objects[1,y] := TcheckBox.Create(StringGrid1);
with TCheckBox(StringGrid1.Objects[1,y]) do begin
OnKeyUp := CheckBoxKeyUp;
OnMouseUp := CheckBoxMouseUp;
Parent := StringGrid1;
BoundsRect := StringGrid1.CellRect(1, y);
Width := StringGrid1.ColWidths[1];
Height := StringGrid1.RowHeights[1];
Caption := '첵크박스';
Checked := false;
end;
end;
현재 폼의 스트링그리드에 데이터가 20개쯤 보여집니다. 실제 DB에는 150건의 레코드가 있습니다.
데이터는 스트링그리드의 스크롤바로 잘 움직여 집니다.
위의 소스로 첵크박스를 생성합니다. 화면에 보여지는 20개의 첵크박스 를 첵크하고 첵크된 레코드를 읽으면
잘 보여집니다.
그러나 스크롤 바를 움직이면 첵크박스도 같이 따라 움직이지 않고 현재 화면에 꼼작 않고 있네요...
그때부터는 첵크의 의미가 없어집니다.
[질문] 어찌 해야 스크롤 바를 움직여서 첵크박스를 첵크해도 정확한 자기 레코드에 첵크하게 되는가요?
질문이 잘 전달이 되었을 라나요?
테스트 해보니 체크박스도 같은거 같아요
procedure TForm1.Button1Click(Sender: TObject);
var y : integer;
begin
for y := 1 to StringGrid1.RowCount - 1 do begin
StringGrid1.Cells[0,y] := inttostr(y);
StringGrid1.Objects[1,y] := TcheckBox.Create(StringGrid1);
with TCheckBox(StringGrid1.Objects[1,y]) do begin
//OnKeyUp := CheckBoxKeyUp;
OnMouseUp := CheckBoxMouseUp;
Parent := StringGrid1;
BoundsRect := StringGrid1.CellRect(1, y);
Width := StringGrid1.ColWidths[1];
Height := StringGrid1.RowHeights[1];
Caption := '첵'+inttostr(y);
Checked := false;
end;
end;
end;
procedure TForm1.CheckBoxMouseUp(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
TCheckBox(Sender).Checked := not TCheckBox(Sender).Checked
end;
procedure TForm1.StringGrid1DrawCell(Sender: TObject; ACol, ARow: Integer;
Rect: TRect; State: TGridDrawState);
var
i : integer;
begin
for i := 1 to StringGrid1.RowCount-1 do begin
if StringGrid1.objects[1,i] <> nil then begin
Rect:=StringGrid1.cellrect(1,i);
TCheckBox(StringGrid1.objects[1 ,i]).top := Rect.Top;
TCheckBox(StringGrid1.objects[1 ,i]).Left := Rect.Left;
//TCheckBox(StringGrid1.objects[1 ,i]).BringToFront;
if (Rect.Top<=0)then
TCheckBox(StringGrid1.objects[1 ,i]).Visible := False
else begin
TCheckBox(StringGrid1.objects[1 ,i]).Visible := True;
end;
TCheckBox(StringGrid1.objects[1 ,i]).Refresh;
end;
end;
end;
hsr////////////////////////////////////////////////////////////