2009-12-04 89 views
1

如何讓我的程序加載圖像並使其成爲窗體的背景? 我需要它的確切代碼。我瀏覽過所有的互聯網,我發現的唯一的東西是各種調整和修復,使背景在特殊情況下按預期工作。我也嘗試了一些德爾福的書,我找不到它。在Delphi中設置窗體的背景圖像

+0

DUP問題http://stackoverflow.com/questions/525970/how-to-add -background-images-to-delphi-forms – BlackTigerX

+0

不,老虎,它不是重複的。看看另外一個問題,你會發現提問者*已經有*背景圖像,並且真正在問如何解決一些美容問題,這就是該問題的答案。 –

回答

4
  1. TImage放在您的表單上。確保它是後面窗體上的所有其他控件。您可以右鍵單擊它並選擇「發回」菜單選項。

  2. 加載圖形。

    var 
        img: TBitmap; 
    begin 
        img := TBitmap.Create; 
        try 
        img.LoadFromFile('S:\background.bmp'); 
    
  3. 將其指定給圖像控件。

    Image1.Picture := img; 
    
  4. 清理。

    finally 
        img.Free; 
        end; 
    end; 
    

您也可以結合過去的三個步驟來加載圖形,並把它的圖像控制的一次。感謝Jon的建議。

Image1.Picture.LoadFromFile('B:\background.bmp'); 

參見:How to add background images to Delphi forms

+0

我很想解釋一下這個答案沒有用的反饋。我是否可以改正事實錯誤,還是從根本上來說是一個不可行的解決方案? –

+1

爲什麼不直接通過TImage控件加載圖像?這樣你就可以使用任何加載到TPicture的圖像格式(jpg,gif等)。 –

+0

因爲我不記得圖片屬性是否爲零,我不記得是否TPicture知道如何自己加載圖像。顯然,這也不是問題。感謝您的想法。 –

0

我會做的是使用表格OnPaint事件,讓畫布(Form1.Canvas),然後用Draw方法(這需要的圖像)繪製你想要的圖像。像下面這樣:

procedure TForm1.FormPaint(Sender: TObject);
var
mypic: TBitMap;
begin
mypic := TBitMap.Create;
try
mypic.LoadFromFile('cant.bmp');
Form1.Canvas.Draw(0, 0, mypic);
finally
FreeAndNil(mypic);
end;
end;

請注意,這可能是極其緩慢。

+1

您提到它是一個筆記,但在繪畫事件中加載文件確實不是一個好主意。另外,你應該調用繼承的'Paint'實現。 – jpfollenius

+0

是真的。最好是在oncreate或onshow上加載圖像,然後將其保存以供重新使用,以便在重新繪製時不總是重新加載。此外,應用程序的頻繁更新也會降低速度。 –

0

這是我所有的應用程序顯示錶單圖像的方式。我加載圖像在表單創建或當應用程序調用一個具體證明事件

var 
    vDest, vRect: TRect; 
    begin 
    vRect := Rect(0, 0, FBackgroundImage.Width, FBackgroundImage.Height); 
    vDest := Rect(0,0,Self.Width, Self.Height); 
    Canvas.StretchDraw(vDest, FBackgroundImage); 


    if FileExists(this) then 
    FBackgroundImage.LoadFromFile(this); 
0

@Brendan

thanks 
//from Brendan code; 

var 
vDest, vRect: TRect; 
FBackgroundImage: TGraphic; 
begin 
FBackgroundImage := image1.Picture.Graphic; //LOAD from invisible image 
vRect := Rect(0, 0, FBackgroundImage.Width, FBackgroundImage.Height); 
vDest := Rect(0,0,Self.Width, Self.Height); 
Canvas.StretchDraw(vDest, FBackgroundImage); 
end;