Автор Тема: Полезные коды EasyLanguage  (Прочитано 1080 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Igor

  • Гость
Полезные коды EasyLanguage
« : 14 Апрель 2015, 17:37:48 »
может имеет смысл завести ветку по easylanguage?

что бы делиться полезностями типа такого:

при работе с текстами постоянно приходится иметь в уме количество десятых если необходимо вывести ценовое значение
а ежели использовать такой код
if PriceScale = 100000 then autodecimal = 5 else
if PriceScale = 10000  then autodecimal = 4 else
If PriceScale = 1000   then autodecimal = 3 else
If PriceScale = 100    then autodecimal = 2 else
If PriceScale = 10     then autodecimal = 1 else
If PriceScale = 1      then autodecimal = 0;
введя переменную autodecimal и подставляя её как второй параметр в NumToStr, будем автоматически иметь правильное отображение цены
можно оформить в функцию

Можно еще проще и универсальней: ;D

{***************************************************************************************************
Функция предназначена для определения ценовой доли актива (количества знаков дробной части)
***************************************************************************************************}

Vars: Val1(MinMove / PriceScale),
      Val2(Round(0.123456789 / Val1, 0)),
      Val3(IFF(Val2 = 0, 0, StrLen(NumToStr(Val2, 0))));

PFDigits = Val3;



{***************************************************************************************************
Функция предназначена для округления значения переменной до ценовой доли актива
***************************************************************************************************}

Inputs: Value(Numeric);

PFRound = Round(Value, PFDigits);



Например, значение Value0 = PFRound(Close / 3) будет округлено до ценовой доли.





не пойму, как тут вообще темы задавать?

Оффлайн Станислав

  • Участник клуба
  • *
  • Сообщений: 159
    • Просмотр профиля
Полезные коды EasyLanguage
« Ответ #1 : 19 Январь 2016, 19:10:27 »
Возможно кому-нибудь пригодится :)

Оффлайн Станислав

  • Участник клуба
  • *
  • Сообщений: 159
    • Просмотр профиля
Полезные коды EasyLanguage
« Ответ #2 : 19 Январь 2016, 19:13:41 »
Возможно кому-нибудь пригодится  :)

Оффлайн Gelium

  • Администратор
  • Сообщений: 6 724
    • Просмотр профиля
    • Gelium.net
Полезные коды EasyLanguage
« Ответ #3 : 23 Январь 2016, 16:43:08 »
Возможно кому-нибудь пригодится  :)

Спасибо! Пригодится.

Оффлайн Геннадий

  • Участник клуба
  • *
  • Сообщений: 929
    • Просмотр профиля
Полезные коды EasyLanguage
« Ответ #4 : 11 Март 2016, 15:07:16 »
В качестве альтернативы прямого экспорта в эксель из TS, использую экспорт в текстовый файл (работоспособность этого метода проверена временем - безотказная ;)), а потом макросом в экселе обрабатываю текстовый файл, на мой взгляд так удобнее и универсально, т.к. макросы экселя позволяют выполнить практически любой отчет в нужном виде, ну и конечно же выводим на панель уравления в экселе управляющие кнопки :) Эт как идея..
А можно по поводу скрипта поподробнее ?

Оффлайн Станислав

  • Участник клуба
  • *
  • Сообщений: 159
    • Просмотр профиля
Полезные коды EasyLanguage
« Ответ #5 : 12 Март 2016, 17:26:36 »
Считываем файл и сохраняем поля файла в массив, который в последствии будем обрабатывать. Если обработка не нужна, можно сразу заполнять информацию в ячейки экселя...
Запускаем эксель, нажимаем Alt+F11, вставляем в соответствующие Sub():

         Open(File_wrk) For Input As #1
         Do Until EOF(1)
            Line Input #1, Value
            FileText = FileText & Value           ‘здесь можно сразу сохранять в двумерный массив добавив счетчик прочитанных строк
         Loop
         Close #1

Для удобства обработки создаем меню и назначаем горячие клавиши...
СОЗДАНИЕ МЕНЮ:

Option Explicit                                                                                    'Обязательное объявление переменных
Option Compare Text                                                                                'Обработка текстовых значений без учёта регистра

Sub s_ГРМеню()
   Call f_ГРМеню(CBCReset:=False)
