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

有關StringGrid的問題

答題得分者是:taishyang
lin11112
初階會員


發表:42
回覆:83
積分:25
註冊:2003-02-17

發送簡訊給我
#1 引用回覆 回覆 發表時間:2003-12-09 15:36:54 IP:210.202.xxx.xxx 未訂閱
請問在StringGrid中 如何能做到Multi-Select的功能 並能測知那些cell被選擇到 謝謝 發表人 - taishyang 於 2003/12/09 15:44:39
taishyang
站務副站長


發表:377
回覆:5490
積分:4563
註冊:2002-10-08

發送簡訊給我
#2 引用回覆 回覆 發表時間:2003-12-09 16:28:55 IP:140.135.xxx.xxx 未訂閱
lin11112您好: 請注意您跨版發言! http://delphi.ktop.com.tw/topic.php?TOPIC_ID=41677 而且您多次在Delphi板上問BCB的問題,這樣會造成管理上的不便 麻煩請您配合 下面的 class="code"> void __fastcall TForm1::Button1Click(TObject *Sender) { for (int i=0;iColCount-1 ;i++) { for (int j=0;jRowCount-1 ;j++) { if (i>=StringGrid1->Selection.Left&& i<=StringGrid1->Selection.Right && j>=StringGrid1->Selection.Top&& j<=StringGrid1->Selection.Bottom) StringGrid1->Cells[i][j]="O"; else StringGrid1->Cells[i][j]="X"; } } } 效果如下圖所示 順心 發表人 -
lin11112
初階會員


發表:42
回覆:83
積分:25
註冊:2003-02-17

發送簡訊給我
#3 引用回覆 回覆 發表時間:2003-12-09 16:36:43 IP:210.202.xxx.xxx 未訂閱
Sorry taishyang大大 下次會注意的
anpino
版主


發表:31
回覆:477
積分:231
註冊:2003-01-02

發送簡訊給我
#4 引用回覆 回覆 發表時間:2003-12-09 16:41:40 IP:218.32.xxx.xxx 未訂閱
引言: 請問在StringGrid中 如何能做到Multi-Select的功能 並能測知那些cell被選擇到 謝謝
我記得StringGrid沒有Multi-Select的屬性, 但是你可以紀錄user選過哪些cell。 利用StringGrid的row與col可以知道哪個cell被選到了。 數學系是內功很強(邏輯/分析) 資工系是招式很多(程式技巧) 就像令狐沖
lo
初階會員


發表:8
回覆:69
積分:25
註冊:2003-01-12

發送簡訊給我
#5 引用回覆 回覆 發表時間:2003-12-09 18:50:51 IP:211.76.xxx.xxx 未訂閱
lin11112您好:     int i,j, end_x, end_y;//全域變數 void __fastcall TForm1::Button1Click(TObject *Sender) { ShowMessage("star_x=" IntToStr(i) " star_y=" IntToStr(j) " end_x=" IntToStr(end_x) " end_y=" IntToStr( end_y)); } void __fastcall TForm1::sgrSelectCell(TObject *Sender, int ACol, int ARow, bool &CanSelect) { i=ACol; j=ARow; } void __fastcall TForm1::sgrMouseUp(TObject *Sender, TMouseButton Button, TShiftState Shift, int X, int Y) { int rowheight=sgr->DefaultRowHeight; int colwidth=sgr->DefaultColWidth; end_x=X/colwidth; end_y=Y/rowheight; } 範圍選擇設定 Properties/Option/goRangeSelect==true 應有更好的方式,也請先進指教.
lin11112
初階會員


發表:42
回覆:83
積分:25
註冊:2003-02-17

發送簡訊給我
#6 引用回覆 回覆 發表時間:2003-12-10 08:34:09 IP:210.202.xxx.xxx 未訂閱
lo大大 請問sgrSelectCell 此函式是在何時呼叫或要放在那一個event中呢??
lo
初階會員


發表:8
回覆:69
積分:25
註冊:2003-01-12

發送簡訊給我
#7 引用回覆 回覆 發表時間:2003-12-10 09:40:23 IP:211.76.xxx.xxx 未訂閱
lin11112您好:    
lo
初階會員


發表:8
回覆:69
積分:25
註冊:2003-01-12

發送簡訊給我
#8 引用回覆 回覆 發表時間:2003-12-10 10:15:18 IP:211.76.xxx.xxx 未訂閱
lin11112您好: 這方式有缺點就是欄位大小要一致,規則性欄位可以靠程式達成. 剛剛仔細研究taishyang大的程式似乎比較好,可讀性較好. 請試試看 StringGrid1->Selection.Left StringGrid1->Selection.Right StringGrid1->Selection.Top StringGrid1->Selection.Bottom 都是pixels值 除以 sgr->DefaultRowHeight & sgr->DefaultColWidth 應可得到相同答案
lo
初階會員


發表:8
回覆:69
積分:25
註冊:2003-01-12

發送簡訊給我
#9 引用回覆 回覆 發表時間:2003-12-11 01:16:37 IP:211.76.xxx.xxx 未訂閱
sgr->Row sgr->Col 這是選擇範圍的起點座標
lin11112
初階會員


發表:42
回覆:83
積分:25
註冊:2003-02-17

發送簡訊給我
#10 引用回覆 回覆 發表時間:2003-12-12 11:20:57 IP:210.202.xxx.xxx 未訂閱
請問StringGridDrawCell 是否會影響select 因小弟不論如何試都無法顯示成藍色
lo
初階會員


發表:8
回覆:69
積分:25
註冊:2003-01-12

