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

秀圖的問題(跟著Record秀)

缺席
cobraliu
中階會員


發表:15
回覆:75
積分:83
註冊:2007-11-22

發送簡訊給我
#1 引用回覆 回覆 發表時間:2008-02-14 17:22:13 IP:59.127.xxx.xxx 訂閱
請問各位大大
自已要做一個轉圖的功能
因我想要在Master/Detail中的Detail可以去勾選我要轉的圖檔(資料庫沒有存圖檔)
如:
Detail(有記錄著圖檔的位置)
----------------------------------------
1.jpg 秀圖出來
2.jpg 秀圖出來
3.jpg 秀圖出來
而找了不少文章,都沒有看到類似的功能
想問問各位大大,如果我的秀圖是跟著Record跑
意指有一筆Record會有一個圖檔Show在旁邊
有什麼方向可以做到呢或元件(找過TMS也沒有看到..orz)
附件是設計的樣式(麻煩版主刪除,因為更新的檔案上傳不了..而那個樣式造成誤解)
這一篇附上測試的程式

我附上正在測試的程式
在左邊是用Loop去Show圖
右邊是目前正在改寫的方式(但覺得這種方式不好,應該有更佳的方式)
必竟這種方式目前要計算目前的位置再Show圖
------
初學、初學、學了很久...還是在初學階段..Orz
pceyes
尊榮會員


發表:70
回覆:657
積分:1140
註冊:2003-03-13

發送簡訊給我
#2 引用回覆 回覆 發表時間:2008-02-14 22:24:46 IP:220.141.xxx.xxx 訂閱
用dbimage
每次將其變成縮圖後存入dbimage
存在第二個detail,欄位只要兩個
keyfield, dbimagefield
然後就能用dbctrlGrid來秀圖了
dbimage有64k限制。
------
努力會更接近成功
cobraliu
中階會員


發表:15
回覆:75
積分:83
註冊:2007-11-22

發送簡訊給我
#3 引用回覆 回覆 發表時間:2008-02-15 00:38:03 IP:220.143.xxx.xxx 訂閱
大大提供的方法,我也想過,但想說如果有更好的方法就無需存入Database那應該比較不會有Database的空間的問題。
主要是我想要Database單純是存資料。

附上我用另一個方法做的程式碼,但我想這不是很好的方式。

謝謝大大提供的意見

[code delphi]
var
Form1: TForm1;
notrun:BOOLEAN;

implementation
{$R *.dfm}
PROCEDURE PShowSmallPic;
VAR
{
wm:取餘數後的值
wrecordcount:畫面的總筆數(非資料)
wtempkey:記錄Key
}
wm,wpoint,wrecordcount,wi,wj:Integer;
wtempkey:STRING;
BEGIN
IF notrun THEN
with form1 do
begin
//因Trigger置於DataSource1DataChange為避免一直觸發
notrun := FALSE;

//清除所有image
for wj:= 0 to componentcount -1 do
if (Components[wj] is Timage) then
BEGIN
Timage(components[wj]).Picture.Graphic := nil;
Timage(components[wj]).Hint := '';
End;
//定義一次所Show的圖與DbctrlGrid的數量
wrecordcount := DBCtrlGrid1.PanelCount;
//記錄目前所在的位置
wpoint := adoquery1.RecNo;
//記錄Key以便在跑完Loop時回所選的Record
wtempkey := adoquery1.FieldByName('PicName').AsString;
//餘數定義於所在的位置之後Loop往上往下的Show圖
wm := wpoint Mod wrecordcount;

