2015-07-11 40 views
0

我被要求開發一個名爲「Flag Quiz」的遊戲,玩家必須猜測出現在屏幕中間的標誌的正確名稱。以形式加載很多圖片

enter image description here

當然,我有很多的圖片(221個標誌)的,我必須把它們放在裏面的程序,因爲,當按下按鈕Play時,程序必須選擇這些標誌的隨機10。

問題 我想使用一個ImageList但標誌是小480x311等德爾福問我的承受力在30點不同的位圖分開。我能做些什麼嗎?

我的想法,以避免這個問題,是以下(雖然我認爲它不是很好):創建221個TPicture組件(當然是不可見的),並加載其中每一個標誌的圖片。

我不想用我最後的想法。你知道有什麼改進嗎?

+0

爲了避免IDE將圖像分成不同的位圖,您需要相應地設置圖像列表的寬度和高度。但是我更喜歡將一個假設PNG作爲使用的圖像格式的'TObjectList '的集合。 – TLama

+0

是的,他們是PNG。我在幾分鐘前發現了谷歌,我正在讀一些關於這方面的內容。你能否提供一些提示? –

回答

8

這類問題根本不適合表單設計人員。您想要存儲221張圖像,並且在IDE中管理這些圖像將會非常糟糕。一旦你把它們全部放進去,你將無法看到它們,因爲它們將以.dfm文件的16進制編碼。在修訂版本控制下,它會變得一團糟,因爲您無法以可管理和可追蹤的方式更改個別圖像。

接受的方法是使用資源。如果是我,我會安排我的圖像具有可預測的名稱。例如,flag1,flag2等。我會生成一個列出所有標誌的資源腳本(.rc)。我將該資源腳本編譯爲鏈接到可執行文件的編譯資源(.res)。我會將資源腳本和圖像文件提交給修訂控制。

然後在運行時您將有一個單獨的TImage控件來顯示該標誌。每當你需要一個新的圖像時,你可以用TResourceStream加載它,然後將它推入TImage控件。

+0

要添加,如果所有這些圖像都嵌入到表單中,表單需要很長時間才能初始化,因爲流式處理DFM將不得不解析並轉換所有這些圖像,即使它只需要10/221其中。 –

+0

這實際上是個好主意,我會馬上實施它;感謝您的意見! –

1

的DevExpress擁有Componnect名爲cximagecolletion,你可以把你的圖片上,並保存和加載圖片來自/到文件

也可以保存所有標誌在小Access數據庫,當你需要使用tadodataset

加載它

毫無疑問,如果你把你的圖片直接在窗體上的DFM增長非常高,所以你遇到麻煩

+0

在一個小型的Access數據庫?並與您的應用程序一起重新分配MS Access? – TLama

0

我個人存儲每個文件作爲一個專門的子目錄中的圖像,使用該國一個文件名。然後,我會讀入程序入口處的子目錄文件名(因此我有一個可以隨意選擇的國家列表),並使用TImage.LoadFromFile顯示標誌。這比使用資源文件(恕我直言)要容易得多。