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

DBGRID坎入VCL如何再不點選該FIELD時也顯示

尚未結案
cschen99
一般會員


發表:3
回覆:6
積分:6
註冊:2005-08-30

發送簡訊給我
#1 引用回覆 回覆 發表時間:2005-10-27 09:39:57 IP:220.137.xxx.xxx 未訂閱
這張圖,(1)再按下數值的FIELD時,會顯示我所設定的VCL,滑鼠點選到其他FIELD時VISIBLE:=FALSE,VCL就會不顯示 以下是程式碼 在DBGRID的onDrawColumnCell事件中,加入以下的程式碼 if (gdFocused in State) then BEGIN if (Column.Field.FieldName = DBEDIT20.DataField) then begin DBEDIT20.Left :=PAGECONTROL1.Left+ Rect.Left + DBGrid1.Left + 2; DBEDIT20.Top := PAGECONTROL1.TOP+ Rect.Top + DBGrid1.top + 2; DBEDIT20.Width := Rect.Right - Rect.Left; DBEDIT20.Height := Rect.Bottom - Rect.Top; DBEDIT20.Visible := True; end; END; 在DBGRID的onColExit加入 if DBGrid1.SelectedField.FieldName = DBEDIT20.DataField then DBEDIT20.Visible := False; 但是,我想要在一開啟FORM時,立即顯示,而不是點選FIELD時才顯示 當我把onDrawColumnCell事件內的if (gdFocused in State) then的判斷式取消時,打開FORM後,DBGRID內的FIELD就開始狂閃爍,(因為沒有做判斷,所以才會這樣) 請問要如何才可以秀出表單的同時,坎入DBGRID的VCL能夠自動顯示出來? (DBEDIT20的VISIBLE預設是FALSE)
cschen99
一般會員


發表:3
回覆:6
積分:6
註冊:2005-08-30

發送簡訊給我
#2 引用回覆 回覆 發表時間:2005-10-31 07:25:40 IP:220.137.xxx.xxx 未訂閱
我參考的別人的程式碼,在使用CHECKBOX坎入DBGRID時在(gdFocused in State)的判斷,有ELSE的部分,但是,我看不太懂,不知道有沒有人可以解釋一下 以下是完整的程式碼
procedure TOF_E002.DBGrid1DrawColumnCell(Sender: TObject;
  const Rect: TRect; DataCol: Integer; Column: TColumn;
  State: TGridDrawState);
const IsChecked : array[Boolean] of Integer = (DFCS_BUTTONCHECK, DFCS_BUTTONCHECK or DFCS_CHECKED);
var
  DrawState: Integer;
  DrawRect: TRect;
begin
  if (gdFocused in State) then
  begin
    if (Column.Field.FieldName = DBCheckBox1.DataField) then
    begin
     DBCheckBox1.Left := Rect.Left   DBGrid1.Left   2;
     DBCheckBox1.Top := Rect.Top   DBGrid1.top   2;
     DBCheckBox1.Width := Rect.Right - Rect.Left;
     DBCheckBox1.Height := Rect.Bottom - Rect.Top;
     DBCheckBox1.Visible := True;
    end;
  end else begin
    if (Column.Field.FieldName = DBCheckBox1.DataField) then
    begin
      DrawRect:=Rect;
      InflateRect(DrawRect,-1,-1);
      DrawState := ISChecked[Column.Field.AsBoolean];
      DBGrid1.Canvas.FillRect(Rect);
      DrawFrameControl(DBGrid1.Canvas.Handle, DrawRect, DFC_BUTTON, DrawState);
    end;
  end;
end;
請問一下 const IsChecked : array[Boolean] of Integer = (DFCS_BUTTONCHECK, DFCS_BUTTONCHECK or DFCS_CHECKED); 這一行是什麼意思 DrawRect:=Rect; InflateRect(DrawRect,-1,-1); DrawState := ISChecked[Column.Field.AsBoolean]; DBGrid1.Canvas.FillRect(Rect); DrawFrameControl(DBGrid1.Canvas.Handle, DrawRect, DFC_BUTTON, DrawState); 這一段,又是什麼意思呢? 以上程式碼,就可以在不點選DBGRID的欄位時,就顯示DBCHECK的外觀, 但是,請問一下,如何應用在DBCOMBOBOX,或是其他VCL的控建呢?
cschen99
一般會員


發表:3
回覆:6
積分:6
註冊:2005-08-30

發送簡訊給我
#3 引用回覆 回覆 發表時間:2005-11-01 06:55:31 IP:218.167.xxx.xxx 未訂閱
不知道是不是我的問題讓大家看不懂???? 發表人 - cschen99 於 2005/11/01 06:57:12
系統時間:2024-05-07 9:20:32
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!