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

請問這樣的組件(listview+checkbox+radiobox)應當怎樣設計呢?

尚未結案
zzmbeyond01
中階會員


發表:98
回覆:167
積分:53
註冊:2003-09-07

發送簡訊給我
#1 引用回覆 回覆 發表時間:2004-07-02 23:29:07 IP:218.70.xxx.xxx 未訂閱
大大好: 我想从listview组件派生新的组件,实现对属性的控制 其中在一些栏位(column)中单选(radiobox)、一些栏位可多选(checkbox)。请问该如何设计呢?谢谢 發表人 - zzmbeyond01 於 2004/07/02 23:31:49 發表人 - zzmbeyond01 於 2004/07/02 23:34:45
zzmbeyond01
中階會員


發表:98
回覆:167
積分:53
註冊:2003-09-07

發送簡訊給我
#2 引用回覆 回覆 發表時間:2004-07-02 23:35:50 IP:218.70.xxx.xxx 未訂閱
發表人 - zzmbeyond01 於 2004/07/02 23:46:52
zzmbeyond01
中階會員


發表:98
回覆:167
積分:53
註冊:2003-09-07

發送簡訊給我
#3 引用回覆 回覆 發表時間:2004-07-03 16:35:47 IP:222.183.xxx.xxx 未訂閱
请问各位大大,如果我在各个subitem栏位上添加上勾'V'或者差‘X’的位图应该怎样绘制呢? 我在OnCustomDrawSubItem没有绘出来,
zzmbeyond01
中階會員


發表:98
回覆:167
積分:53
註冊:2003-09-07

發送簡訊給我
#4 引用回覆 回覆 發表時間:2004-07-03 22:59:24 IP:222.183.xxx.xxx 未訂閱
终于找到了一篇前辈的解决方案可以先仿照学习 http://delphi.ktop.com.tw/topic.php?topic_id=30547
zzmbeyond01
中階會員


發表:98
回覆:167
積分:53
註冊:2003-09-07

發送簡訊給我
#5 引用回覆 回覆 發表時間:2004-07-04 22:48:27 IP:222.183.xxx.xxx 未訂閱
参考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

發送簡訊給我
#6 引用回覆 回覆 發表時間:2004-07-05 17:45:43 IP:218.80.xxx.xxx 未訂閱
谢谢提供参考!
zzmbeyond01
中階會員


發表:98
回覆:167
積分:53
註冊:2003-09-07

發送簡訊給我
#7 引用回覆 回覆 發表時間:2004-07-05 19:23:12 IP:222.183.xxx.xxx 未訂閱
我想问如何屏蔽掉鼠标的滚轮,实现当滚动鼠标滚轮时候,使某列的Cell不被选择?< >< >
jest0024
高階會員


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

發送簡訊給我
#8 引用回覆 回覆 發表時間:2004-07-11 03:32:26 IP:211.74.xxx.xxx 未訂閱
引言: 我想问如何屏蔽掉鼠标的滚轮,实现当滚动鼠标滚轮时候,使某列的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

發送簡訊給我
#9 引用回覆 回覆 發表時間:2004-07-11 10:15:28 IP:222.183.xxx.xxx 未訂閱
谢谢jest0024大大,但是当采用mousedown事件来处理,我无法知道所选定的是那一行啊?
jest0024
高階會員


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

發送簡訊給我
#10 引用回覆 回覆 發表時間:2004-07-11 10:23:45 IP:211.74.xxx.xxx 未訂閱
引言: 谢谢jest0024大大,但是当采用mousedown事件来处理,我无法知道所选定的是那一行啊?
函數已給泥了@@" MouseToCell(x,y,ACol,ARow); 將x,y轉換為Col,Row. ABCD分開看的懂,連起來像鬼劃符~~!!!
系統時間:2024-05-15 14:33:00
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!