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

grid 問題!!

答題得分者是:ddy
carter6
初階會員


發表:53
回覆:108
積分:42
註冊:2002-12-16

發送簡訊給我
#1 引用回覆 回覆 發表時間:2003-04-14 13:05:12 IP:61.216.xxx.xxx 未訂閱
我的 grid 有一個欄位型態是 Memo 型態 要怎樣才可以在 grid 裡看到 Memo 的內容 Delphi 的初學者
T.J.B
版主


發表:29
回覆:532
積分:497
註冊:2002-08-14

發送簡訊給我
#2 引用回覆 回覆 發表時間:2003-04-14 13:13:55 IP:61.220.xxx.xxx 未訂閱
在ongettext事件寫 text := query1.fieldbyname('xxx').asstring; 天行健 君子當自強不息~~@.@
------
天行健
君子當自強不息~~@.@
carter6
初階會員


發表:53
回覆:108
積分:42
註冊:2002-12-16

發送簡訊給我
#3 引用回覆 回覆 發表時間:2003-04-14 13:16:43 IP:61.216.xxx.xxx 未訂閱
Sorry ~~~ 我沒說清楚 我是要在 Grid 裡可以看到 Memo 的內容 不是出現 (Memo)
ddy
站務副站長


發表:262
回覆:2105
積分:1169
註冊:2002-07-13

發送簡訊給我
#4 引用回覆 回覆 發表時間:2003-04-14 13:16:47 IP:61.218.xxx.xxx 未訂閱
另可參考 VCL How To - DataControl 元件篇--bruce0211版主 著,有詳細內容 http://delphi.ktop.com.tw/topic.php?TOPIC_ID=20448 若合用,別忘了給bruce0211 版主推薦給分    關於從dbgrid取出memo值 http://delphi.ktop.com.tw/topic.php?TOPIC_ID=26813         發表人 - ddy 於 2003/04/14 13:21:46
Justmade
版主


發表:94
回覆:1934
積分:2030
註冊:2003-03-12

發送簡訊給我
#5 引用回覆 回覆 發表時間:2003-04-14 13:27:15 IP:218.16.xxx.xxx 未訂閱
TJB 版主說的方法是可行的。 你可在相關 Table/Query 的 Memo Field 的 onGetText 事件設定該 Code 就可在 dbGrid 顯示 Memo 內容。
T.J.B
版主


發表:29
回覆:532
積分:497
註冊:2002-08-14

發送簡訊給我
#6 引用回覆 回覆 發表時間:2003-04-14 13:35:54 IP:61.220.xxx.xxx 未訂閱
hi carter6 :    如果覺得 ddy 版主提供文件的內容合意的話 別忘了給ddy 版主 推薦給分 < >< > 天行健 君子當自強不息~~@.@ 發表人 - T.J.B 於 2003/04/14 13:37:43
------
天行健
君子當自強不息~~@.@
carter6
初階會員


發表:53
回覆:108
積分:42
註冊:2002-12-16

發送簡訊給我
#7 引用回覆 回覆 發表時間:2003-04-14 13:51:58 IP:61.216.xxx.xxx 未訂閱
謝謝各位的指教
ddy
站務副站長


發表:262
回覆:2105
積分:1169
註冊:2002-07-13

發送簡訊給我
#8 引用回覆 回覆 發表時間:2003-04-14 14:02:53 IP:61.218.xxx.xxx 未訂閱
不好意思啦, src="http://delphi.ktop.com.tw/loadfile.php?TOPICID=8147403&CC=182217">
carter6
初階會員


發表:53
回覆:108
積分:42
註冊:2002-12-16

發送簡訊給我
#9 引用回覆 回覆 發表時間:2003-04-15 14:23:00 IP:61.216.xxx.xxx 未訂閱
請問 TBlobStream 要設在哪 而且我對那一段 DBGrid1DrawDataCell 的程式碼不是很清楚 能請各位執導一下嗎?? 剛學 Delphi 的人
carter6
初階會員


發表:53
回覆:108
積分:42
註冊:2002-12-16

發送簡訊給我
#10 引用回覆 回覆 發表時間:2003-04-15 14:25:06 IP:61.216.xxx.xxx 未訂閱
不好意思沒說清楚就是 □顯示 Memo 欄位於 DBGrid 中 那一段
ddy
站務副站長


發表:262
回覆:2105
積分:1169
註冊:2002-07-13

發送簡訊給我
#11 引用回覆 回覆 發表時間:2003-04-15 16:01:51 IP:61.218.xxx.xxx 未訂閱
那一行不懂? 
procedure TForm1.DBGrid1DrawDataCell(Sender: TObject; const Rect: TRect; Field: TField; State: TGridDrawState); 
var   
   P: array [0..50] of char; {array size is number of characters needed}   
   bs: TBlobStream; {from the memo field}   
   hStr: String; 
begin   
 if Field is TMemoField then  
 begin     
     with (Sender as TDBGrid).Canvas do 
     begin {Table1Notes is the TMemoField}
         bs := TBlobStream.Create(Table1Notes, bmRead);
         FillChar(P,SizeOf(P),#0); {terminate the null string}
         bs.Read(P, 50); {read 50 chars from memo into blobStream}
         bs.Free;
         hStr := StrPas(P);
         while Pos(#13, hStr) > 0 do {remove carriage returns and}
            hStr[Pos(#13, hStr)] := ' ';
         while Pos(#10, hStr) > 0 do {line feeds}
            S[Pos(#10, hStr)] := ' ';
         FillRect(Rect); {clear the cell}
         TextOut(Rect.Left, Rect.Top, hStr); {fill cell with memo data}
      end;
 end;
end;
carter6
初階會員


發表:53
回覆:108
積分:42
註冊:2002-12-16

發送簡訊給我
#12 引用回覆 回覆 發表時間:2003-04-15 16:37:04 IP:61.216.xxx.xxx 未訂閱
TBlobStream Table1Notes bmRead bs.Read(P, 50) 都會出錯 是不是之前就要設定什麼?? S[Pos(#10, hStr)] := ' '; 是不是 hStr[Pos(#10, hStr)] := ' '; 不好意思我資質太差 delphi 初學者
ddy
站務副站長


發表:262
回覆:2105
積分:1169
註冊:2002-07-13

發送簡訊給我
#13 引用回覆 回覆 發表時間:2003-04-15 17:40:17 IP:61.218.xxx.xxx 未訂閱
http://delphi.ktop.com.tw/topic.php?TOPIC_ID=28722 你所發問的另一問題已說明    TBlobStream --->改Tstream Table1Notes --->改Field  bmRead       bs.Read(P, 50) 都會出錯 是不是之前就要設定什麼?? S[Pos(#10, hStr)] := ' ';   S-->hStr 應是少打字 是不是 hStr[Pos(#10, hStr)] := ' ';      發表人 - ddy 於 2003/04/15 17:43:38
Mickey
版主


發表:77
回覆:1882
積分:1390
註冊:2002-12-11

發送簡訊給我
#14 引用回覆 回覆 發表時間:2003-04-15 20:41:26 IP:218.32.xxx.xxx 未訂閱
報告 ! 偶有疑問 : 為什麼需要透過 Blob -> null treminate string -> pascal string 去取得 ? 何不用 variant ( TField.Value ) -> pascal string ?
procedure TForm1.DBGrid1DrawDataCell(Sender: TObject; const Rect: TRect;
  Field: TField; State: TGridDrawState);
begin
  with TDBGrid(Sender).Canvas do
    if Field.DataType = ftMemo then begin
      FillRect(Rect);
      TextOut(Rect.Left, Rect.Top, VarToStr(Field.Value));
    end
    else
      TDBGrid(Sender).DefaultDrawDataCell(Rect, Field, State);
end;
carter6
初階會員


發表:53
回覆:108
積分:42
註冊:2002-12-16

發送簡訊給我
#15 引用回覆 回覆 發表時間:2003-04-16 09:47:33 IP:61.216.xxx.xxx 未訂閱
不好意思 但是還是出不來 不知道是不是 資料庫的問題 (我用 Access 2000) 但是 Grid 的格線出現一點一點的!! Delphi 初學者
carter6
初階會員


發表:53
回覆:108
積分:42
註冊:2002-12-16

發送簡訊給我
#16 引用回覆 回覆 發表時間:2003-04-16 11:34:18 IP:61.216.xxx.xxx 未訂閱
不好意思找出問題了 好像是我 procedure TForm1.DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect;DataCol: Integer; Column: TColumn; State: TGridDrawState); begin If Column.Field.Dataset.FieldbyName('Mark').AsBoolean then dbgrid1.canvas.brush.color := clRed; //focused // 呼叫內定的 DrawColumnCell dbgrid1.DefaultDrawColumnCell(rect,DataCol,Column,State); end; 的問題!! 我把 DBGrid1DrawColumnCell 拿掉就可以用了 但是我想讓它共存可以嗎? 拜託大家給個意見!! Delphi 初學者
carter6
初階會員


發表:53
回覆:108
積分:42
註冊:2002-12-16

發送簡訊給我
#17 引用回覆 回覆 發表時間:2003-04-16 12:50:48 IP:61.216.xxx.xxx 未訂閱
不好意思 我已經改好了 謝謝版主跟各位給的意見 Delphi 初學者
ddy
站務副站長


發表:262
回覆:2105
積分:1169
註冊:2002-07-13

發送簡訊給我
#18 引用回覆 回覆 發表時間:2003-04-16 14:07:28 IP:61.218.xxx.xxx 未訂閱
引言: 報告 ! 偶有疑問 : 為什麼需要透過 Blob -> null treminate string -> pascal string 去取得 ? 何不用 variant ( TField.Value ) -> pascal string ?
Mickey 出難題了< > 這部份哇嘛母栽~< > 不過我想應該是為了相容舊版本的寫法 據ccchen 版主所講VarToStr Delphi 6 之後才有
系統時間:2024-07-01 4:11:42
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!