2016-01-30 35 views
0

我有5個元素那些在運行時像這些改變運行時創建的元素風格

NewButton := TImageViewer.Create(Self); 
    with NewButton do 
    begin 
     Parent := Self; 
     Bitmap.LoadFromStream(InStream); 
     Height := 80; 
     Width := 80; 
     tag:=leftx; 
     Position.X := leftx; 
     Position.Y := 5; 
     OnClick := WaitingButtonsClick; 
     Enabled := True; 
     Visible := True; 
     Name := 'but' + IntToStr(leftx); 
    end; 
leftx := leftx+85; 

所以創建的元素都有自己的名稱和標記

現在用戶點擊圖片後,我必須改變加載圖像

所以我點擊

procedure TForm1.WaitingButtonsClick(Sender: TObject); 
begin 
// ShowMessage((Sender as TAction).ActionComponent.Name); 
    ShowMessage(TImageViewer(Sender).Name); 
// id := TButton(Sender).tag; 
// showmessage('slm'+id.ToString); 
end; 

ok.af後把名字元素ter獲取元素的名稱如何更改目標文件或樣式!?

+0

我很困惑,爲什麼你要將'TImageViewer'類轉換成'TButton'? – quasoft

+1

Delphi XE沒有名爲'TImageViewer'的類。這是一個FMX課程。你實際使用的是什麼版本的Delphi? –

+0

@quasoft對不起,我的錯誤..現在更新! –

回答

2

看來您正在將TImageViewer類型的對象投射到TButton

改變你的點擊處理這樣的:

procedure TForm1.WaitingButtonsClick(Sender: TObject); 
var 
    viewer: TImageViewer; 
begin 
    viewer := Sender as TImageViewer; 

    // Change file or style of viewer 
    //viewer.Bitmap.LoadFromFile(....); 

    ... 
end; 

作爲一項規則,總是投對象與as操作:

viewer := Sender as TImageViewer - RIGHT

VS

viewer := TImageViewer(Sender) - 錯誤

好處是,as操作員會爲您執行安全檢查,並在您嘗試轉換爲不兼容的類型時向您發出警告。

只有當變量是普通指針(不是對象)時才能使用第二個變體,而且這很少需要。


還建議不要使用窗體上的位置使組件名稱唯一。

它更好地想出另一個組件名稱創建方案。

例如,您可以在窗體中定義一個計數器並將該計數器添加到組件的名稱中。