Creating a form in the plugin failed

Created at 21 Jul 2024, 04:41
How’s your experience with the cTrader Platform?
Your feedback is crucial to cTrader's development. Please take a few seconds to share your opinion and help us improve your trading experience. Thanks!
TI

tikahcm2

Joined 03.02.2024

Creating a form in the plugin failed
21 Jul 2024, 04:41


Hi everybody

I'm building the code that opens the form for the countdown timer in the plugin.

But there is an error in the following code

please help

public partial class frmCandleCountdown : Form
    {
        private const string resourcePath = @"C:\Users\theha\OneDrive\Documents\cAlgo\";
        myCandleCountDown caller;
        bool alwaysOnTop = true;

        public frmCandleCountdown(myCandleCountDown _caller, bool _alwaysOnTop)
        {
            alwaysOnTop = _alwaysOnTop;
            caller = _caller;
            InitializeComponent();
        }

        public void UpdateCounter(string _text)
        {
            lblCounter.Text = _text;
        }

        private void frmCandleCountdown_FormClosed(object sender, FormClosedEventArgs e)
        {
            caller.Stop();
        }

        private void frmCandleCountdown_Load(object sender, EventArgs e)
        {
            this.Icon = new Icon(resourcePath+"Countdown.ico");
            this.TopMost = alwaysOnTop;
        }
    }

 

 


@tikahcm2
Replies

PanagiotisCharalampous
22 Jul 2024, 06:22

Hi there,

Please provide the complete plug in code and the exact error message you receive.

Best regards,

Panagiotis


@PanagiotisCharalampous

tikahcm2
27 Jul 2024, 03:33 ( Updated at: 28 Jul 2024, 06:43 )

RE: Creating a form in the plugin failed

PanagiotisCharalampous said: 

Thanks for replying
Here is my code. (no error reported when compiling)

using System;
using System.Drawing;
using cAlgo.API;
using System.Threading;
using System.Windows.Forms;
using System.Media;



namespace cAlgo.Robots
{
    [Robot(TimeZone = TimeZones.UTC, AccessRights = AccessRights.FullAccess)]
    
    public class CountDown : Robot
    {
        [Parameter("Alert On", DefaultValue = true)]
        public bool paramAlertOn { get; set; }
        [Parameter("Always On Top", DefaultValue = true)]
        public bool paramOnTop { get; set; }
        
        [Parameter("Sound File Path", DefaultValue = "C:\\Users\\theha\\OneDrive\\Documents\\cAlgo\\sound.wav")]
        public string SoundFilePath { get; set; }

        private Thread _thread;
        private frmCandleCountdown _counter;
        
        const string alertFile = @"C:\Users\theha\OneDrive\Documents\cAlgo\sound.wmp3"; 
        protected override void OnStart()
        {
            Timer.Start(1);
            _counter = new frmCandleCountdown(this, paramOnTop);
            _thread = new Thread(() =>{ _counter.ShowDialog(); });
           
            
            _thread.SetApartmentState(ApartmentState.STA);
            _thread.Start();    
        }

        protected override void OnTimer()
        {
            int cdMinutes = 14 - Time.Minute % 15; 
            int cdSeconds = 59 - Time.Second;
            _thread = new Thread(() =>{ _counter.UpdateCounter(cdMinutes.ToString("00")+":"+cdSeconds.ToString("00"));});
            _thread.SetApartmentState(ApartmentState.STA);
            _thread.Start();
 
            if (Time.Second==31 && paramAlertOn)  
            { 
            
                Notifications.PlaySound(SoundFilePath);
            }  
        }
         
        protected override void OnStop()
        {
            _thread = new Thread(() => {_counter.Close();});
            _thread.SetApartmentState(ApartmentState.STA);
            _thread.Start();
        }
    }
    
    public partial class frmCandleCountdown : Form
    {
        private const string resourcePath = @"C:\Users\theha\OneDrive\Documents\cAlgo\";
        CountDown caller;
        bool alwaysOnTop = true;

