請問DBGrid如何做出光棒的效果呢?/ |
尚未結案
|
odyaho
初階會員 發表:60 回覆:104 積分:42 註冊:2005-02-15 發送簡訊給我 |
請問各位先進
我已爬過文章 好像只有提到用StringGrid做光棒顯示
沒有DBGrid
大概知道要在DBGrid1DrawColumnCell事件下達成
利用
DBGrid1->Canvas->Brush->Color=clSkyBlue; DBGrid1->Canvas->Font->Color=clYellow;可以設定顏色 可是要如何做判斷呢?? 另外我知道 在DBGrid->Properties->Options->dgRowSelect可以選為true 再利用DBNavigator1做上一筆下一筆動作時 也可以有光棒效果(藍底白字) 可以改變底色及字的顏色嗎?? 可是我用自己寫的上一筆 下一筆時 此光棒效果就沒有了 這是出了什麼問題呢 程式碼:下一筆 Form1->Table1->MoveBy(1);期待各位的回覆 發表人 - |
supman
尊榮會員 發表:29 回覆:770 積分:924 註冊:2002-04-22 發送簡訊給我 |
您好:
我測試我的程式使用moveby是沒有問題的,會不會是您程式哪地方有錯,把程式碼貼上來看看,
我的做法您參考看看:
procedure TzManagement.DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect; DataCol: Integer; Column: TColumn; State: TGridDrawState); begin with DBGrid1.Canvas do begin // 先預設顏色 if GDSelected in State then // Select光棒停在此Cell begin Font.Color:=clHighLightText; // 正常的DBGrid顏色 Brush.Color:=$007D3F00; // 正常的DBGrid顏色 end else begin // Select光棒未停在此Cell Font.Color:=clBlack; // 正常的DBGrid顏色 Brush.color:=clWhite; // 正常的DBGrid顏色 end; // 設定指定Cell的顏色 // if DataCol=1 then // 第二個欄位 if (GDSelected in State) then // Select光棒停在此Cell begin if ((Sender as TDBGrid).DataSource.DataSet.FieldByName('Payed').AsInteger>=10) then Brush.Color:=$007D3F00;// 字變紅色加一點白色調(這樣反白效果才會好) end else begin // Select光棒未停在此Cell if ((Sender as TDBGrid).DataSource.DataSet.FieldByName('Payed').AsInteger>=10) then Brush.Color:=$00A4A4FF; // 字變紅色 end; // 一定要執行繪圖的動作 DbGrid1.DefaultDrawColumnCell(Rect,DataCol,Column,[]); end; end; |
odyaho
初階會員 發表:60 回覆:104 積分:42 註冊:2005-02-15 發送簡訊給我 |
Dear supman:
謝謝您的回覆..
我已參考過您的程式了 是delphi寫的
有試著去修改
可是有些地方還是不懂
procedure TzManagement.DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect; DataCol: Integer; Column: TColumn; State: TGridDrawState); begin with DBGrid1.Canvas do begin // 先預設顏色 if GDSelected in State then // Select光棒停在此Cell ^^^^^^^^^^^^^^^^^^^^^^^這裡在BCB怎麼判定呢?? begin Font.Color:=clHighLightText; // 正常的DBGrid顏色 Brush.Color:=$007D3F00; // 正常的DBGrid顏色 end else begin // Select光棒未停在此Cell Font.Color:=clBlack; // 正常的DBGrid顏色 Brush.color:=clWhite; // 正常的DBGrid顏色 end; // 設定指定Cell的顏色 // if DataCol=1 then // 第二個欄位 if (GDSelected in State) then // Select光棒停在此Cell ^^^^^^^^^^^^^^^^^^^^^^^ begin if ((Sender as TDBGrid).DataSource.DataSet.FieldByName('Payed').AsInteger>=10) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^?? then Brush.Color:=$007D3F00;// 字變紅色加一點白色調(這樣反白效果才會好) end else begin // Select光棒未停在此Cell if ((Sender as TDBGrid).DataSource.DataSet.FieldByName('Payed').AsInteger>=10) then Brush.Color:=$00A4A4FF; // 字變紅色 end; // 一定要執行繪圖的動作 DbGrid1.DefaultDrawColumnCell(Rect,DataCol,Column,[]); end; end;我有想大概要如何做 要先判斷下一筆button按下時 假設按下 就換顏色 判斷式寫在DBGrid1DrawColumnCell事件裡 可是如何判斷button按下呢?? 應該還可以用 [red]Column->Field->DataSet->RecNo;來判斷 如何判斷呢?? 以上是小弟淺見.... |
supman
尊榮會員 發表:29 回覆:770 積分:924 註冊:2002-04-22 發送簡訊給我 |
您好:
上面那段不是我寫的,是偷某位大大的程式= =",忘了是哪位大大,真的很抱歉.
我另外開了一各新的程式測試,發現問題應該不在那邊而是在您DBGrid的Option設定,您要把dbAlwaysShowSelection設定為true,這樣應該就可以了.
另外抱歉,忘了這裡是C++Builder區..@@"
我簡化了程式碼,只要這些程式就可以改變光棒與字型的顏色了,您在試看看
if (State.Contains(gdSelected)) { DBGrid1->Canvas->Font->Color=clWhite; DBGrid1->Canvas->Brush->Color=clBlue; } else { DBGrid1->Canvas->Font->Color=clBlack; DBGrid1->Canvas->Brush->Color=clWhite; } DBGrid1->DefaultDrawColumnCell(Rect,DataCol,Column,State);發表人 - supman 於 2005/06/02 20:01:19 |
odyaho
初階會員 發表:60 回覆:104 積分:42 註冊:2005-02-15 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |