晚上好。FM2對象重新打印問題
我目前正在爲Firemonkey FM2
(delphi)中的Twitter和Facebook設計一個社交網絡客戶端,我正在經歷一個令人沮喪的問題。目前,我只有Twitter代碼正在處理中,但問題與[重新]繪製可視對象有關。
我創建一個自定義風格的TListboxItem
佈局的範本:由多個子組件,如TText
,TButton
和TImage
的。我已經處理了連接到Twitter和檢索提要的詳細信息。檢索到的每個項目都被添加到TListbox
,並使用我自定義的ListboxItem樣式佈局進行樣式設置。
現在,問題與更新列表中不可見項目的信息有關。例如,沒有滾動的列表中可見的項目正確顯示其信息。那些不可見的除了列表中的最後一項沒有設置/可見它們的一些細節。當我向下滾動列表,然後再進行備份時,通常會有一個最初可見的項目會丟失它的信息。
爲了解釋這一點,我有一個TImage (被稱爲照片)這是用來顯示發佈'推文'的人的照片。我有用於顯示推文本身的內容/文本的標準文本文件(稱爲文本)。我有兩個按鈕(稱爲Like和Share)用於執行各自的功能。然後,我終於得到了另一個TText (稱爲NameDate)用於顯示推文的名稱和推文發佈的日期。
我使用此代碼來創建對象並修改它顯示的數據;
for i := 0 to TwitObj.Statuses.Count-1 do
begin
FeedItem := TListBoxItem.Create(LBFeed);
FeedItem.Parent := LBFeed;
FeedItem.StyleLookup := 'FeedItem';
FeedItem.WordWrap := True;
FeedItem.StyledSettings := [TStyledSetting.ssFamily, TStyledSetting.ssSize, TStyledSetting.ssStyle, TStyledSetting.ssFontColor, TStyledSetting.ssOther];
NameDate := Feeditem.FindStyleResource('txtnamedate') as TText;
Photo := FeedItem.FindStyleResource('photo') as TImage;
Like := FeedItem.FindStyleResource('btnlike') as TButton;
Share := FeedItem.FindStyleResource('btnshare') as TButton;
Share.Text := 'Retweet';
Like.Text := 'Favorite';
NameDate.Text := Twitobj.Statuses.Items[i].User.Name +
'(@'+TwitObj.Statuses.Items[i].User.ScreenName+
') - '+DateTimeToStr(TwitObj.Statuses.Items[i].CreatedAt);
FeedItem.Text := TwitObj.Statuses.Items[i].Text;
begin
if DirectoryExists('imagecache\') = false then CreateDir('imagecache\');
if FileExists('imagecache\'+TwitObj.Statuses.Items[i].User.ScreenName+'.jpg') = False then
begin
try
rcv := TMemoryStream.Create;
GtPhoto.URL := TwitObj.Statuses.Items[i].User.ImageURL;
GtPhoto.RcvdStream := rcv;
GtPhoto.Get;
rcv.SaveToFile('imagecache\'+TwitObj.Statuses.Items[i].User.ScreenName+'.jpg');
finally
Rcv.Free;
end;
end;
end;
Photo.Bitmap.LoadFromFile('imagecache\'+TwitObj.Statuses.Items[i].User.ScreenName+'.jpg');
GTPhoto
是一個標準的ICS HTTP客戶端組件,而TwitObj是我的Twitter的組成部分。你可以看到我將照片保存到一個目錄而不是流式傳輸。這只是爲了檢查它是否是流的問題,但最好還是使用某種類型的緩存。
圖像正確下載,並且自定義ListBoxItem佈局中相關StyleResources的信息按預期進行更新,但僅適用於不滾動時可見的項目。如果向下滾動列表,則只有每個項目的Text
是正確的,而在運行時設置的其他資源已返回到它們在樣式冊中設計的方式(即空白文本,圖像等)。
我在這裏錯過了什麼嗎?據我瞭解,爲了表現,XE3的Bitmaps設計意圖發生了變化,但是Embarcadero肯定不會忽略這樣的事情。當然,我們不希望我們在運行時在父項內創建每個項目(並因此處理對齊等)而不是使用樣式表資源,是嗎?
任何幫助或見解將不勝感激。