線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:1091
推到 Plurk!
推到 Facebook!

多了一列的checkbox,why?

答題得分者是:jest0024
BorlandUser
中階會員


發表:148
回覆:217
積分:73
註冊:2004-02-19

發送簡訊給我
#1 引用回覆 回覆 發表時間:2004-05-02 12:04:01 IP:218.102.xxx.xxx 未訂閱
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

發送簡訊給我
#2 引用回覆 回覆 發表時間:2004-05-02 14:16:00 IP:211.74.xxx.xxx 未訂閱
建議使用「繪」的方式 參考Grids內的TInplaceEdit元件 發表人 - jest0024 於 2004/05/02 15:13:08
BorlandUser
中階會員


發表:148
回覆:217
積分:73
註冊:2004-02-19

發送簡訊給我
#3 引用回覆 回覆 發表時間:2004-05-02 14:57:22 IP:218.102.xxx.xxx 未訂閱
我發覺是因為有scorll bar,即是說grid的row個多時,會有scroll bar,當接scroll到最底時,就會出現,why呢?
BorlandUser
中階會員


發表:148
回覆:217
積分:73
註冊:2004-02-19

發送簡訊給我
#4 引用回覆 回覆 發表時間:2004-05-02 15:37:50 IP:218.102.xxx.xxx 未訂閱
TInplaceEdit?
BorlandUser
中階會員


發表:148
回覆:217
積分:73
註冊:2004-02-19

發送簡訊給我
#5 引用回覆 回覆 發表時間:2004-05-02 15:44:36 IP:218.102.xxx.xxx 未訂閱
放在drawgrid還是不能,why?有誰人能幫忙 >_<
jest0024
高階會員


發表:11
回覆:310
積分:224
註冊:2002-11-24

發送簡訊給我
#6 引用回覆 回覆 發表時間:2004-05-02 16:06:37 IP:211.74.xxx.xxx 未訂閱
引言: 放在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

發送簡訊給我
#7 引用回覆 回覆 發表時間:2004-05-02 16:25:22 IP:218.102.xxx.xxx 未訂閱
解決了,首先先多謝你,但是有兩個問題 第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

發送簡訊給我
#8 引用回覆 回覆 發表時間:2004-05-02 16:40:32 IP:211.74.xxx.xxx 未訂閱
引言: 解決了,首先先多謝你,但是有兩個問題 第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並未動過
學而時習之不亦樂乎!
系統時間:2024-06-01 23:05:27
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!