多了一列的checkbox,why? |
答題得分者是:jest0024
|
BorlandUser
中階會員 ![]() ![]() ![]() 發表:148 回覆:217 積分:73 註冊:2004-02-19 發送簡訊給我 |
procedure TMainUserGroupForm.FormCreate(Sender: TObject);
Var
I, J: Integer;
ck: TCheckBox;
begin
StringGrid1.RowCount := Length(Temp) 1;
For I := 1 To Length(Temp) Do
Begin
StringGrid1.Cells[1, I] := Temp[I]; For J := 2 To 6 Do
Begin
ck := TCheckBox.Create(StringGrid1);
//ck.Name := format( 'CellChk%d_%d', [ 1, I ] );
ck.caption := '';
ck.Checked := False;
ck.visible := False;
ck.parent := StringGrid1;
ck.Height := StringGrid1.DefaultRowHeight - 1;
ck.Left := StringGrid1.CellRect(J, I).Left 5;
ck.Top := StringGrid1.CellRect(J, I).Top 1;
ck.Width := StringGrid1.CellRect(J, I).Right - StringGrid1.CellRect(J, I).Left - 5;
ck.Show;
//ck.OnMouseDown := gridcheckboxMouseDown;
StringGrid1.Objects[J, I] := ck;
End;
End;
end; 在stinggrid的最低多了一列的checkbox,但並不是stringgrid內裏的,why?
|
jest0024
高階會員 ![]() ![]() ![]() ![]() 發表:11 回覆:310 積分:224 註冊:2002-11-24 發送簡訊給我 |
|
BorlandUser
中階會員 ![]() ![]() ![]() 發表:148 回覆:217 積分:73 註冊:2004-02-19 發送簡訊給我 |
|
BorlandUser
中階會員 ![]() ![]() ![]() 發表:148 回覆:217 積分:73 註冊:2004-02-19 發送簡訊給我 |
|
BorlandUser
中階會員 ![]() ![]() ![]() 發表:148 回覆:217 積分:73 註冊:2004-02-19 發送簡訊給我 |
|
jest0024
高階會員 ![]() ![]() ![]() ![]() 發表:11 回覆:310 積分:224 註冊:2002-11-24 發送簡訊給我 |
引言: 放在drawgrid還是不能,why?有誰人能幫忙 >_<應該說StringGrid在移動捲軸後,雖然看見CheckBox移動,但實際位置並未移 動所以會造成多一行或多一列的的錯覺,還是用畫的卡後..QQ" 但是還是能使用元件,但得多做一點事! procedure TMainUserGroupForm.FormCreate(Sender: TObject); Var I, J: Integer; ck: TCheckBox; begin StringGrid1.RowCount := Length(Temp) 1; For I := 1 To Length(Temp) Do Begin StringGrid1.Cells[1, I] := Temp[I]; For J := 2 To 6 Do Begin ck := TCheckBox.Create(StringGrid1); //ck.Name := format( 'CellChk%d_%d', [ 1, I ] ); ck.caption := ''; ck.Checked := False; ck.visible := False; ck.parent := StringGrid1; ck.Height := StringGrid1.DefaultRowHeight - 1; ck.Left := StringGrid1.CellRect(J, I).Left 5; ck.Top := StringGrid1.CellRect(J, I).Top 1; ck.Width := StringGrid1.CellRect(J, I).Right - StringGrid1.CellRect(J, I).Left - 5; ck.Show; //指定ck給stringgrid1.objects stringgrid1.objects[j,i]; //ck.OnMouseDown := gridcheckboxMouseDown; StringGrid1.Objects[J, I] := ck; End; End; //並在重繪區將CheckBox指定到"正確"的位置上 procedure TForm1.StringGrid1DrawCell(Sender: TObject; ACol, ARow: Integer; Rect: TRect; State: TGridDrawState); var ck:tcheckbox; begin ck:=tcheckbox(stringgrid1.objects[ACol,ARow]); if(ck<>nil)then begin ck.Left:=rect.Left; ck.Top:=rect.Top; end; end; end;學而時習之不亦樂乎! |
BorlandUser
中階會員 ![]() ![]() ![]() 發表:148 回覆:217 積分:73 註冊:2004-02-19 發送簡訊給我 |
解決了,首先先多謝你,但是有兩個問題
第1,為什麼
//指定ck給stringgrid1.objects
stringgrid1.objects[j,i]; <-------------
//ck.OnMouseDown := gridcheckboxMouseDown;
StringGrid1.Objects[J, I] := ck; StringGrid1.Objects[j,i],不直接接向ck呢? 第2,為什麼create了object在stringgrid也會不懂跟著跑呢?
|
jest0024
高階會員 ![]() ![]() ![]() ![]() 發表:11 回覆:310 積分:224 註冊:2002-11-24 發送簡訊給我 |
引言: 解決了,首先先多謝你,但是有兩個問題 第1,為什麼 //指定ck給stringgrid1.objects stringgrid1.objects[j,i]; <-------------多打的 >"< //ck.OnMouseDown := gridcheckboxMouseDown; StringGrid1.Objects[J, I] := ck; StringGrid1.Objects[j,i],不直接接向ck呢? 第2,為什麼create了object在stringgrid也會不懂跟著跑呢? StringGrid內並未幫你處理VCL元件移動的原碼所以要自己動手作 泥可以試放個CheckBox元件到StringGrid上,rowcount&colcount設大一點 雖然圖在跑,實際上vcl並未動過學而時習之不亦樂乎! |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |