listview1縮圖加到listview2的問題 |
尚未結案
|
hungjeff
一般會員 發表:10 回覆:9 積分:3 註冊:2007-02-22 發送簡訊給我 |
|
careychen
尊榮會員 發表:41 回覆:580 積分:959 註冊:2004-03-03 發送簡訊給我 |
|
hungjeff
一般會員 發表:10 回覆:9 積分:3 註冊:2007-02-22 發送簡訊給我 |
|
careychen
尊榮會員 發表:41 回覆:580 積分:959 註冊:2004-03-03 發送簡訊給我 |
不過看起來應該還是你的 imagelist 內的圖片有指定錯誤,或是你的圖在從一個 Imagelist 到另一個時放錯了
你再確認看看不行的話,po 上來再幫你看一下 ===================引 用 hungjeff 文 章=================== 之前ok是因為是選擇一個shelltreeview的資料夾而已,我現在改了,如果我先托曳一些檔案在listview2,我再選擇別的資料夾檔案想托曳到listview2,所以修改了程式,但是就圖就開始變的怪怪的。
------
價值的展現,來自於你用哪一個角度來看待它!! |
hungjeff
一般會員 發表:10 回覆:9 積分:3 註冊:2007-02-22 發送簡訊給我 |
這是加入button的程式碼,請大大幫我看看,是哪邊出了問題,我一直改不出,感謝
procedure TForm1.Button2Click(Sender: TObject); var i:integer; ImageFileName:string; ThumbBmpLeft:integer; ThumbBmpTop:integer; ThumbBmpHeight:integer; ThumbBmpWidth:integer; begin ProgressBar1.Visible:=True; try for i :=ListView1.Items.Count - 1 downto 0 do begin if ListView1.Items[i].Selected then begin ImageFileList2.Add(ImageFileList.item(i)); ImageFileList2.SetIndex(ImageFileList2.GetFileCount-1); ImageFileName:=ImageFileList2.GetCurFullFileName; if IsJpgFile(ImageFileName) then JpgTobmp(ImageFileList2.GetCurFullFileName,ThumbJpg,OriginalBmp) else if IsGifFile(ImageFileName) then GifTobmp(ImageFileList2.GetCurFullFileName,ThumbGif,OriginalBmp) else if IsPngFile(ImageFileName) then PngTobmp(ImageFileList2.GetCurFullFileName,ThumbPng,OriginalBmp) else OriginalBmp.LoadFromFile(ImageFileList2.GetCurFullFileName); if OriginalBmp.Height>=OriginalBmp.Width then begin ThumbBmpWidth:=64*OriginalBmp.Width div OriginalBmp.Height; ThumbBmpLeft:=(64-ThumbBmpWidth ) div 2; ThumbBmp.Canvas.Brush.Color :=clBtnFace; ThumbBmp.Canvas.FillRect(ThumbBmp.Canvas.ClipRect); DrawPanel(ThumbBmp.Canvas,0,0,79,79,RaisedPanel); DrawPanel(ThumbBmp.Canvas,7 ThumbBmpLeft,7,ThumbBmpWidth 1,64,LoweredPanel); ThumbBmp.Canvas.StretchDraw(Rect(8 ThumbBmpLeft, 8 , 8 ThumbBmpLeft ThumbBmpWidth,71), OriginalBmp); end else begin ThumbBmpHeight := 64 * OriginalBmp.Height div OriginalBmp.Width; ThumbBmpTop := (64 - ThumbBmpHeight) div 2; ThumbBmp.Canvas.Brush.Color :=clBtnFace; ThumbBmp.Canvas.FillRect(ThumbBmp.Canvas.ClipRect); DrawPanel(ThumbBmp.Canvas, 0 , 0 , 79 , 79 , RaisedPanel); DrawPanel(ThumbBmp.Canvas, 7 ,7 ThumbBmpTop, 64,ThumbBmpHeight 1, LoweredPanel); ThumbBmp.Canvas.StretchDraw(Rect(8 , 8 ThumbBmpTop, 71,8 ThumbBmpTop ThumbBmpHeight) ,OriginalBmp); end; ImageList2.Add(ThumbBmp,nil); //Imagelist2.Add(ThumbBmp,nil); with ListView2.Items.Add do begin ImageIndex := Imagelist2.Count-1; Caption := ImageFileList2.GetCurFileName; end; ProgressBar1.Position := i; end; end; Application.ProcessMessages; finally ListView1.Items.EndUpdate; ProgressBar1.Visible := False; end; end; |
careychen
尊榮會員 發表:41 回覆:580 積分:959 註冊:2004-03-03 發送簡訊給我 |
hi,不好意思,到今天才看到您的回文,抱歉現在才回您
我在 Google 找到了下面這篇跟您的程式碼一樣的文章 用Delphi實現縮略圖查看- 早雪網 用他的程式看了您的程式碼,發現你其實不必使用 ImageFileList2 , 而且你 Copy 的程式碼是從 RefreshImage 這個函數出來的,但似乎也沒有 Copy 的很完整,我把改好的程式放在下面,你看一下和你原本的差在哪邊,你就 知道為什麼你的圖片有顯示問題了!! [code delphi] procedure TForm1.Button2Click(Sender: TObject); var i:integer; iProcCount: Integer; // 新增 ImageFileName:string; ImageFullFileName:string; // 新增 ThumbBmpLeft:integer; ThumbBmpTop:integer; ThumbBmpHeight:integer; ThumbBmpWidth:integer; begin ProgressBar1.Max:=ListView1.SelCount; // 您少 Copy 了這行!! ProgressBar1.Position := 0; // 您少 Copy 了這行!! iProcCount := 0; // 新增 ProgressBar1.Visible:=True; ListView2.Items.BeginUpdate; // 您少 Copy 了這行!! try for i :=ListView1.Items.Count - 1 downto 0 do begin if ListView1.Items[i].Selected then begin ImageFileList.SetIndex(I); ImageFullFileName:=ImageFileList.GetCurFullFileName; // 新增 ImageFileName := ImageFileList.GetCurFileName; // 注意以下的 if .. else 都改成了 ImageFullFileName if IsJpgFile(ImageFullFileName) then JpgTobmp(ImageFullFileName,ThumbJpg,OriginalBmp) else if IsGifFile(ImageFileName) then GifTobmp(ImageFileList2.GetCurFullFileName,ThumbGif,OriginalBmp) else if IsPngFile(ImageFileName) then PngTobmp(ImageFileList2.GetCurFullFileName,ThumbPng,OriginalBmp) else OriginalBmp.LoadFromFile(ImageFullFileName); if OriginalBmp.Height>=OriginalBmp.Width then begin ThumbBmpWidth:=64*OriginalBmp.Width div OriginalBmp.Height; ThumbBmpLeft:=(64-ThumbBmpWidth ) div 2; ThumbBmp.Canvas.Brush.Color :=clBtnFace; ThumbBmp.Canvas.FillRect(ThumbBmp.Canvas.ClipRect); DrawPanel(ThumbBmp.Canvas,0,0,79,79,RaisedPanel); DrawPanel(ThumbBmp.Canvas,7 ThumbBmpLeft,7,ThumbBmpWidth 1,64,LoweredPanel); ThumbBmp.Canvas.StretchDraw(Rect(8 ThumbBmpLeft, 8 , 8 ThumbBmpLeft ThumbBmpWidth,71), OriginalBmp); end else begin ThumbBmpHeight := 64 * OriginalBmp.Height div OriginalBmp.Width; ThumbBmpTop := (64 - ThumbBmpHeight) div 2; ThumbBmp.Canvas.Brush.Color :=clBtnFace; ThumbBmp.Canvas.FillRect(ThumbBmp.Canvas.ClipRect); DrawPanel(ThumbBmp.Canvas, 0 , 0 , 79 , 79 , RaisedPanel); DrawPanel(ThumbBmp.Canvas, 7 ,7 ThumbBmpTop, 64,ThumbBmpHeight 1, LoweredPanel); ThumbBmp.Canvas.StretchDraw(Rect(8 , 8 ThumbBmpTop, 71,8 ThumbBmpTop ThumbBmpHeight) ,OriginalBmp); end; ImageList2.Add(ThumbBmp,nil); with ListView2.Items.Add do begin ImageIndex := Imagelist2.Count-1; Caption := ImageFileName; end; inc(iProcCount); // 已處理的筆理 ( 新增 ) ProgressBar1.Position := iProcCount; // 修改 end; end; Application.ProcessMessages; finally ListView2.Items.EndUpdate; ProgressBar1.Visible := False; end; end; [/code]
------
價值的展現,來自於你用哪一個角度來看待它!!
編輯記錄
careychen 重新編輯於 2008-10-12 23:36:20, 註解 無‧
|
hungjeff
一般會員 發表:10 回覆:9 積分:3 註冊:2007-02-22 發送簡訊給我 |
|
careychen
尊榮會員 發表:41 回覆:580 積分:959 註冊:2004-03-03 發送簡訊給我 |
=_= 奇怪,你的 po 文我都不知道~~~ 難道我的 Gmail 有自動拒絕你的 po 文功能?? (開玩笑的)
那你的不能執行是有什麼錯誤訊息嗎? 可以麻煩你告知我嗎? 我還有將我的程式留著,我回家後我把程式傳給你,你看一下是哪邊的程式造成問題的 不過,我沒加備註的部份你也是要改進去哦,簡單說是整個 Function 都要改一下!! ===================引 用 hungjeff 文 章=================== 大大你好,我已經看了你po的程式碼,我把你有備註的部分加了進去,又稍為看了一下,你沒加備註的程式碼跟我原來的不符,執行了你修改的程式碼,不能執行。
------
價值的展現,來自於你用哪一個角度來看待它!! |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |