2010-09-20 40 views
1

我有一個Object Inspector,就像Delphi的一樣,我在運行時顯示允許用戶更改顯示在我的應用程序中的組件的屬性。需要得到TImage的幫助(用於存儲圖像文件的路徑)

我想創建一個派生自TImage的組件,其中有一個額外的屬性,我可以存儲圖像加載的路徑。要做到這一點,我相信我也可以繼承的TImage,有一個事件通過使用類似選擇圖像...

var OpenPictureDialog: TPictureEditorDlg; 
    if OpenPictureDialog1.Execute then 
     OpenPictureDialog1.FileName <-- contains what I want 

但是,如果我包裹在一個進程/ FN,有什麼特徵,以及如何當用戶單擊Object Inspector中Picture屬性旁邊的省略號時,是否會調用它?


或者,也許我的問題理應是是否有一個現有的第三方組件,它已經這樣做了......一個免費的組件


50點獎金,可以在商業使用應用程序(我會增加賞金一個非常好的組件)


如果誰能給一個部件的URL,這是否然後我會開始另一賞金,100這款T ime,並獎勵給他們

+4

Mawg,你誤識別問題:這個問題是不是與TImage中(或後代),問題與您的TMS對象檢查。如果這是Delphi的Object Inspector,那麼解決方案就是註冊一個Property Editor,這是一個衆所周知的解決方案,並且易於實現。使用TMS對象檢查器,你需要問TMS人員如何做類似的事情(或者更可能的是,破解你的源代碼 - 你有對象檢查器的源代碼,對嗎?)。 – 2010-09-29 11:44:10

回答

1

TImage不知道加載圖片的文件名。因爲它只接收圖像內容,而不是文件名。所以爲了獲得這些信息,你必須用你自己的默認打開的圖片選擇對話框,並在其中傳遞文件名和圖片內容。然後你的自定義TImage可以存儲這些信息。

+0

+1感謝您的幫助。請接受我的歉意,以便延遲答覆您的答案。 – Mawg 2011-01-14 02:44:10

4

這取決於你的對象檢查器如何工作。如果我們知道你從哪裏得到它,這將有所幫助。

它工作在Delphi的Object Inspector中的方式是,BPL包可以用IDE財產設計師登記,所以當它看到某種類型,如自定義的TImage,它打開一個設計師,而不是不管它會常開。看看你的Object Inspector是否支持這個功能,或者如果沒有,你是否可以添加功能。

+1

+1感謝您的快速回復。對象檢查器是TMS scripter studio pro的TMS組件。我已經添加了其他屬性,但只需編寫讀/寫例程。這一個更棘手。 – Mawg 2010-09-20 02:58:54

0

MiTeC's ImageEx是一個擴展Delphi的TImage的小型簡單免費組件。它沒有「路徑」屬性,但它具有可用作路徑屬性的「about」屬性,或者作爲模板添加自己的路徑屬性。

對於更全面和不太貴的東西,您可以試試the Envision Image library by Interval Software,它與Delphi的TImage集成在一起。它的成本爲69美元。

+0

ImageEx聽起來不錯,但沒有任何文檔或示例如何使用它 – Mawg 2010-10-02 03:41:43

+1

它很小很簡單,應該很容易修改,以便您可以添加路徑屬性。這樣做會給你你想要的 - 一個具有路徑屬性的TImage。學習如何擴展組件在Delphi中是很有用的知識和做法,儘管我不得不承認我自己並沒有做太多的工作。 – lkessler 2010-10-02 18:19:47

+0

+1我同意,並且我認爲自己足夠了解擴展組件,添加屬性編輯器等等。讓我感到滿意的是,當有人無法制作*任何*文檔時,無論是在線還是在自述文件中,並且在他們的代碼中沒有單獨的評論,我通常有一個不好的經驗。 – Mawg 2010-10-03 01:05:15

0

如果我理解正確,您想要加載圖像,然後獲取圖像文件的路徑。 這應該工作:

procedure TForm1.Button1Click(Sender: TObject); 
var Imagefilepath:String; //Declare Imagefilepath:String; 
begin 
//Get name of file path 
if opendialog1.Execute then Imagefilepath:=opendialog1.FileName; 

//Load the picture 
image1.Picture.LoadFromFile(Imagefilepath); 

//show the name 
showmessage(Imagefilepath); 
end; 

And make sure you have written in uses "JPEG" so that it loads JPEG images 

易peasy