Login Page - Create Account

Support Board


Date/Time: Tue, 01 Apr 2025 22:48:06 +0000



Post From: Clock - Study Indicator

[2022-10-20 14:16:44]
JohnR - User831573 - Posts: 327
OK, Since there have been many to help me with my coding issues, Here is a simple give back. I've attached a screen shot, .cpp source file, and compiled .DLL which can be added to your Data directory.

I've modified the ClockRealTime to now allow text to be added to the end of the display. I call it MyClockRealTime. I have include source as well as the prebuilt DLL. This is my first time offering code. It can be added to User Contributed Studies, or used to modify the built in original - if SC chooses to do so. Basically all I did was change the name of the DLL, Study and Graph Name. Then add an additional input [9] for the text and added 1 line of code to add the text to the original string.
--> RemainingTimeString += Input_MyTimeZone.GetString();

Hope this helps,
JohnR


// The top of every source code file must include this line

#include "sierrachart.h"

// This line is required. Change the text within the quote
// marks to what you want to name your group of custom studies.

SCDLLName("MyClockRealTime")

/*==========================================================================*/
// changed name of study to MyClockRealTime
SCSFExport scsf_MyClockRealTime(SCStudyInterfaceRef sc)
{
  SCSubgraphRef Subgraph_Clock = sc.Subgraph[0];

  SCInputRef Input_HorizontalPosition = sc.Input[0];
  SCInputRef Input_VerticalPosition = sc.Input[1];
  SCInputRef Input_UseAMPM = sc.Input[3];
  SCInputRef Input_DrawAboveMainPriceGraph = sc.Input[4];
  SCInputRef Input_UseBoldFont = sc.Input[5];
  SCInputRef Input_TransparentLabelBackground = sc.Input[7];
  SCInputRef Input_HourOffset = sc.Input[8];
  // Line added below for MyTimeZone     
  SCInputRef Input_MyTimeZone = sc.Input[9];

  if (sc.SetDefaults)
  {
    // Set the configuration and defaults
// Changed name of graph to My Clock - RealTime
    sc.GraphName = "MY Clock - RealTime";

    sc.AutoLoop = 0;//Manual looping
    sc.GraphRegion = 0;
    sc.ValueFormat = 0;
    sc.UpdateAlways = 1;
    // Changed name of graph to My Clock
    Subgraph_Clock.Name = "My Clock";
    Subgraph_Clock.LineWidth = 20;
    Subgraph_Clock.DrawStyle = DRAWSTYLE_CUSTOM_TEXT;
    Subgraph_Clock.PrimaryColor = RGB(0, 0, 0); //black
    Subgraph_Clock.SecondaryColor = RGB(255, 127, 0); //Orange
    Subgraph_Clock.SecondaryColorUsed = true;
    Subgraph_Clock.DisplayNameValueInWindowsFlags = 1;

    Input_HorizontalPosition.Name.Format("Initial Horizontal Position From Left (1-%d)", static_cast<int>(CHART_DRAWING_MAX_HORIZONTAL_AXIS_RELATIVE_POSITION));
    Input_HorizontalPosition.SetInt(20);
    Input_HorizontalPosition.SetIntLimits(1, static_cast<int>(CHART_DRAWING_MAX_HORIZONTAL_AXIS_RELATIVE_POSITION));

    Input_VerticalPosition.Name.Format("Initial Vertical Position From Bottom (1-%d)", static_cast<int>(CHART_DRAWING_MAX_VERTICAL_AXIS_RELATIVE_POSITION));
    Input_VerticalPosition.SetInt(90);
    Input_VerticalPosition.SetIntLimits(1, static_cast<int>(CHART_DRAWING_MAX_VERTICAL_AXIS_RELATIVE_POSITION));

    Input_UseAMPM.Name = "Use A.M. and P.M.";
    Input_UseAMPM.SetYesNo(false);

    Input_DrawAboveMainPriceGraph.Name = "Draw Above Main Price Graph";
    Input_DrawAboveMainPriceGraph.SetYesNo(false);

    Input_UseBoldFont.Name = "Use Bold Font";
    Input_UseBoldFont.SetYesNo(true);

    Input_TransparentLabelBackground.Name = "Transparent Label Background";
    Input_TransparentLabelBackground.SetYesNo(false);

    Input_HourOffset.Name = "Hour Offset";
    Input_HourOffset.SetInt(0);

    // 2 Lines added below for MyTimeZone     
    Input_MyTimeZone.Name = "My Time Zone";
    Input_MyTimeZone.SetString("USA");

    return;
  }


  int Hour = 0, Minute = 0, Second = 0;
  if (sc.IsReplayRunning())
    SCDateTimeMS(sc.GetEndingDateTimeForBarIndex(sc.ArraySize - 1)).GetTimeHMS(Hour, Minute, Second);
  else
    sc.CurrentSystemDateTimeMS.GetTimeHMS(Hour, Minute, Second);

  if (Input_HourOffset.GetInt() != 0)
  {
    Hour += Input_HourOffset.GetInt();
    if (Hour > 24)
      Hour -= 24;
    else if (Hour < 0)
      Hour += 24;
  }

  SCString RemainingTimeString;
  if (Input_UseAMPM.GetYesNo())
  {
    int AdjustedHour = Hour;
    if (Hour >= 13)
      AdjustedHour -= 12;

    RemainingTimeString.Format("%d:%02d:%02d ", AdjustedHour, Minute, Second);
    if (Hour < 12)
      RemainingTimeString += "am";
    else
      RemainingTimeString += "pm";
  }
  else
    RemainingTimeString.Format("%d:%02d:%02d", Hour, Minute, Second);
  // Line added below for MyTimeZone     
  RemainingTimeString += Input_MyTimeZone.GetString();

  int HorizontalPosition = Input_HorizontalPosition.GetInt();
  int VerticalPosition = Input_VerticalPosition.GetInt();

  int DrawAboveMainPriceGraph = Input_DrawAboveMainPriceGraph.GetYesNo();

  int TransparentLabelBackground = Input_TransparentLabelBackground.GetYesNo();
  int UseBoldFont = Input_UseBoldFont.GetYesNo();

  sc.AddAndManageSingleTextUserDrawnDrawingForStudy(sc, 0, HorizontalPosition, VerticalPosition, Subgraph_Clock, TransparentLabelBackground, RemainingTimeString, DrawAboveMainPriceGraph, 0, UseBoldFont);
}

/*==========================================================================*/
Date Time Of Last Edit: 2022-10-21 02:22:18
imageSC MyRealTimeClock.jpg / V - Attached On 2022-10-20 14:07:43 UTC - Size: 24.94 KB - 224 views
attachmentMyClockRealTime.dll - Attached On 2022-10-20 14:08:16 UTC - Size: 80 KB - 363 views
attachmentMyRealTimeClock.cpp - Attached On 2022-10-20 14:09:53 UTC - Size: 4.25 KB - 319 views