請問這樣的組件(listview+checkbox+radiobox)應當怎樣設計呢? |
尚未結案
|
zzmbeyond01
中階會員 發表:98 回覆:167 積分:53 註冊:2003-09-07 發送簡訊給我 |
|
zzmbeyond01
中階會員 發表:98 回覆:167 積分:53 註冊:2003-09-07 發送簡訊給我 |
|
zzmbeyond01
中階會員 發表:98 回覆:167 積分:53 註冊:2003-09-07 發送簡訊給我 |
|
zzmbeyond01
中階會員 發表:98 回覆:167 積分:53 註冊:2003-09-07 發送簡訊給我 |
|
zzmbeyond01
中階會員 發表:98 回覆:167 積分:53 註冊:2003-09-07 發送簡訊給我 |
参考jest0024 大大的代码,但是有个问题一直没有解决的了。
就是当我在选择的某一列滚动鼠标时候,使滑到的Cell处于选择状态,
从而触发该列checkbox的checked事件,我想问如何屏蔽掉鼠标的滚轮,当滚动鼠标滚轮时候,使Cell不被选择?
参考jest0024 大大的代码 http://delphi.ktop.com.tw/topic.php?topic_id=49816 用繪的方式.. //自訂繪製TCheckBox的方法 procedure DrawCheckBox(Canvas:TCanvas;Ck:TCheckBox;Const R:TRect); Const bW = 13; var tx,ty :Integer; bR :TRect; uState:Integer; begin Canvas.Brush.Style:=bsSolid; Canvas.Brush.Color:=ck.Color; Canvas.FillRect(R); Canvas.Brush.Style:=bsClear; Canvas.Font:=ck.Font; //繪製方塊 DFCS_INACTIVE(Not Enabled) DFCS_CHECKED (Checked) uState:=DFCS_BUTTONCHECK; if(Not ck.Enabled)then uState:=uState or DFCS_INACTIVE; if(ck.Checked)then uState:=uState or DFCS_CHECKED; tx:=R.Left; ty:=R.Top (R.Bottom-R.Top-bw)div 2; DrawFrameControl(Canvas.Handle,Rect(tx,ty,tx bw,ty bw),DFC_BUTTON,uState); //繪製文字 tx:=tx bw 5; ty:=R.Top (R.Bottom-R.Top-Canvas.TextHeight('A'))div 2; if(Not Ck.Enabled)then begin Canvas.Font.Color:=clWindow; Canvas.TextOut(tx 1,ty 1,ck.Caption); Canvas.Font.Color:=clGrayText; Canvas.TextOut(tx ,ty ,ck.Caption); end else Canvas.TextOut(tx,ty,ck.Caption); end; //建立CheckBox元件 procedure TForm1.FormCreate(Sender: TObject); var ck :TCheckBox; i,j:Integer; begin for j:=1 to StringGrid1.RowCount-1 do for i:=1 to StringGrid1.ColCount-1 do begin ck:=TCheckBox.Create(Self); ck.Visible:=False; ck.Parent:=StringGrid1.Parent; ck.Caption:=Format('(%d,%d)',[i,j]); ck.OnExit:=CkExit; //離開checkBox時要把checkbox隱藏 ck.Color :=StringGrid1.Color; StringGrid1.Objects[i,j]:=ck; end; end; //離開元件時,自動隱藏 procedure TForm1.CkExit(Sender:TObject); begin if Sender is TCheckBox then TCheckBox(Sender).Visible:=False; end; //表格重繪時,須以自訂方式重繪 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 DrawCheckBox(StringGrid1.Canvas,ck,Rect); end; //當選擇相對表格時,將相對的Ck顯示並移動焦點 procedure TForm1.StringGrid1SelectCell(Sender: TObject; ACol, ARow: Integer; var CanSelect: Boolean); var ck:TCheckBox; fR:TRect; begin ck:=TCheckBox(StringGrid1.Objects[ACol,ARow]); if(ck=nil)then Exit; fR:=StringGrid1.CellRect(ACol,ARow); //將Ck放到表格相對位置 Ck.Left:=StringGrid1.Left fR.Left 2; Ck.Top :=StringGrid1.Top fR.Top 2; Ck.Width:=fR.Right-fR.Left; Ck.Height:=fR.Bottom-fR.Top; //顯示ck並將焦點移到Ck Ck.Visible:=True; Ck.Checked:=Not Ck.Checked; Ck.SetFocus; end; |
sl@cableplus.com.cn
高階會員 發表:168 回覆:359 積分:130 註冊:2004-03-26 發送簡訊給我 |
|
zzmbeyond01
中階會員 發表:98 回覆:167 積分:53 註冊:2003-09-07 發送簡訊給我 |
|
jest0024
高階會員 發表:11 回覆:310 積分:224 註冊:2002-11-24 發送簡訊給我 |
引言: 我想问如何屏蔽掉鼠标的滚轮,实现当滚动鼠标滚轮时候,使某列的Cell不被选择?< >< > >>< face="Verdana, Arial, Helvetica">1.使滾輪失效 procedure OnMouseWheelDown & MouseWheelUp(.... Handled:=True; 2.使用滑鼠事件來控制 OnSelectCell改為OnMouseDown試試 MouseToCell(x,y,ACol,ARow); ....ABCD分開看的懂,連起來像鬼劃符~~!!! |
zzmbeyond01
中階會員 發表:98 回覆:167 積分:53 註冊:2003-09-07 發送簡訊給我 |
|
jest0024
高階會員 發表:11 回覆:310 積分:224 註冊:2002-11-24 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |