2016-02-08 69 views
-3

因此,我與我的一個人聊天,並覺得將所有當前被阻止的人發送的聊天內容散列出來是個不錯的主意,有點像TwitchTV聊天工作如果人被阻止它會刪除所有人聊天,並取代***Richedit並刪除人物內容中的所有文字

現在它是遲到了,當我們正在服用,所以我的大腦不工作得如此之好在早上5點:但現在我想起更如何做到這一點,我想這必須是字符串列表與目前進入聊天然後搜索人員名稱,然後刪除所有文字後的人的名字

聊天格式等等

西蒙:** **** *******

:我的測試消息

所以被靜音聊天出落得會是什麼樣子

西蒙後

任何一個曾經在所有的接縫非常複雜的做到了這一點

感謝

+0

如果您已經在TSTringList中有傳入流,爲什麼不開始構建您的代碼。然後,如果它不起作用,請使用代碼**在此處尋求幫助。這就是SO的工作原理。現在我們有** no **想法你在說什麼,什麼聊天,你已經有什麼代碼等。 –

+0

問題是什麼?這是你的程序。把你喜歡的任何東西放在編輯控件中。 –

回答

2

如果我正確地理解你想要做的事情,那實際上應該是直截了當的;

暫時忘掉TRichEdit,因爲這個問題的解決方案是關於數據結構的,RichEdit僅僅是一種在GUI中展現你想要的東西的方法。

假設您有一個TStringList,ChatMessages,您將追加用戶名和 他們鍵入的內容以及另一個包含其名稱列表的TStringList,Users包含在其中。

然後,要實現您想要的功能,您需要跟蹤「誰說什麼」, 和ChatMessages TStringList的Objects屬性可用於此目的。

所以,你可能有這樣幾個方法:

function TForm1.GetUserID(const UserName : String) : Integer; 
begin 
    Result := Users.IndexOf(UserName) + 1; 
    if Result = 0 then begin 
    Users.Add(UserName); 
    Result := Users.IndexOf(UserName) + 1; 
    end; 
    Assert(Result > 0); 
end; 

procedure TForm1.AddChatMsg(UserName, Msg : String); 
var 
    UserID : Integer; 
begin 
    UserID := GetUserID(UserName); 
    ChatMessages.Add(''); 
    ChatMessages.AddObject(UserName + ': ' + Msg, TObject(UserID)); 
end; 

和另一個程序,定期從ChatMessages更新RichEdit中的內容 。

然後,當你想「嘲弄」一個用戶時,你可以通過ChatMessage的對象 搜索他們的ID號碼。然後,您可以用星號代替 名稱標籤行中後面的內容,如下所示,直到在對象中找到 其他用戶的用戶標識或到達ChatMessages的結尾。編碼是留給讀者的一個練習。

不要緊,你是否在ChatMessage文本做了星號,或者因爲你 複製其文成RICHEDIT,除非當然,如果你在RichEdit中做 可以「untwit」用戶以後通過從ChatMessages刷新而不用星號替換。

請注意,上面的GetUserID基於用戶的ID在用戶列表的索引中(加1以避免任何用戶的UserID爲零,這會與不使用AddObject的行發生衝突)。因此,當用戶添加到列表中時,現有用戶的索引不會更改很重要。所以,你不希望用戶列表被排序(或者,如果你需要的話,你需要以不同的方式派生UserID)。

此外,我已經將數字存儲在stringlist的Objects屬性中,純粹是爲了使此代碼儘可能簡單,以供說明之用。在現實世界的解決方案中,您會希望使用「更乾淨」的方式來做到這一點,而做到這一點的顯而易見的方法是讓TUser類具有屬性,如名稱,用戶標識和「twit」標誌以及某種用戶容器類等,但如果包含在這裏的話,那些實現細節就會受到阻礙。當然,一旦你有一個TUser類,那麼要做的就是將用戶的TUser實例存儲在字符串列表的Object屬性中。

+0

如果你使用一個真實的對象,更新過程變得更加簡單和清晰。恕我直言假實例從一個整數是我看到的最糟糕的模式之一 –

+1

@SirRufo:謝謝你那些客氣話。說真的,我知道你的意思,我個人不會使用Objects屬性來存儲數字 - 這個想法使我的腳趾捲曲的方式與當我看到使用Tag屬性時相同。所以,我在答案中增加了一個段落來明確說明,我只是爲了說明簡單而採用了這種方式。但我認爲它對我答案的主要觀點有點分心,這就是OP顯然需要的實際上相當簡單,但TRichEdit不是開始的地方。 – MartynA

+0

IMData.UserID它返回usersname字符串名稱 我只加正常richline.lines.add(IMData.UserID +「:」 +留言): 消息只是一個字符串直接從客戶端到服務器的其他客戶沒有花哨的工作 –

相關問題