End Sub
Function f_ГРМеню(Optional ByVal CBCReset As Boolean)
   Dim i   As Byte
   Dim CBC As Variant
   Dim Msg As Variant

   'Удалить главное меню
   If CBCReset = True Then
      If CommandBars(1).Controls.Count > 0 Then CommandBars(1).Reset
      If CommandBars("Cell").Controls.Count > 0 Then CommandBars("Cell").Reset
      Exit Function
   End If

   'Создать главное меню
   For i = 1 To 2 Step 1: DoEvents
      Select Case i
         Case 1: Msg = 1
         Case 2: Msg = "Cell"
      End Select

      'CommandBars(Msg).Reset

      CBC = False
      For Each CBC In CommandBars(Msg).Controls: DoEvents
         If InStr(CBC.Caption, "ГрафикРабот") > 0 Then
            CBC = True
            Exit For
         End If
      Next CBC

      If CBC = False Then
         With CommandBars(Msg).Controls.Add(Type:=msoControlPopup, Temporary:=True)
            .Caption = "ГрафикРабот"
            .Visible = True
            With .Controls
               'Директории и файлы
               With .Add(Type:=msoControlPopup, Temporary:=True)
                  .Caption = "Директории и файлы"
                  With .Controls
                     With .Add(Type:=msoControlButton): .FaceId = 303: .BeginGroup = False: .Caption = "Текущая структура директорий": .OnAction = "s_ГРСтруктураДиректорийСкан":    End With
                     With .Add(Type:=msoControlButton): .FaceId = 464: .BeginGroup = False: .Caption = "Удалить структуру директорий": .OnAction = "s_ГРСтруктураДиректорийУдалить": End With
                     With .Add(Type:=msoControlButton): .FaceId = 462: .BeginGroup = False: .Caption = "Создать структуру директорий": .OnAction = "s_ГРСтруктураДиректорийСоздать": End With
                     With .Add(Type:=msoControlButton): .FaceId = 313: .BeginGroup = False: .Caption = "Менеджер файлов":              .OnAction = "s_ГРМенеджерФайлов":             End With
                     With .Add(Type:=msoControlButton): .FaceId = 790: .BeginGroup = False: .Caption = "Менеджер гиперссылок":         .OnAction = "s_ГРМенеджерГиперссылок":        End With
                  End With
               End With
            End With
         End With
      End If
   Next i
End Function



Sub s_ГРГорячиеКлавиши()
   Call f_ГРГорячиеКлавиши(CBCReset:=False)
End Sub
Function f_ГРГорячиеКлавиши(Optional ByVal CBCReset As Boolean)
   Dim i   As Double
   Dim CBC As Variant
   Dim Msg As Variant

   CBC = ""
   Call f_Администрирование
   For Each CBC In CommandBars("Cell").Controls("ГрафикРабот").Controls: DoEvents
      If InStr(CBC.Caption, "горячие клавиши") > 0 Then
         CBC = CBC.Caption
         Exit For
      End If
   Next CBC
   If CBC = "" Then Exit Function

   If InStr(CBC, "Отключить горячие клавиши") > 0 Then
      For i = 1 To 2 Step 1: DoEvents
         If i = 1 Then Msg = 1 Else _
         If i = 2 Then Msg = "Cell"

         If InStr(CBC, "Отключить горячие клавиши") = 0 Then Exit For
         With CommandBars(Msg).Controls("ГрафикРабот").Controls("Отключить горячие клавиши")
            .FaceId = 1087
            .Caption = "Включить горячие клавиши"
            .OnAction = "s_ГРГорячиеКлавиши"
         End With
      Next i

      'Создать
      Application.OnKey Key:="^%{l}", Procedure:=""                                                'Лист:               Ctrl+Alt  +l"
      Application.OnKey Key:="^%{t}", Procedure:=""                                                'Шаблон:             Ctrl+Alt  +t"
      Application.OnKey Key:="^%{y}", Procedure:=""                                                'Копия:              Ctrl+Alt  +y"
      Application.OnKey Key:="^%{p}", Procedure:=""                                                'Параметры:          Ctrl+Alt  +p"
      Application.OnKey Key:="^%{d}", Procedure:=""                                                'Диаграмма:          Ctrl+Alt  +d"
      Application.OnKey Key:="^%{s}", Procedure:=""                                                'Горизонт:           Ctrl+Alt  +s"
   Else

   If InStr(CBC, "Включить горячие клавиши") > 0 Then
      For i = 1 To 2 Step 1: DoEvents
         If i = 1 Then Msg = 1 Else _
         If i = 2 Then Msg = "Cell"

         If InStr(CBC, "Включить горячие клавиши") = 0 Then Exit For
         With CommandBars(Msg).Controls("ГрафикРабот").Controls("Включить горячие клавиши")
            .FaceId = 1088
            .Caption = "Отключить горячие клавиши"
            .OnAction = "s_ГРГорячиеКлавиши"
         End With
      Next i

      'Создать
      Application.OnKey Key:="^%{l}", Procedure:="s_ГРЛист"                                        'Лист:               Ctrl+Alt  +l"
      Application.OnKey Key:="^%{t}", Procedure:="s_ГРШаблон"                                      'Шаблон:             Ctrl+Alt  +t"
      Application.OnKey Key:="^%{y}", Procedure:="s_ГРКопия"                                       'Копия:              Ctrl+Alt  +y"
      Application.OnKey Key:="^%{p}", Procedure:="s_ГРСоздатьПараметры"                            'Параметры:          Ctrl+Alt  +p"
      Application.OnKey Key:="^%{d}", Procedure:="s_ГРСоздатьДиаграмма"                            'Диаграмма:          Ctrl+Alt  +d"
      Application.OnKey Key:="^%{s}", Procedure:="s_ГРСоздатьСводка"                               'Горизонт:           Ctrl+Alt  +s"
   End If
   End If