發送簡訊給我
#11 引用回覆 回覆 發表時間:2003-12-12 12:48:11 IP:211.76.xxx.xxx 未訂閱
引言:請問StringGridDrawCell 是否會影響select 因小弟不論如何試都無法顯示成藍色
藍色是預設的 請檢查看DefaultDrawing==true ps:結案時,請將得分指給taishyang我在此也跟他學到了 老菜鳥
lin11112
初階會員


發表:42
回覆:83
積分:25
註冊:2003-02-17

發送簡訊給我
#12 引用回覆 回覆 發表時間:2003-12-12 13:09:15 IP:210.202.xxx.xxx 未訂閱
小弟的code如下(DefaultDrawing=true) 但仍無法select void __fastcall TFormDockStatusPage::StringGridDrawCell(TObject *Sender, int ACol, int ARow, TRect &Rect, TGridDrawState State) { StringGrid->Canvas->Pen->Color = clBlack; if( ARow == 0) StringGrid->Canvas->Brush->Color = clBtnFace; else { switch( ACol % 3) { case 0: StringGrid->Canvas->Brush->Color = clInfoBk; StringGrid->Canvas->FillRect( Rect); if( State.Contains( gdFocused)) StringGrid->Canvas->DrawFocusRect(Rect); StringGrid->Canvas->TextOut( Rect.Left 2, Rect.Top 2, StringGrid->Cells[ACol][ARow]); break; case 1: StringGrid->Canvas->Brush->Color = TColor( 0x00B9D9F0); break; case 2: StringGrid->Canvas->Brush->Color = TColor( 0x00B9D9F0); break; } } StringGrid->Canvas->FillRect( Rect); if( State.Contains( gdFocused)) StringGrid->Canvas->DrawFocusRect(Rect); StringGrid->Canvas->TextOut( Rect.Left 2, Rect.Top 2, StringGrid->Cells[ACol][ARow]); }
taishyang
站務副站長


發表:377
回覆:5490
積分:4563
註冊:2002-10-08

發送簡訊給我
#13 引用回覆 回覆 發表時間:2003-12-12 13:51:39 IP:140.135.xxx.xxx 未訂閱
lin11112您好:
引言:小弟的code如下(DefaultDrawing=true) 但仍無法select
您PO的code與您原問題[如何能做到Multi-Select的功能][並能測知那些cell被選擇到],沒有什麼關聯性耶 發表人 -
lo
初階會員


發表:8
回覆:69
積分:25
註冊:2003-01-12

發送簡訊給我
#14 引用回覆 回覆 發表時間:2003-12-12 15:21:16 IP:211.76.xxx.xxx 未訂閱
lin11112您好: 我加入紅色部分就可以了 [void __fastcall TForm1::sgrMouseUp(TObject *Sender, TMouseButton Button, TShiftState Shift, int X, int Y) { int rowheight=sgr->DefaultRowHeight; int colwidth=sgr->DefaultColWidth; end_x=X/colwidth; end_y=Y/rowheight; sgr->Repaint(); } void __fastcall TForm1::sgrDrawCell(TObject *Sender, int ACol, int ARow, TRect &Rect, TGridDrawState State) { if( State.Contains( gdFocused)) sgr->Canvas->DrawFocusRect(Rect); sgr->Canvas->Pen->Color = clBlack; if( ARow == 0) sgr->Canvas->Brush->Color = clBtnFace; else { switch( ACol % 3) { case 0: sgr->Canvas->Brush->Color = clInfoBk; sgr->Canvas->FillRect( Rect); if( State.Contains( gdFocused)) sgr->Canvas->DrawFocusRect(Rect); sgr->Canvas->TextOut( Rect.Left 2, Rect.Top 2, sgr->Cells[ACol][ARow]); break; case 1: sgr->Canvas->Brush->Color = TColor( 0x00B9D9F0); break; case 2: sgr->Canvas->Brush->Color = TColor( 0x00B9D9F0); break; } } if (ACol>=i&ACol<=end_x&ARow>=j&ARow<=end_y) sgr->Canvas->Brush->Color =clBlue; sgr->Canvas->FillRect( Rect); sgr->Canvas->TextOut( Rect.Left 2, Rect.Top 2, sgr->Cells[ACol][ARow]);
lin11112
初階會員


發表:42
回覆:83
積分:25
註冊:2003-02-17

發送簡訊給我
#15 引用回覆 回覆 發表時間:2003-12-12 17:07:52 IP:210.202.xxx.xxx 未訂閱
感謝lo大大 小弟已試成功 可否再請問 能否利用顏色來偵測有那些Cell有被選到
lo
初階會員


發表:8
回覆:69
積分:25
註冊:2003-01-12

發送簡訊給我
#16 引用回覆 回覆 發表時間:2003-12-12 18:33:53 IP:211.76.xxx.xxx 未訂閱
我想應該可以吧 加入紅色code後可show出數值,對顏色沒研究,我還不會轉換.請你研究一下. 或請知道的先進們指導一下.    void __fastcall TForm1::sgrSelectCell(TObject *Sender, int ACol, int ARow,       bool &CanSelect) {    i=ACol;    j=ARow; String colorshow= sgr->Canvas->Brush->Color; ShowMessage( "colorshow=" colorshow); }
lin11112
初階會員


發表:42
回覆:83
積分:25
註冊:2003-02-17

發送簡訊給我
#17 引用回覆 回覆 發表時間:2003-12-15 08:35:22 IP:210.202.xxx.xxx 未訂閱
感謝 lo與taishyang的指導
系統時間:2024-05-05 23:51:11
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!