        public frmCandleCountdown(CountDown _caller, bool _alwaysOnTop)
        {
            alwaysOnTop = _alwaysOnTop;
            caller = _caller;
            InitializeComponent();
        }

        public void UpdateCounter(string _text)
        {
            lblCounter.Text = _text;
        }

        private void frmCandleCountdown_FormClosed(object sender, FormClosedEventArgs e)
        {
            caller.Stop();
        }

        private void frmCandleCountdown_Load(object sender, EventArgs e)
        {
            this.Icon = new Icon(resourcePath+"Countdown.ico");
            this.TopMost = alwaysOnTop;
        }
    }
    
    partial class frmCandleCountdown
    {
        
        private System.ComponentModel.IContainer components = null;

        protected override void Dispose(bool disposing)
        {
            if (disposing && (components != null))
            {
                components.Dispose();
            }
            base.Dispose(disposing);
        }

        #region Windows Form Designer generated code

        private void InitializeComponent()
        {
            this.lblCounter = new System.Windows.Forms.Label();
            this.SuspendLayout();

            this.lblCounter.Dock = System.Windows.Forms.DockStyle.Top; 
            this.lblCounter.Font = new System.Drawing.Font("Bahnschrift SemiBold", 33F, System.Drawing.FontStyle.Regular);
            this.lblCounter.Location = new System.Drawing.Point(0, 0);
            this.lblCounter.Name = "lblCounter";
            this.lblCounter.Size = new System.Drawing.Size(39, 39);
            this.lblCounter.TabIndex = 0;
            this.lblCounter.Text = "00:00";
            this.lblCounter.TextAlign = System.Drawing.ContentAlignment.TopCenter; 

            this.AutoScaleDimensions = new System.Drawing.SizeF(96F, 96F); 
            this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.None; 
            this.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink;
            this.BackColor = System.Drawing.SystemColors.GrayText;
            this.ClientSize = new System.Drawing.Size(39, 39); 
            this.Controls.Add(this.lblCounter);
            this.Font = new System.Drawing.Font("Microsoft Sans Serif", 16.39F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
            this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.None;             
            this.Name = "frmCandleCountdown";
            this.StartPosition = System.Windows.Forms.FormStartPosition.Manual; 
             this.Left = Screen.PrimaryScreen.Bounds.Width-139;
    
             this.Text = "Candle Count Down";
            this.TopMost = true; 
            this.FormClosed += new System.Windows.Forms.FormClosedEventHandler(this.frmCandleCountdown_FormClosed);
            this.Load += new System.EventHandler(this.frmCandleCountdown_Load);
            this.ResumeLayout(true);

        }
        #endregion
        
        private System.Windows.Forms.Label lblCounter;
        
    }    
}  

Please check why the plugin is not running./.


@tikahcm2

PanagiotisCharalampous
28 Jul 2024, 07:34

RE: RE: Creating a form in the plugin failed

tikahcm2 said: 

PanagiotisCharalampous said: 

Thanks for replying
Here is my code. (no error reported when compiling)

using System;using System.Drawing;using cAlgo.API;using System.Threading;using System.Windows.Forms;using System.Media;namespace cAlgo.Robots{    [Robot(TimeZone = TimeZones.UTC, AccessRights = AccessRights.FullAccess)]        public class CountDown : Robot    {        [Parameter("Alert On", DefaultValue = true)]        public bool paramAlertOn { get; set; }        [Parameter("Always On Top", DefaultValue = true)]        public bool paramOnTop { get; set; }                [Parameter("Sound File Path", DefaultValue = "C:\\Users\\theha\\OneDrive\\Documents\\cAlgo\\sound.wav")]        public string SoundFilePath { get; set; }        private Thread _thread;        private frmCandleCountdown _counter;                const string alertFile = @"C:\Users\theha\OneDrive\Documents\cAlgo\sound.wmp3";         protected override void OnStart()        {            Timer.Start(1);            _counter = new frmCandleCountdown(this, paramOnTop);            _thread = new Thread(() =>{ _counter.ShowDialog(); });                                   _thread.SetApartmentState(ApartmentState.STA);            _thread.Start();            }        protected override void OnTimer()        {            int cdMinutes = 14 - Time.Minute % 15;             int cdSeconds = 59 - Time.Second;            _thread = new Thread(() =>{ _counter.UpdateCounter(cdMinutes.ToString("00")+":"+cdSeconds.ToString("00"));});            _thread.SetApartmentState(ApartmentState.STA);            _thread.Start();             if (Time.Second==31 && paramAlertOn)              {                             Notifications.PlaySound(SoundFilePath);            }          }                 protected override void OnStop()        {            _thread = new Thread(() => {_counter.Close();});            _thread.SetApartmentState(ApartmentState.STA);            _thread.Start();        }    }        public partial class frmCandleCountdown : Form    {        private const string resourcePath = @"C:\Users\theha\OneDrive\Documents\cAlgo\";        CountDown caller;        bool alwaysOnTop = true;        public frmCandleCountdown(CountDown _caller, bool _alwaysOnTop)        {            alwaysOnTop = _alwaysOnTop;            caller = _caller;            InitializeComponent();        }        public void UpdateCounter(string _text)        {            lblCounter.Text = _text;        }        private void frmCandleCountdown_FormClosed(object sender, FormClosedEventArgs e)        {            caller.Stop();        }        private void frmCandleCountdown_Load(object sender, EventArgs e)        {            this.Icon = new Icon(resourcePath+"Countdown.ico");            this.TopMost = alwaysOnTop;        }    }        partial class frmCandleCountdown    {                private System.ComponentModel.IContainer components = null;        protected override void Dispose(bool disposing)        {            if (disposing && (components != null))            {                components.Dispose();            }            base.Dispose(disposing);        }        #region Windows Form Designer generated code        private void InitializeComponent()        {            this.lblCounter = new System.Windows.Forms.Label();            this.SuspendLayout();            this.lblCounter.Dock = System.Windows.Forms.DockStyle.Top;             this.lblCounter.Font = new System.Drawing.Font("Bahnschrift SemiBold", 33F, System.Drawing.FontStyle.Regular);            this.lblCounter.Location = new System.Drawing.Point(0, 0);            this.lblCounter.Name = "lblCounter";            this.lblCounter.Size = new System.Drawing.Size(39, 39);            this.lblCounter.TabIndex = 0;            this.lblCounter.Text = "00:00";            this.lblCounter.TextAlign = System.Drawing.ContentAlignment.TopCenter;             this.AutoScaleDimensions = new System.Drawing.SizeF(96F, 96F);             this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.None;             this.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink;            this.BackColor = System.Drawing.SystemColors.GrayText;            this.ClientSize = new System.Drawing.Size(39, 39);             this.Controls.Add(this.lblCounter);            this.Font = new System.Drawing.Font("Microsoft Sans Serif", 16.39F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0)));            this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.None;                         this.Name = "frmCandleCountdown";            this.StartPosition = System.Windows.Forms.FormStartPosition.Manual;              this.Left = Screen.PrimaryScreen.Bounds.Width-139;                 this.Text = "Candle Count Down";            this.TopMost = true;             this.FormClosed += new System.Windows.Forms.FormClosedEventHandler(this.frmCandleCountdown_FormClosed);            this.Load += new System.EventHandler(this.frmCandleCountdown_Load);            this.ResumeLayout(true);        }        #endregion                private System.Windows.Forms.Label lblCounter;            }    }  

Please check why the plugin is not running./.

Hi there,

I just tried this and works fine for me

Best regards,

Panagiotis


@PanagiotisCharalampous

tikahcm2
28 Jul 2024, 15:48

RE: RE: RE: Creating a form in the plugin failed

How can I convert this cbot into a plugin?

thanks!


@tikahcm2

PanagiotisCharalampous
29 Jul 2024, 05:23

RE: RE: RE: RE: Creating a form in the plugin failed

tikahcm2 said: 

How can I convert this cbot into a plugin?

thanks!

Hi there,

There is no specific conversion process. You need to write a plug in from scratch with the same functionality.

Best regards,

Panagiotis


@PanagiotisCharalampous