// * // * Copyright (C) 2008 Roger Alsing : http://www.RogerAlsing.com // * // * This library is free software; you can redistribute it and/or modify it // * under the terms of the GNU Lesser General Public License 2.1 or later, as // * published by the Free Software Foundation. See the included license.txt // * or http://www.gnu.org/copyleft/lesser.html for details. // * // * using System; using System.ComponentModel; using System.Drawing; using System.Globalization; using System.Runtime.InteropServices; using System.Windows.Forms; using Alsing.Windows.Forms.CoreLib; namespace Alsing.Windows.Forms { /// /// Summary description for InfoTip. /// public class InfoTipForm : Form { private WeakReference _Control; private int _Count = 1; private int _SelectedIndex; private PictureBox btnNext; private PictureBox btnPrev; /// /// Required designer variable. /// private Container components; private FormatLabelControl InfoText; private Label lblIndex; private Panel panel1; private Panel panel2; private PictureBox picIcon; private Panel pnlImage; private Panel pnlSelect; /// /// /// public InfoTipForm() { InitializeComponent(); } /// /// /// /// public InfoTipForm(Control parent) { ParentControl = parent; if (CreateParams != null) CreateParams.ClassName = "tooltips_class32"; InitializeComponent(); } private Control ParentControl { get { return _Control != null ? (Control) _Control.Target : null; } set { _Control = new WeakReference(value); } } public int SelectedIndex { get { return _SelectedIndex; } set { if (value > _Count) value = 1; if (value < 1) value = _Count; _SelectedIndex = value; OnSelectedIndexChanged(); SetPos(); } } public int Count { get { return _Count; } set { _Count = value; } } public Image Image { get { return picIcon.Image; } set { picIcon.Image = value; if (value == null) { pnlImage.Visible = false; } else { pnlImage.Visible = true; pnlImage.Width = Image.Width + 6; picIcon.Size = Image.Size; } DoResize(); } } public string Data { get { return InfoText.Text; } set { InfoText.Text = value; } } [DllImport("user32.dll", EntryPoint = "SendMessage")] private static extern int SendMessage(IntPtr hWnd, int message, int _data, int _id); public event EventHandler SelectedIndexChanged = null; /// /// Clean up any resources being used. /// protected override void Dispose(bool disposing) { if (disposing) { if (components != null) { components.Dispose(); } } base.Dispose(disposing); } private void InfoText_Resize(object sender, EventArgs e) { DoResize(); } private void DoResize() { int w = InfoText.Left + InfoText.Width + 8; if (Count > 1) { w += pnlSelect.Width; } if (picIcon.Image != null) { w += pnlImage.Width; } int h = InfoText.Top + InfoText.Height + 6; if (Image != null && Image.Height + picIcon.Top*2 > h) h = Image.Height + picIcon.Top*2; ClientSize = new Size(w, h); } /// /// /// public void Init() { SelectedIndex = 1; SetPos(); } private void btnNext_Click(object sender, EventArgs e) { SelectedIndex++; SetPos(); } private void btnPrev_Click(object sender, EventArgs e) { SelectedIndex--; SetPos(); } private void btnPrev_DoubleClick(object sender, EventArgs e) { SelectedIndex--; SetPos(); } private void btnNext_DoubleClick(object sender, EventArgs e) { SelectedIndex++; SetPos(); } private void SetPos() { if (Count == 1) { pnlSelect.Visible = false; } else { pnlSelect.Visible = true; } DoResize(); lblIndex.Text = SelectedIndex.ToString((CultureInfo.InvariantCulture)) + " of " + Count.ToString(CultureInfo.InvariantCulture); if (ParentControl != null) ParentControl.Focus(); } private void InfoTipForm_Enter(object sender, EventArgs e) { ParentControl.Focus(); } private void InfoText_Enter(object sender, EventArgs e) { ParentControl.Focus(); } private void OnSelectedIndexChanged() { if (SelectedIndexChanged != null) SelectedIndexChanged(this, null); } #region Windows Form Designer generated code /// /// Required method for Designer support - do not modify /// the contents of this method with the code editor. /// private void InitializeComponent() { var resources = new System.Resources.ResourceManager(typeof (InfoTipForm)); this.pnlSelect = new System.Windows.Forms.Panel(); this.btnNext = new System.Windows.Forms.PictureBox(); this.btnPrev = new System.Windows.Forms.PictureBox(); this.lblIndex = new System.Windows.Forms.Label(); this.panel2 = new System.Windows.Forms.Panel(); this.InfoText = new Alsing.Windows.Forms.CoreLib.FormatLabelControl(); this.pnlImage = new System.Windows.Forms.Panel(); this.picIcon = new System.Windows.Forms.PictureBox(); this.panel1 = new System.Windows.Forms.Panel(); this.pnlSelect.SuspendLayout(); this.panel2.SuspendLayout(); this.pnlImage.SuspendLayout(); this.panel1.SuspendLayout(); this.SuspendLayout(); // // pnlSelect // this.pnlSelect.Controls.AddRange(new System.Windows.Forms.Control[] { this.btnNext, this.btnPrev, this.lblIndex } ); this.pnlSelect.Dock = System.Windows.Forms.DockStyle.Left; this.pnlSelect.DockPadding.All = 4; this.pnlSelect.Location = new System.Drawing.Point(32, 0); this.pnlSelect.Name = "pnlSelect"; this.pnlSelect.Size = new System.Drawing.Size(80, 35); this.pnlSelect.TabIndex = 0; // // btnNext // this.btnNext.BackColor = System.Drawing.SystemColors.Control; this.btnNext.Image = ((System.Drawing.Bitmap) (resources.GetObject( "btnNext.Image"))); this.btnNext.Location = new System.Drawing.Point(68, 6); this.btnNext.Name = "btnNext"; this.btnNext.Size = new System.Drawing.Size(9, 11); this.btnNext.TabIndex = 1; this.btnNext.TabStop = false; this.btnNext.Click += new System.EventHandler(this.btnNext_Click); this.btnNext.DoubleClick += new System.EventHandler (this.btnNext_DoubleClick); // // btnPrev // this.btnPrev.BackColor = System.Drawing.SystemColors.Control; this.btnPrev.Image = ((System.Drawing.Bitmap) (resources.GetObject( "btnPrev.Image"))); this.btnPrev.Location = new System.Drawing.Point(4, 6); this.btnPrev.Name = "btnPrev"; this.btnPrev.Size = new System.Drawing.Size(9, 11); this.btnPrev.TabIndex = 0; this.btnPrev.TabStop = false; this.btnPrev.Click += new System.EventHandler(this.btnPrev_Click); this.btnPrev.DoubleClick += new System.EventHandler (this.btnPrev_DoubleClick); // // lblIndex // this.lblIndex.Dock = System.Windows.Forms.DockStyle.Top; this.lblIndex.Location = new System.Drawing.Point(4, 4); this.lblIndex.Name = "lblIndex"; this.lblIndex.Size = new System.Drawing.Size(72, 23); this.lblIndex.TabIndex = 2; this.lblIndex.Text = "20 of 20"; this.lblIndex.TextAlign = System.Drawing.ContentAlignment.TopCenter; // // panel2 // this.panel2.Controls.AddRange(new System.Windows.Forms.Control[] { this.InfoText } ); this.panel2.Dock = System.Windows.Forms.DockStyle.Fill; this.panel2.DockPadding.All = 4; this.panel2.Location = new System.Drawing.Point(112, 0); this.panel2.Name = "panel2"; this.panel2.Size = new System.Drawing.Size(126, 35); this.panel2.TabIndex = 1; // // InfoText // this.InfoText.AutoSizeHorizontal = true; this.InfoText.AutoSizeVertical = true; this.InfoText.BackColor = System.Drawing.SystemColors.Info; this.InfoText.BorderColor = System.Drawing.Color.Black; this.InfoText.BorderStyle = Alsing.Windows.Forms.BorderStyle.None; this.InfoText.Font = new System.Drawing.Font("Microsoft Sans Serif", 7F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ( (System.Byte) (0))); this.InfoText.ImageList = null; this.InfoText.Link_Color = System.Drawing.Color.Blue; this.InfoText.Link_Color_Hover = System.Drawing.Color.Blue; this.InfoText.Link_UnderLine = false; this.InfoText.Link_UnderLine_Hover = true; this.InfoText.Location = new System.Drawing.Point(2, 4); this.InfoText.Name = "InfoText"; this.InfoText.ScrollBars = System.Windows.Forms.ScrollBars.None; this.InfoText.Size = new System.Drawing.Size(59, 13); this.InfoText.TabIndex = 0; this.InfoText.Text = "format label"; this.InfoText.WordWrap = false; this.InfoText.Resize += new System.EventHandler(this.InfoText_Resize); this.InfoText.Enter += new System.EventHandler(this.InfoText_Enter); // // pnlImage // this.pnlImage.Controls.AddRange(new System.Windows.Forms.Control[] { this.picIcon } ); this.pnlImage.Dock = System.Windows.Forms.DockStyle.Left; this.pnlImage.Name = "pnlImage"; this.pnlImage.Size = new System.Drawing.Size(32, 35); this.pnlImage.TabIndex = 2; this.pnlImage.Visible = false; // // picIcon // this.picIcon.Location = new System.Drawing.Point(5, 3); this.picIcon.Name = "picIcon"; this.picIcon.Size = new System.Drawing.Size(19, 20); this.picIcon.TabIndex = 1; this.picIcon.TabStop = false; // // panel1 // this.panel1.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; this.panel1.Controls.AddRange(new System.Windows.Forms.Control[] { this.panel2, this.pnlSelect, this.pnlImage } ); this.panel1.Dock = System.Windows.Forms.DockStyle.Fill; this.panel1.Name = "panel1"; this.panel1.Size = new System.Drawing.Size(240, 37); this.panel1.TabIndex = 3; // // InfoTipForm // this.AutoScaleBaseSize = new System.Drawing.Size(5, 13); this.BackColor = System.Drawing.SystemColors.Info; this.ClientSize = new System.Drawing.Size(240, 37); this.ControlBox = false; this.Controls.AddRange(new System.Windows.Forms.Control[] { this.panel1 } ); this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedSingle; this.Name = "InfoTipForm"; this.ShowInTaskbar = false; this.StartPosition = System.Windows.Forms.FormStartPosition.Manual; this.Enter += new System.EventHandler(this.InfoTipForm_Enter); this.pnlSelect.ResumeLayout(false); this.panel2.ResumeLayout(false); this.pnlImage.ResumeLayout(false); this.panel1.ResumeLayout(false); this.ResumeLayout(false); } #endregion } }