コード例 #1
0
        private string GetMessageItem(GKNet.Message msg)
        {
            Peer   sender     = Core.FindPeer(msg.Sender);
            string senderName = (msg.Sender == LocalId) ? string.Empty : string.Format("[{0}]", sender.Profile.UserName);

            return(string.Format("{0:yyyy/MM/dd HH:mm} {1}\r\n{2}", msg.Timestamp, senderName, msg.Text));
        }
コード例 #2
0
        void IChatForm.OnMessageReceived(Peer sender, GKNet.Message message)
        {
            Invoke((MethodInvoker) delegate {
                PrintMessage(message, true);

                UpdateStatus();
            });
        }
コード例 #3
0
        protected override void OnDrawItem(DrawItemEventArgs e)
        {
            if (e.Index < 0 || e.Index >= Items.Count)
            {
                return;
            }

            GKNet.Message msg           = (GKNet.Message)Items[e.Index];
            bool          senderIsLocal = (msg.Sender == LocalId);
            string        txt           = GetMessageItem(msg);

            bool      isSelected = (e.State & DrawItemState.Selected) == DrawItemState.Selected;
            Rectangle rt         = e.Bounds;
            Font      fnt        = Font;

            Brush itemBrush;

            if (isSelected)
            {
                itemBrush = (senderIsLocal) ? Brushes.Goldenrod : Brushes.LightSteelBlue;
            }
            else
            {
                itemBrush = (senderIsLocal) ? Brushes.PaleGoldenrod : Brushes.GhostWhite;
            }

            Rectangle rt1 = rt;

            rt1.Width  -= 1;
            rt1.Height -= 1;
            using (GraphicsPath path = CreateRoundedRectangle(rt1.Left, rt1.Top + 3, rt1.Width, rt1.Height - 3 * 2, 5)) {
                e.Graphics.FillPath(itemBrush, path);
                var pen = (isSelected) ? fPen2 : fPen1;
                e.Graphics.DrawPath(pen, path);
            }

            if (senderIsLocal)
            {
                // Undelivered / Delivered
                var icon = UIHelper.GetMessageStatusImage(msg.Status);
                if (icon != null)
                {
                    e.Graphics.DrawImage(icon, rt.Right - icon.Width - 2, rt.Top + 4);
                }
            }

            rt.Inflate(-5, -2);

            StringFormat fmt = new StringFormat();

            fmt.Alignment     = StringAlignment.Near;
            fmt.LineAlignment = StringAlignment.Center;

            e.Graphics.DrawString(txt, fnt, Brushes.Black, rt, fmt);

            base.OnDrawItem(e);
        }
コード例 #4
0
        private void PrintMessage(GKNet.Message msg, bool scrollToBottom)
        {
            lstChatMsgs.Items.Add(msg);

            if (scrollToBottom)
            {
                lstChatMsgs.ScrollToBottom();
            }
        }
コード例 #5
0
        protected override void OnMeasureItem(MeasureItemEventArgs e)
        {
            base.OnMeasureItem(e);

            if (e.Index < 0 || e.Index >= Items.Count)
            {
                return;
            }

            GKNet.Message msg      = (GKNet.Message)Items[e.Index];
            string        txt      = GetMessageItem(msg);
            SizeF         txt_size = e.Graphics.MeasureString(txt, this.Font);

            e.ItemHeight = (int)txt_size.Height + 2 * ItemMargin;
            e.ItemWidth  = (int)txt_size.Width;
        }