//往上第一筆開始Show圖
wi := 1;
while (wi < wm) And (adoquery1.RecordCount <> wpoint) do
begin
ADOQuery1.Prior;
for wj:= 0 to componentcount -1 do
if (Components[wj] is Timage) AND (Components[wj].name = 'SmallPic' Inttostr(wm-wi)) then
BEGIN
Timage(components[wj]).Picture.LoadFromFile(GetCurrentDir '\Small\' adoquery1.FieldByName('PicName').AsString);
Timage(components[wj]).Hint := adoquery1.FieldByName('PicName').AsString;
END;
wi := wi 1;
end;
//找尋所選的Record位置
adoquery1.Locate('PicName',wtempkey,[locaseinsensitive,loCaseInsensitive]);

//往下第一筆開始Show圖
//因Image編號由1開始編所以當為0時要轉為1
IF wm=0 Then
wi:=1
Else
wi := wm;

while wi <= wrecordcount do
begin
for wj:= 0 to componentcount -1 do
if (Components[wj] is Timage)
AND (Components[wj].name = 'SmallPic' Inttostr(wi))
and NOT adoquery1.Eof THEN
BEGIN
Timage(components[wj]).Picture.LoadFromFile(GetCurrentDir '\Small\' adoquery1.FieldByName('PicName').AsString);
Timage(components[wj]).Hint := adoquery1.FieldByName('PicName').AsString;
END;

IF NOT adoquery1.Eof THEN
ADOQuery1.Next
Else
Break;

wi := wi 1;
end;

adoquery1.Locate('PicName',wtempkey,[locaseinsensitive,loCaseInsensitive]);
notrun := TRUE;
end;
END;

procedure TForm1.Button2Click(Sender: TObject);
begin
notrun:=TRUE;
PShowSmallPic;
end;

[/code]

===================引 用 pceyes 文 章===================
用dbimage
每次將其變成縮圖後存入dbimage
存在第二個detail,欄位只要兩個
keyfield, dbimagefield
然後就能用dbctrlGrid來秀圖了
dbimage有64k限制。
------
初學、初學、學了很久...還是在初學階段..Orz
kevin2004
資深會員


發表:18
回覆:463
積分:416
註冊:2005-05-29

發送簡訊給我
#4 引用回覆 回覆 發表時間:2008-02-18 19:19:45 IP:61.219.xxx.xxx 訂閱
我有寫過類似的功能,圖檔﹝或其他類似的Blob﹞沒有存在DB中,而且有些應用有作壓縮或加解密保護,有時須要移到此人記錄時就要顯示硬碟上相關檔﹝如此人照片﹞。
不曉得你的問題是出在那裏。
------
Kevin
編輯記錄
kevin2004 重新編輯於 2008-02-18 19:21:07, 註解 無‧
cobraliu
中階會員


發表:15
回覆:75
積分:83
註冊:2007-11-22

發送簡訊給我
#5 引用回覆 回覆 發表時間:2008-02-19 00:36:49 IP:220.143.xxx.xxx 訂閱
大大原先的用意在於用文字表示
設計時期畫面,企圖利用DBCtrlGrid(包覆這兩個項目)
----------------------------------------------------
勾選項目 Image(一)
----------------------------------------------------
執行時期(這是一開始Run的時候)
企圖達到這個效果
----------------------------------------------
□檔案1 Image(秀圖檔案1)
□檔案2 Image(秀圖檔案2)
□檔案3 Image(秀圖檔案3)
□檔案4 Image(秀圖檔案4)
□檔案5 Image(秀圖檔案5)
□檔案6 Image(秀圖檔案6)
-------------------------------------------------
承上(若我往下意指用Mouse的滾輪時)
-------------------------------------------------
□檔案5 Image(秀圖檔案5)
□檔案7 Image(秀圖檔案6)
□檔案8 Image(秀圖檔案7)
□檔案9 Image(秀圖檔案8)
□檔案10 Image(秀圖檔案9)
□檔案11 Image(秀圖檔案10)
--------------------------------------------------
也就是在DBCtrlGrid中,只放置一個DBcheckbox,Image
但跟隨著DBCtrlGrid的項目變動(Record)變動時,秀圖
也跟著變。
而目前上述的程式碼(未精修..Orz)是做這一部份,
但我放置了5個image來做這個功能判定(想用一個就好...XD)
上述是去記錄目前的位置再Show其他的圖

===================引 用 kevin2004 文 章===================
我有寫過類似的功能,圖檔﹝或其他類似的Blob﹞沒有存在DB中,而且有些應用有作壓縮或加解密保護,有時須要移到此人記錄時就要顯示硬碟上相關檔﹝如此人照片﹞。
不曉得你的問題是出在那裏。
------
初學、初學、學了很久...還是在初學階段..Orz
系統時間:2024-04-27 3:51:18
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!