全國最多中醫師線上諮詢網站-台灣中醫網
發文 回覆 瀏覽次數:1593
推到 Plurk!
推到 Facebook!

點選StringGrid某一列如何讓LeftCol不會跳到第一行?

尚未結案
wivern
初階會員


發表:31
回覆:63
積分:28
註冊:2002-07-31

發送簡訊給我
#1 引用回覆 回覆 發表時間:2003-04-28 14:04:06 IP:61.219.xxx.xxx 未訂閱
請問一下,我的程式中StringGrid因為一列的資料比較多, 所以必須拉橫軸的Scroll才能看到後面的資料, 但是如果我點選另一列的資料,LeftCol又跳回第一行~ 所以我必須再次拉Scroll來看後面的資料~ 有沒有辦法讓StringGrid固定目前的LeftCol, 不會因為點選其他資料而跳到第一行?    程式中StringGrid的goRowSelect設為true, 我目前的方法如下:
void __fastcall TForm2::Result1SelectCell(TObject *Sender, int ACol,
      int ARow, bool &CanSelect)
{
isSelectRow=true;
}    void __fastcall TForm2::Result1TopLeftChanged(TObject *Sender)
{    if(isSelectRow)
{
 isSelectRow=false;
 Result1->LeftCol=LeftColumn;
 return;
}
if(Result1->Top==previous_Top)
 LeftColumn=Result1->LeftCol;
else
 previous_Top=Result1->Top;    }  
如果使用者改變LeftColumn時,記錄改變後的LeftColumn, 當使用者點選另一列時,再改變LeftCol成之前記錄的值~ 只是這樣畫面會變成先跳回第一行,再很快的跳到後面~ 看起來不怎麼好看說~ 不知還有沒有什麼辦法可以做到呢?? StringGrid很像沒有什麼Property來控制要不要跳回第一行~ 還是有只是我沒有注意到.... 拜託各位了!!謝謝!!
dllee
站務副站長


發表:321
回覆:2519
積分:1711
註冊:2002-04-15

發送簡訊給我
#2 引用回覆 回覆 發表時間:2003-04-28 22:07:21 IP:61.224.xxx.xxx 未訂閱
如果真的要,那可能要直接去改 VCL 原始碼  否則,建議您不用選用 >沒空更新的網頁... href="http://big5.to/吃軟也吃硬">http://big5.to/吃軟也吃硬 http://coolsite.to/ushells 介紹Shells,LiteStep,GeoShell....
------
http://www.ViewMove.com
wivern
初階會員


發表:31
回覆:63
積分:28
註冊:2002-07-31

發送簡訊給我
#3 引用回覆 回覆 發表時間:2003-04-29 13:05:21 IP:61.219.xxx.xxx 未訂閱
謝謝你的回答~~ 但是我的程式必須要有選一整欄的功能, 如果不選 goRowSelect, 有辦法做到類似的效果嗎??
kelon
一般會員


發表:17
回覆:27
積分:18
註冊:2002-07-22

發送簡訊給我
#4 引用回覆 回覆 發表時間:2003-04-29 14:06:26 IP:211.20.xxx.xxx 未訂閱
發表人 - kelon 於 2003/04/29 15:51:55
dllee
站務副站長


發表:321
回覆:2519
積分:1711
註冊:2002-04-15

發送簡訊給我
#5 引用回覆 回覆 發表時間:2003-04-29 15:12:03 IP:61.231.xxx.xxx 未訂閱
引言: 謝謝你的回答~~ 但是我的程式必須要有選一整欄的功能, 如果不選 goRowSelect, 有辦法做到類似的效果嗎??
建議還是不要用 RowSelect ,需要「選整欄」那就在 OnDrawCell 自行為選到的那一欄上背景色即可。如下:
  if(ARow==this->StringGrid1->Row)
  {
    this->StringGrid1->Canvas->Brush->Color=clBlue;
  }
  else
  {
    this->StringGrid1->Canvas->Brush->Color=clWhite;
  }
  this->StringGrid1->Canvas->TextRect(Rect,Rect.Left,Rect.Top,this->StringGrid1->Cells[ACol][ARow]);
沒空更新的網頁... http://dllee.ktop.com.tw C及指標教學,計算機概論,資訊管理導論... http://big5.to/吃軟也吃硬 http://coolsite.to/ushells 介紹Shells,LiteStep,GeoShell....
------
http://www.ViewMove.com
wivern
初階會員


發表:31
回覆:63
積分:28
註冊:2002-07-31

發送簡訊給我
#6 引用回覆 回覆 發表時間:2003-04-29 15:30:31 IP:61.219.xxx.xxx 未訂閱
謝謝你的回答,其實你的方法我之前就有試過了, 不過問題在於,如果不用goRowSelect, 那點選其中某一個cell,只有那一個cell會引發OnDrawCell的事件, 那一欄其他cell不會重新畫過, 所以我還必須手動拖拉視窗讓視窗重新畫過才會有一欄都選取的效果, 而且當我點選同一頁另一欄的其中一個cell時, 也只有原先點選的那一個cell會引發OnDrawCell,回到原來的顏色, 同一欄其他cell的顏色還是藍色~~ 不知這要怎麼解決呢?
dllee
站務副站長


發表:321
回覆:2519
積分:1711
註冊:2002-04-15

發送簡訊給我
#7 引用回覆 回覆 發表時間:2003-04-29 17:53:33 IP:61.231.xxx.xxx 未訂閱
引言: 謝謝你的回答,其實你的方法我之前就有試過了, 不過問題在於,如果不用goRowSelect, 那點選其中某一個cell,只有那一個cell會引發OnDrawCell的事件, 那一欄其他cell不會重新畫過, 所以我還必須手動拖拉視窗讓視窗重新畫過才會有一欄都選取的效果, 而且當我點選同一頁另一欄的其中一個cell時, 也只有原先點選的那一個cell會引發OnDrawCell,回到原來的顏色, 同一欄其他cell的顏色還是藍色~~ 不知這要怎麼解決呢?
對於 Grid 之 OnMouseDown,OnKeyDown 之類的事件中,加入 StringGrid1->Invalidate(); 或 StringGrid1->Update(); 強迫重繪即可。 沒空更新的網頁... http://dllee.ktop.com.tw C及指標教學,計算機概論,資訊管理導論... http://big5.to/吃軟也吃硬 http://coolsite.to/ushells 介紹Shells,LiteStep,GeoShell....
------
http://www.ViewMove.com
wivern
初階會員


發表:31
回覆:63
積分:28
註冊:2002-07-31

發送簡訊給我
#8 引用回覆 回覆 發表時間:2003-04-30 08:59:54 IP:61.219.xxx.xxx 未訂閱
謝謝~~我是把StringGrid1->Invalidate(); 加進OnSelectCell的事件裡, 就可以整欄選取了~~ 真是萬分感激~~ 不過還是有點小小的遺憾啦, 就是只有點選的那個cell外框會有一條白色的虛線, 如果這條虛線能把整欄都框起來,就更完美了~~ 不過還是非常謝謝你~
系統時間:2024-03-29 19:57:37
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!