End Function



Function f_CreateMenuFaceID()                                                                      'Создание меню ЗНАЧКИ с образцами кнопок панели инструментов
   Dim CBC         As CommandBarControl
   Dim NewMenu     As CommandBarPopup
   Dim MenuItem1   As CommandBarControl
   Dim MenuItem2   As CommandBarControl
   Dim SubMenuItem As CommandBarButton
   Dim MaxCount    As Long
   Dim MaxGroup    As Long
   Dim i           As Long
   Dim j           As Long
   Dim k           As Long
   Dim n           As Long

   For Each CBC In CommandBars(1).Controls: DoEvents
      If CBC.Caption = "Значки" Then CBC.Delete
   Next CBC

   Set NewMenu = CommandBars(1).Controls.Add(Type:=msoControlPopup, Temporary:=True)
   NewMenu.Caption = "Значки"
   MaxCount = 40
   MaxGroup = 8
   n = MaxGroup * MaxCount
   For j = 0 To 20 Step 1: DoEvents
      Set MenuItem1 = NewMenu.Controls.Add(Type:=msoControlPopup)
      With MenuItem1
         .Caption = j * n + 1 & " - " & (j + 1) * n
         .BeginGroup = True
      End With
      For i = 0 To MaxGroup - 1 Step 1: DoEvents
         Set MenuItem2 = MenuItem1.Controls.Add(Type:=msoControlPopup)
         MenuItem2.Caption = 1 + j * n + MaxCount * i & " - " & j * n + MaxCount * (i + 1)
         For k = j * n + 1 + MaxCount * i To j * n + MaxCount * (i + 1) Step 1: DoEvents
            Set SubMenuItem = MenuItem2.Controls.Add(Type:=msoControlButton)
            With SubMenuItem
               .Caption = "FaceId = " & k
               .FaceId = k
            End With
            DoEvents
         Next k
         DoEvents
      Next i
   Next j
   Set NewMenu = Nothing
   Set MenuItem1 = Nothing
   Set MenuItem2 = Nothing
   Set SubMenuItem = Nothing
End Function




Оффлайн Gelium

  • Администратор
  • Сообщений: 6 724
    • Просмотр профиля
    • Gelium.net
Полезные коды EasyLanguage
« Ответ #6 : 20 Май 2016, 13:52:21 »
Может еще кому-нибудь понадобится:

Цитировать
DefineDLLfunc:"kernel32.dll",INT,"WinExec", LPSTR, INT;

...

WinExec("notepad.exe",1);

Оффлайн Станислав

  • Участник клуба
  • *
  • Сообщений: 159
    • Просмотр профиля
Полезные коды EasyLanguage
« Ответ #7 : 14 Сентябрь 2016, 11:38:16 »
Может кто-нибудь сталкивался с подобным (TS9.1)...
Создаю TextLabel TLabel, потом хочу изменить цену положения этого объекта, но увы, не работает:

If LastBarOnChart AND TLabel <> Null Then TLabel.PointValue.Price = GetAppInfo(aiHighestDispValue);

Через PrintLog проверил, не обновляется ценовой уровень положения текста.
Неужели глюк или недоработка разработчиков на таком простейшем месте?

Оффлайн Gelium

  • Администратор
  • Сообщений: 6 724
    • Просмотр профиля
    • Gelium.net
Полезные коды EasyLanguage
« Ответ #8 : 14 Сентябрь 2016, 11:55:35 »
Проверять глюк/не глюк нет времени. Судя по коду, нужно текст привязать к границам видимой области. Для этого проще сразу метку делать относительно координат окна, а не относительно цены.

Оффлайн Станислав

  • Участник клуба
  • *
  • Сообщений: 159
    • Просмотр профиля
Полезные коды EasyLanguage
« Ответ #9 : 14 Сентябрь 2016, 19:37:01 »
Текст привязывается к назначенному бару, а при перемещении диаграммы меняется масштаб и он пропадает за экраном, поэтому решил сделать простенькое обновление, но оно не работает, пробовал привязать к цене, всё равно конструкция TLabel.PointValue.Price не работает, хотя в словаре { write; read; } Придется попробовать через координаты экрана.