Автор Тема: EasyLanguage  (Прочитано 52432 раз)

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

Оффлайн Gelium

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

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

Gennadiy

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

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

  • Участник клуба
  • *
  • Сообщений: 183
    • Просмотр профиля
EasyLanguage
« Ответ #122 : 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

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

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

...

WinExec("notepad.exe",1);

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

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

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

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

Оффлайн Gelium

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

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

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

Оффлайн Gelium

  • Администратор
  • Сообщений: 9 419
    • Просмотр профиля
    • Gelium.net
EasyLanguage
« Ответ #127 : 14 Сентября 2016, 20:01:04 »
Баг обходится так: mText.PointValue = DTPoint.Create(BarDateTime, c);

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

  • Участник клуба
  • *
  • Сообщений: 183
    • Просмотр профиля
EasyLanguage
« Ответ #128 : 14 Сентября 2016, 20:52:02 »
Баг обходится так: mText.PointValue = DTPoint.Create(BarDateTime, c);

Спасибо! :)

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

  • Участник клуба
  • *
  • Сообщений: 183
    • Просмотр профиля
EasyLanguage
« Ответ #129 : 16 Сентября 2016, 12:12:53 »
Может кто-нибудь сталкивался, существует ли возможность штатной установки трендовой линии на одной компрессии данных с автоматической отрисовкой её на другой компрессии данных этого же актива в разных окнах? или это опция возможна только посредством программирования? Начал программировать, и задумался, может это уже есть, но я пока не нашел где..