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

怎麼鎖定string grid中的cell?

尚未結案
diary
一般會員


發表:6
回覆:4
積分:2
註冊:2002-08-05

發送簡訊給我
#1 引用回覆 回覆 發表時間:2003-04-27 11:51:48 IP:61.230.xxx.xxx 未訂閱
我是用一個string grid讀出一個文字檔 string grid的前兩欄是放的是可以讓使用者可以選擇的yes或no的圖,當使用按下cell內的值為1,圖為yes的欄位後,值會變成0,圖也會變成no。可是我有很問題是無論我按的是第一欄或是第二欄,當我動了滑鼠上的滾輪後,第一欄的值也會觸動selectcell中的程式,把第一欄中cell的值跟圖都換掉。請問各位高手是不是我程式寫錯了?    procedure TfmDisplay.StringGrid1DrawCell(Sender: TObject; ACol,   ARow: Integer; Rect: TRect; State: TGridDrawState); begin   if (ACol = 1) and (ARow <> 0) then   begin   if (StrToInt(StringGrid1.Cells[1,ARow])) = 1  then   begin   StringGrid1.Canvas.Draw(Rect.Left, Rect.Top ,ImgYes.Picture.Bitmap);   end   else   StringGrid1.Canvas.Draw(Rect.Left, Rect.Top, ImgNo.Picture.Bitmap);   end   else if (ACol = 2) and (ARow <> 0) then   begin   if  (StrToInt(StringGrid1.Cells[2,ARow])) = 1 then   StringGrid1.Canvas.Draw(Rect.Left, Rect.Top ,ImgYes.Picture.Bitmap)   else   StringGrid1.Canvas.Draw(Rect.Left, Rect.Top, ImgNo.Picture.Bitmap);   end; end;    procedure TfmDisplay.StringGrid1SelectCell(Sender: TObject; ACol,   ARow: Integer; var CanSelect: Boolean); var   StrActive : String;    begin      if ((StrToInt(StringGrid1.Cells[ACol,ARow])) = 1) and (StringGrid1.Col <> 3 ) then begin   StrActive := '0'   end   else if ((StrToInt(StringGrid1.Cells[ACol,ARow])) = 0) and (StringGrid1.Col <> 3 ) then begin   StrActive := '1';   end;      if StringGrid1.Col <> 3 then   StringGrid1.Cells[ACol,ARow] := StrActive; end;     這是我還沒點選前的畫面 這是我選了第二欄第7個cell後的畫面 這個是我用了滑鼠上的滾輪後,第一欄的第5個跟第6個cell從原來的no變成yes的圖 ~謝謝大家的幫忙~
Royce520
高階會員


發表:18
回覆:157
積分:100
註冊:2002-09-13

發送簡訊給我
#2 引用回覆 回覆 發表時間:2003-04-27 15:38:23 IP:61.216.xxx.xxx 未訂閱
diary 你好,    我的建議有二, (1) 在StringGridMouseWheelUp, StringGridMouseWheelDown 函數中, 將 Handled 設為 已處理(true 吧) (2) 另外個方法是, 在 MouseDown 裏 記錄在哪個cell被 click了(當然, 這要寫程式判斷), 然後紀錄這些值以便配合 SelectCell 使用(這樣 可以增加其他控制花樣)    <>*真實的事物最美, 簡單的道理最好, 我能體會的 太少* 發表人 - royce520 於 2003/04/27 16:16:29
------
不要忘記呼吸,不要忘記編程! ∩__∩
diary
一般會員


發表:6
回覆:4
積分:2
註冊:2002-08-05

發送簡訊給我
#3 引用回覆 回覆 發表時間:2003-04-28 22:20:19 IP:61.230.xxx.xxx 未訂閱
謝謝回答~ 我的問題已經解決了 不過在試royce先生的第一個建議之前 我有試過用全域參數flgcol跟flgrow來記錄mousedom的事件滑鼠所點選的cell位置, 不過很奇怪的是程式在run的時候一定會先去執行selectcell的事件後 才會執行mousedown,所以selectcell的事件中我看到的flgcol值都會是空的 mousedown的值一直都傳不進selectcell中。 最後我是用royce先生說的在wheelup跟wheeldown中把handled值數為true才解決這個問題的。 如果可以的話,是不是有人可以回答一下mousedown要怎麼把col跟row的值正確的傳到selectcell中?
Royce520
高階會員


發表:18
回覆:157
積分:100
註冊:2002-09-13

發送簡訊給我
#4 引用回覆 回覆 發表時間:2003-04-29 04:15:37 IP:61.216.xxx.xxx 未訂閱
diary 你好,    抱歉, 是我的錯, 為查明第二個方法的可行性  就跟你建議    解法. 的確, SelectCell 事件是發生在 MouseDown 事件之    前, 因此, 使用那個方法 是很難達到你想要的結果.    (ps. 不過我覺得或許用一些拐來拐去的方法 還是可以做到,    sory, 毛病又犯 ) <><>*真實的事物最美, 簡單的道理最好, 我能體會的 太少*
------
不要忘記呼吸,不要忘記編程! ∩__∩
Royce520
高階會員


發表:18
回覆:157
積分:100
註冊:2002-09-13

發送簡訊給我
#5 引用回覆 回覆 發表時間:2003-04-29 04:16:16 IP:61.216.xxx.xxx 未訂閱
diary 你好,    抱歉, 是我的錯, 未查明第二個方法的可行性前 就跟你建議    解法. 的確, SelectCell 事件是發生在 MouseDown 事件之    前, 因此, 使用那個方法 是很難達到你想要的結果地!!    (ps. 不過我覺得或許用一些拐來拐去的方法 還是可以做到,    sory, 毛病又犯 ) <><>*真實的事物最美, 簡單的道理最好, 我能體會的 太少* 老是用錯, 又多
------
不要忘記呼吸,不要忘記編程! ∩__∩
diary
一般會員


發表:6
回覆:4
積分:2
註冊:2002-08-05

發送簡訊給我
#6 引用回覆 回覆 發表時間:2003-04-29 12:12:10 IP:61.230.xxx.xxx 未訂閱
royce520先生,您好    謝謝您的回答,因為有您的幫忙我才把程式寫出來的< > 我之前也試了好幾種的方法,包括宣告一個 >,如果不是有您的幫忙我可能現在還在試,把自己弄的一個頭兩個大也不一定< > ~萬分感謝~
系統時間:2024-04-19 9:22:20
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!