2013-05-07 29 views
1

我正在寫一個聊天程序,有一羣客戶端連接到它並填充自己到一個列表視圖,我希望能夠點擊每個客戶端並打開一個看起來像聊天的窗體,但我想能夠同時爲多個客戶端做到這一點。如何鎖定Delphi中的克隆表單?

我已經Form2(聊天窗口)克隆本身的每一個實例,但是,我需要知道如何鎖定到克隆的形式進行修改,例如Form2.RichEdit.Lines.Add

然而,當我試圖做到這一點不起作用,因爲我沒有鎖定到正確的形式,因爲它被克隆我假設它不再是Form2

任何信息,將不勝感激。


更新

我要先走一個改寫什麼,我試圖做的。

我將解釋什麼即時通訊試圖做:我有一個聊天程序(服務器),正在偵聽客戶端通過Indy10套接字連接當客戶端連接它填充ListView與用戶名,當我點擊用戶名稱(服務器)打開privatemessageform,在那裏我可以與客戶端聊天。

我希望能有連接的多個客戶端,我希望能夠點擊多達我想和有它克隆privatemessageform並有2個單獨的聊天窗口,2個獨立的客戶

問題是:當嘗試點擊第二個用戶時,程序會感到困惑,並且無法鎖定到第二個用戶的private消息表單(克隆)。

如果需要更多的信息,我的意思是任何事情,請不要猶豫,問我會持續幾個小時,並不斷檢查此線程。

我一直堅持這3天,所以我真的很想得到解決這個問題,並繼續我的項目。任何信息都非常感謝。 提前致謝!

+0

你是什麼意思「克隆本身」?顯示基本代碼,以及失敗。 – 2013-05-07 07:09:36

+0

即將上牀,明天我會發布代碼,謝謝你的回覆。 – user2352988 2013-05-07 07:27:50

回答

4

打開Project Options並從自動創建列表中刪除Form2。不要再使用該變量。

TForm2重命名爲某個有意義的名稱。一旦你的程序中有〜10個表格,你就會忘記你的意思是數字2,5,7 ... 總是賦予變量有意義的名稱,包括組件,包括表單。在這裏,我將使用TForm2 a TPrivMessageForm

使用一個特殊的變量數組來保存多個表單,而不是一個全局變量。例如這樣的:

Type TChatUser = string; 
// to begin with, user is a name. Then it may become URL, or GUID or something  
// complex like `record` or `class` or whatever 

Type TPMForms = TDictionary<TChatUser, TPrivMessageForm>; 

PMForms := TPMForms.Create; 

創建點擊後用戶新的私人郵件窗口:

if not PMForms.ContainsKey(ClickedUser) 
    then PMForms.Add(ClickedUser, TPrivMessageForm.Create(Application)); 
PMForms[ClickedUser].ChatWith := ClickedUser; // variable in ex-TForm2 to tell several instances apart 

當這種形式被關閉 - 它應該通過其OnClose

  • PMForms刪除自身列表(所以沒有懸掛指針將保持)
  • 選擇caRelease關閉操作(使VCL實際上釋放形式對象)

另外

PS見。請編輯您的問題,並添加TAG與您的特定德爾福版本。

PPS。下載現成的FLOSS聊天程序,並閱讀並瞭解他們是如何做到的。可能不是打開一個自由浮動(混亂的桌面)表單,你最好打開PageControl中的Tab。 「使用源代碼,盧克」

對於後者找到一個有請在www.google兩個字 「視覺IRC」 的消息.com並獲得http://sourceforge.net/p/visualirc/mercurial/ci/default/tree/ - 這一重要信息我沒有公平地相信,感興趣的人可以自己做。

PPPS。這些不是「克隆」的:克隆是分離的對象。你說的是同一個表單類的幾個實例。就像您在表單上可能有兩個或多個標籤一樣,您的應用程序中可以有兩個或多個表單。

+0

感謝您的回覆,我會盡力,然後我會提交一些代碼給大家看看。 – user2352988 2013-05-07 23:14:53

+0

其實,你爲什麼認爲我們應該看看你的代碼;-) 你正在進行聊天,所以你可以從以前的寫作聊天嘗試中學習。事實上,我認爲你寧願只參加這些項目,並根據自己的需求進行調整,而不是重新發明自行車。 – 2013-05-08 12:09:29

+0

我正在使用Delphi XE2,不幸的是我似乎無法理解如何實現您發佈的代碼,有什麼方法可以解釋它嗎?或者提供更多的例子,我已經以不同的方式嘗試了這麼多次,我以爲我曾經有過它,但它最終不能工作,所以請儘快回到我身邊。再次感謝 – user2352988 2013-05-10 01:13:30