Page 1 of 1

LightningChart totally black

Posted: Tue Sep 29, 2020 9:52 am
by Harry943
Hello,
I have a winforms program using LightningChart, and I override CreateParams in Form class for some reason and put LightingChart in a custom panel, then the LightningChart will go totally black, is there some where I do is wrong? Attached file demo project simply override CreateParams, and will show the black screen when launch, then turn to right content, but in my program it's get totally black all the time.

black when launch
Image

normal after launch
Image

totally black in my program
Image

Re: LightningChart totally black

Posted: Tue Sep 29, 2020 9:55 am
by Harry943
Code for override CreateParams

Code: Select all

protected override CreateParams CreateParams
{
    get
    {
        CreateParams cp = base.CreateParams;
        cp.ExStyle |= 0x02000000;
        return cp;
    }
}

Re: LightningChart totally black

Posted: Wed Sep 30, 2020 1:49 pm
by Arction_LasseP
Hello Harry,

We tried to reproduce this issue with the test project you shared, but couldn't produce a situation where the chart remained completely black.

There are two forms in the project, ReadData and Form1. Both work with CreateParams added.

ReadData is first black, then the chart is shown.
ReadData.PNG
ReadData.PNG (21.89 KiB) Viewed 6469 times
Form1 is first Transparent, then the chart is shown.
Form1.PNG
Form1.PNG (17.01 KiB) Viewed 6469 times
Does the issue happen in that test project in your machine? If it does, does the chart render normally if you leave out the CreateParams? This would tell if the cause actually is CreateParams.
The only known case of a completely black chart is when there are some references missing. In the test project they seems to be correct, but just in case you could test to add also Arction.DirectXFiles.dll, DirectXInit.dll and Arction.MathCore.dll.

Best regards,
Lasse

Re: LightningChart totally black

Posted: Fri Oct 09, 2020 9:30 am
by hyetc
I have the same problem, probably with RenderOptions.DeviceType = rendererdevicetype.auto;Is related to hardware acceleration caused this problem, instead RenderOptions. DeviceType = RendererDeviceType. SoftwareOnlyD11;Without this problem, the key changed to this form and the performance did not play out

Re: LightningChart totally black

Posted: Wed Oct 14, 2020 1:17 pm
by Arction_LasseP
Hello,

As mentioned, a totally black chart can occur if there are some references missing. Our User's Manual chapter 29.1 has a complete list of references. When developing, not necessarily all of these files are needed, for example if DirectX -files can already be found already somewhere in the machine. Referencing all the assemblies listed can solve the black chart issue.

However, if rendering DeviceType SoftwareD11 works but not HardwareD11 or Hardware D9, there probably is something wrong with the drivers themselves, as they could be buggy or outdated. Therefore, updating the drivers to the newest version can help.

In general, RenderingEngine errors can be caught via listening to ChartMessage -event right after LightningChart is constructed and calling CheckEngineResult() -method in it. For instance:

Code: Select all

private void _chart_ChartMessage(ChartMessageInfo info)
        {
            info.ToString(); //= log message
 
            if (info.MessageType == MessageType.RenderDeviceCreateFailed || info.MessageType == MessageType.MemoryAllocationError)
            {
                CheckEngineResult();
            }
       }
 
 
private void CheckEngineResult()
        {
            var results = _chart.GetLastEngineInitResults();
 
            foreach (var engineInitResult in results)
            {
                string sLog = string.Format("Engine {0}. Success:{1}", engineInitResult.DeviceType, engineInitResult.Success);
 
                foreach (var exception in engineInitResult.Exceptions)
                {
                    sLog = string.Format("{0}\n Exception: {1}", sLog, exception.Message);
                }
                System.Diagnostics.Debug.WriteLine(sLog);
            }
       }
Best regards,
Lasse

Re: LightningChart totally black

Posted: Thu Nov 12, 2020 9:12 am
by hyetc
The problem is still unresolved, the engine has no problem, and the override parameter method will have a black background problem.And in Windows 7 system will be more obvious, I hope you can cause attention, this is really a very serious problem.If you think about it, it's going to be a big black patch when it loads, and it's going to be a really bad experience.The following code addresses the splash screen problem caused by too many widgets in our window layout.

protected override CreateParams CreateParams
{
get
{
CreateParams cp = base.CreateParams;
cp.ExStyle |= 0x02000000;
return cp;
}
}

Re: LightningChart totally black

Posted: Fri Nov 13, 2020 9:43 am
by Arction_LasseP
Hello,

We investigated this issue more, and possibly were able to reproduce it. Is the following what is happening in your application when using CreateParams?

When the app is started WinForms controls such as buttons are drawn but the chart remains black (left image below). After a short time, the chart is drawn (right image below).
BlackChart.png
BlackChart.png (399.01 KiB) Viewed 5971 times
What is the chart's behaviour you are trying to accomplish? Should the controls and the chart be drawn at the same time? If this is the case, you most likely have to delay the drawing of the controls somehow. This could be done by overriding OnPaint method or by using SuspendLayout and ResumeLayout. However, one workaround is to hide the controls until the chart has been drawn. In other words, set Visible property for all controls false by default, then in chart's Paint event, set it true. The example code below shows all buttons only after the chart has been drawn.

Code: Select all

_chart.Paint += _chart_Paint;

        private void _chart_Paint(object sender, PaintEventArgs e)
        {
            _chart.Paint -= _chart_Paint; // Do this only once.
            foreach (var b in this.Controls.OfType<Button>())
            {
                b.Visible = true;
            }
        }
Best regards,
Lasse