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

請教一個TImage的呼叫程式問題

尚未結案
chateau_frank
一般會員


發表:20
回覆:32
積分:10
註冊:2005-07-07

發送簡訊給我
#1 引用回覆 回覆 發表時間:2005-07-29 17:41:41 IP:211.20.xxx.xxx 未訂閱
各位大大晚安 我的程式如下:
procedure TForm1.DBGrid1CellClick(Column: TColumn);
  var showpic1:string;
  DBEdit1.Text := 'ImageName';
  DBEdit2.Text := 'ImageSize';
If AnsiEndsText('jpg',ShowPic1) then
  begin
  Image1.Picture.LoadFromFile(showpic1);
  end;
我的問題是在DBGrid1中,如用滑鼠去點每一列的欄位,Image1的圖片就會自動更換,但如用鍵盤的上下鍵,圖片就不動如山,但其他的DBEdit欄位卻可以隨著鍵盤而更新資料,請大大們教導如何解此疑問,感謝。
chateau_frank
一般會員


發表:20
回覆:32
積分:10
註冊:2005-07-07

發送簡訊給我
#2 引用回覆 回覆 發表時間:2005-07-29 17:45:45 IP:211.20.xxx.xxx 未訂閱
抱歉 上面程式中的 DBEdit1.Text 與 DBEdit2.Text 中的Text 為DataField之打字筆誤。
h@visli
資深會員


發表:103
回覆:429
積分:431
註冊:2004-02-13

發送簡訊給我
#3 引用回覆 回覆 發表時間:2005-07-29 19:17:43 IP:222.248.xxx.xxx 未訂閱
您的這段程式我不知道是不是不完整?因為沒有找到變量ShowPic1的賦值語句,所以不請楚你的ShowPic1所指示的圖片來源好何處。    是不是您的ShowPic1指定為固定文件? 如:
procedure TForm1.DBGrid1CellClick(Column: TColumn);
var 
  showpic1:string;
begin
  DBEdit1.DataField := 'ImageName';
  DBEdit2.DataField := 'ImageSize';
  ShowPic1 := 'C:\Pic1.jpg';
  If AnsiEndsText('jpg',ShowPic1) then
  begin
    Image1.Picture.LoadFromFile(showpic1);
  end;
end;
如果您的ShowPic1指定來源為數據表中,如:
  ShowPic := DBEdit1.Text;
則您檢查DBEdit1.Text所指示的文件是否存在。
---------------------------- 於Delphi K.Top之上 博采眾家之長, 奉獻綿薄之力 ---------------------------
------
------------------------
博采眾家之長,奉獻綿薄之力
------------------------
chateau_frank
一般會員


發表:20
回覆:32
積分:10
註冊:2005-07-07

發送簡訊給我
#4 引用回覆 回覆 發表時間:2005-07-29 19:29:29 IP:218.161.xxx.xxx 未訂閱
謝謝大大指導 我這段程式碼因為沒有用copy來貼的,是用打的,因此漏打了,正確的打法確實如大大所擔心的,我在程序之前已有指定路徑,且已有圖片,兩邊都是對稱的,沒有遺漏或打錯路徑,就以大大所指導的程式來做例子,我的問題還是存在的,因為用鍵盤上下鍵所指的資料圖片不會變動,但用滑鼠去按卻會隨著資料不同而變化圖片:
procedure TForm1.DBGrid1CellClick(Column: TColumn);
var 
  showpic1:string;
begin
  DBEdit1.DataField := 'ImageName';
  DBEdit2.DataField := 'ImageSize';
  ShowPic1 := 'C:\Pic1.jpg';
  If AnsiEndsText('jpg',ShowPic1) then
  begin
    Image1.Picture.LoadFromFile(showpic1);
  end;
end;
cwc65536
初階會員


發表:47
回覆:121
積分:48
註冊:2004-10-14

發送簡訊給我
#5 引用回覆 回覆 發表時間:2005-07-29 20:35:38 IP:203.203.xxx.xxx 未訂閱
你把顯示的程式寫在 DBGrid1CellClick , 用鍵盤當然不會觸發 ! 你質疑的 'DBEdit欄位卻可以隨著鍵盤而更新資料' 那是 Data award 元件, 自動連結的. 建議 去找鍵盤觸發點, 或 data award 元件的移動觸發點
wameng
版主


發表:31
回覆:1336
積分:1188
註冊:2004-09-16

發送簡訊給我
#6 引用回覆 回覆 發表時間:2005-07-29 21:43:47 IP:61.31.xxx.xxx 未訂閱
看不懂你為何搞得如此複雜。 直接在 DBEdit1 的 OnChange 事件中 If AnsiEndsText('jpg',ShowPic1) then begin Image1.Picture.LoadFromFile(showpic1); end; ~~~~~~~~~~~ 難得聰明,常常糊塗。 ~~~~~~~~~~~
h@visli
資深會員


發表:103
回覆:429
積分:431
註冊:2004-02-13

發送簡訊給我
#7 引用回覆 回覆 發表時間:2005-07-29 21:59:59 IP:222.248.xxx.xxx 未訂閱
原因是這樣的:    您用的是DBGrid組件的OnCellClick事件來進行處理,而這個事件是針對鼠標動作的事件,也就是說對於鍵盤操作,並不會觸發該事件,所以當您使用鼠標點擊時,該事件中的代碼才會執行,並可以看到圖片的載入變化,而當您使用鍵盤時,該事件中的代碼沒有執行,Image1也就不會載入圖片了。    基於這個原因,所以建議您改用TTable或TQuery等數據集組件的AfterScroll事件來處理:
uses jpeg, StrUtils;    procedure TForm1.Table1AfterScroll(DataSet: TDataSet);
var
  showpic1:string;
begin
  ShowPic1 := DBEdit1.Text;
  If AnsiEndsText('jpg',ShowPic1) then
  begin
    Image1.Picture.LoadFromFile(showpic1);
  end;
end;
---------------------------- 於Delphi K.Top之上 博采眾家之長, 奉獻綿薄之力 --------------------------- 發表人 - h@visli 於 2005/07/29 22:05:06
------
------------------------
博采眾家之長,奉獻綿薄之力
------------------------
h@visli
資深會員


發表:103
回覆:429
積分:431
註冊:2004-02-13

發送簡訊給我
#8 引用回覆 回覆 發表時間:2005-07-29 22:02:19 IP:222.248.xxx.xxx 未訂閱
對不起,點錯了按鈕,多發了這條回復。 發表人 - h@visli 於 2005/07/29 22:04:20
------
------------------------
博采眾家之長,奉獻綿薄之力
------------------------
chateau_frank
一般會員


發表:20
回覆:32
積分:10
註冊:2005-07-07

發送簡訊給我
#9 引用回覆 回覆 發表時間:2005-08-01 17:41:36 IP:211.20.xxx.xxx 未訂閱
感謝各位的大力幫忙 由於wameng老大的方法最快也最簡單,我不用去改變元件就可以解決,因此小弟以老大的方法來解決了問題。 對於h@visli與cwc65536的提供方法,小弟銘記在心,很感激,謝謝您的幫忙。 非常謝謝
系統時間:2024-04-26 3:58:31
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!