Jump to content

EOR

uniGUI Subscriber
  • Posts

    27
  • Joined

  • Last visited

Posts posted by EOR

  1. Все заработало. Забыл отписаться просто.

    image.png?_uid=17948412&hid=1.1.2&ids=174795960537346280&name=image.png&yandex_class=yandex_inline_content_320.mail:17948412.E4535865:1657647339205724742513715063777_1.1.2_174795960537346280

    DFM

    object MyUniForm: TUniForm
      Left = 0
      Top = 0
      Width = 500
      Height = 400
      Color = clSkyBlue
      object UniMemo1: TUniMemo
        Left = 10
        Top = 10
        Width = 200
        Height = 80
        Hint = ''
        Color = clMoneyGreen
        Lines.Strings = (
          'UniMemo1'
          'UniMemo1'
          'UniMemo1'
          'UniMemo1'
          'UniMemo1')
        TabOrder = 0
      end
      object Label1: TUniLabel
        Left = 220
        Top = 10
        Width = 31
        Height = 13
        Caption = 'Label1'
      end
      object Button1: TUniButton
        Left = 220
        Top = 30
        Width = 75
        Height = 25
        Caption = 'Button1'
        TabOrder = 0
        OnClick = UniButton1Click <-- не работает
      end
      object ListBox1: TUniListBox
        Left = 10
        Top = 110
        Width = 200
        Height = 60
        TabOrder = 1
        Items.Strings = (
          'ListBox1'
          'ListBox1'
          'ListBox1')  
      end
    end

     

    Если интересно выложу демку.

    Только пока с обработчиками событий на контролах не разобрался. Чего то там пока все глухо :( 

     

  2. Приветствую всех,

    Пытаюсь реализовать сабж.

    Подгрузка ресурса (панельки с мемо на ней) проходит нормально без ошибок, но в браузере почему-то отображается не правильно.

    image.png.bcaa8050c61631219131045b7a2c9240.png

    Вот содержимое MyUniPanel.dfm

    object MyUniPanel: TUniPanel
      Left = 0
      Top = 0
      Width = 500
      Height = 400
      object UniMemo1: TUniMemo
        Left = 10
        Top = 10
        Width = 200
        Height = 100
        Hint = ''
        Lines.Strings = (
          'UniMemo1'
          'UniMemo1'
          'UniMemo1'
          'UniMemo1'
          'UniMemo1')
        TabOrder = 0
      end
    end

    Вот код, который подгружает панель

    procedure TMainForm.UniButton1Click(Sender: TObject);
    var
      StrStream: TStringStream;
      Component: TUniPanel;
    begin
      StrStream := TStringStream.Create;
      try
        StrStream.LoadFromFile(UniServerModule.FilesFolderPath + 'MyUniPanel.dfm');
        Component := TUniPanel(StringToComponent(StrStream.DataString));
        Component.Parent := MainForm;
        Component.Align := alClient;
        Application.InsertComponent(Component);
      finally
        StrStream.Free;
      end;
    end;

    Что я делаю не так???

    Заранее спасибо. Тестовый проект прикладываю.

     

    UniGUI_DFM_Load_Test.zip

  3. 37 minutes ago, x11 said:

    Тут ничего не понял про

    ?

    Это было просто для примера. Чтобы понять что у UniMemo1лежит в VCLControl.

    Теоретически у компонентов UniGUI  есть ссылка на компонент, отображаемый в дизайнере Delphi IDE вместо реального компонента UniGUI.  То есть вместо TuniMemo будет отображен TMemo и т.п.

    Согласно документации http://www.unigui.com/doc/online_help/api/!!MEMBERTYPE_Properties_uniGUIBaseClasses_TUniGUIBaseControl.html

    Свойство 

    VCLControl is a design time instance of a VCL control which visually represent UniGUI control in designer. This control is provided to enhance developer's experience when designing forms. For some controls such as TUniDBGrid VCLControl also provide additional functionalities such as column re-sizing.

     

    Что примерно означает: VCLControl - это экземпляр элемента управления VCL во время разработки, который визуально представляет элемент управления UniGUI в дизайнере. Этот элемент управления предназначен для повышения удобства разработки форм для разработчиков. Для некоторых элементов управления, таких как TUniDBGrid, VCLControl также предоставляет дополнительные функции, такие как изменение размера столбца.

    Таким образом здесь должны быть ссылки на экземпляры  TMemo, TButton и т.д. а здесь мы имеем TCustomTransparentControl.

    Это не работает, или я просто не умею его готовить :)

    ЗЫ. А вот в дизайнере Delphi IDE это работает 

  4. LMD Designer использует для редактирования формы в общем случае потомков обычной стандартной формы TForm.

    Поэтому вопрос состоит в том, что как нормально отобразить на обычной форме TForm контролы UiniGUI в том виде в котором мы его видим в редакторе форм Delphi IDE.

    image.thumb.png.38c2abb6e98c559d8a34c910d2c3f666.png 

    Но при запущенном приложении отображение нормально не происходит:

    image.png.ea1624f2350a84f5c55b950cc84d6a83.png

    Может есть какое-то свойство компонента UniGUI которое отвечает за отображение его в дизайн тайме типа VCLControl, которое почему-то не работает.

    В выражении 

     TMemo(UniMemo1.VCLControl).Lines.Text := '111'; //  TMemo(UniMemo1.VCLControl).Lines = nil

    Что как мне кажется не правильно. Нет?

    И вообще при вставке любого UniGUI компонента с палитры UniGUI Standard (см. рисунок) выясняется, что имя класса (c.VCLControl.ClassName) у всех один и тот же: TCustomTransparentControl

    image.png.f6946a09f57ceb8dd7fae4873e51b9c2.png

    И соответственно нормально  не приводится к соответствующим типам TMemo, TButton

     

  5. Может кто подскажет почему в IDE Delphi в режиме проектирование формы UniGUI uniMemo1 - отображается нормально.

    image.png.c587b05d1d495f51e8ad653cfb9891f6.png

    Тот же контрол  UniGUI uniMemo1 после запуска приложения

    image.png.b24ffbfe4b77f1cf6e2c667462e91f9e.png

     

    Как включить отображение  UniGUI uniMemo1 на обычной форме в режиме VCLMode = true на обычной VCL форме TForm??? 

    Спасибо.

  6. Пробую написать редактор форм для UniGUI контролов для последующей динамической подгрузки файла формы в run-time. Но после размещения на форме дизайнера некоторые компоненты UniGUI не правильно отображаются (только как рамки).

    Контролы UniGUI  - в design mode.

    Свойства VCLMode = true, WebMode = false,  csDesigning in ComponentState = true

    Как сделать нормальное отображение компонента при вставке и изменении свойств в инспекторе объектов?

    image.png.056cc7955aa453f08ab16c7cb5119eea.png

     

    Редактор форм написан с использованием пробной версии LMD DesignPack https://www.lmdinnovative.com/products/vcl/lmddesignpack/

    Демо проект UniGUIandLMDDesigner.zip работает только при запущеном Delphi

     

    Заранее спасибо.

     

     

  7. Вопрос с отображением CheckBox'ов поверх грида решен.

    Добавляем обработчик в UniDBVerticalGrid / ClientEvent / Extevent / OnAfterrender:

    function OnAfterrender(sender)
    { 
      sender.getEl().setStyle('z-index','0');
    }

    image.png?_uid=17948412&hid=1.1.3&ids=172544160723656410&name=image.png&yandex_class=yandex_inline_content_320.mail:17948412.E3453857:21784794569396401420898323418_1.1.3_172544160723656410

    Остался последний вопрос: 

    Как сделать отступ текста в заголовке uniDBGridColumn чтобы убрать наложение текста и CheckBox'ов?

    Спасибо заранее.

  8. Создаю динамически CheckBox'ы:

      // Создаем чекбоксы
      for i := 0 to UniDBVerticalGridVars.DBColumns.Count - 1 do
      begin
        uniDBGridColumn := TUniDBGridColumn(UniDBVerticalGridVars.DBColumns[i]);
        //
        if DataController.MacroList.Count > 0 then
        begin
          CheckBox := TUniCheckBox.Create(Self);
          with TUniCheckBox(InsertControl(CheckBox)) do
          begin;
            Top := 20 + i * 10; // Как найти смещение для попадания в нужную строку?
            Left := 20 + i * 10; //
            OnChange := UniCheckBoxChange;        
          end;
        end;
      end;

    CheckBox'ы создаются но они перекрываются UniDBVerticalGrid'ом, то есть находятся под ним и невидимы. Методы CheckBox.BringToFront и   UniDBVerticalGrid.SendToBack не работают.

    image.png.182550e5ee961183325ecf34abf12554.pngimage.png.6d10471fc8cfec7fd23dadd684334151.png 

    ВОПРОСЫ:

    1. Как отобразить CheckBox'ы поверх грида???

    2. Как найти смещение для попадания CheckBox'а в нужную строку?

    3. Как сделать отступ в заголовке uniDBGridColumn чтобы освободить место для CheckBox'а?

    Спасибо заранее.

     

    UPD: Пока увеличил отступ от левого края у грида. CheckBox'ы видно, но выглядит это очень коряво :) Вопросы, заданные выше, все еще актуальны.

    image.png.0538ccbe163cd18f21fc9fd5d1170aa4.png

     

    UPD2: Пробую изменить z-index для UniDBVerticalGrid:

    UniSession.AddJS('Ext.onReady(function(){'+UniDBVerticalGrid.JSName+'.getEl().setStyle(''z-index'','+IntToStr(99999)+')});');

    Получаю ошибку:

    image.png.e9d51ee1a578535730a21333bb38874e.png

    UniGUI 1.90.0.1526

    Что делать???

     

  9. Здравствуйте.

    Существует две реализации одного проекта "Desktop" версия и "Web" версия.

    Для реализации функционала работы с вводом параметров запроса в базу данных в Web версии проекта необходимо отобразить CheckBox в заголовке поля (TUniDBGridColumn).

    image.png.74b08afc1a635fce50ef9c9dc57bb0f3.png

    Например вот так это реализовано в "Desktop" версии проекта (используется TcxDBVerticalGrid - DevExpress VCL):

    image.png.bbb3aceb0afc66e0e87884789a7669b1.png

    ВОПРОСЫ:

    1. Есть ли возможность реализовать такое в UniDBVerticalGrid? Обходные пути через ClientEvents -> ExtEvents?

    2. Как обработать изменение состояния CheckBox (OnChange)?

     

    Заранее спасибо.

  10. On 11/22/2019 at 7:45 PM, Sherzod said:

    Не понятно, Вы делаете изменения в dfm файле? 

    Нет конечно это я для наглядности привел. Я делаю так:

    image.png.95ad0e5742c2cb17b75d61528e0cb046.png

    За ссылку спасибо. Посмотрим.

  11. Работает если перед "=" поставить пробел.

    Main.dfm

    object UniDBTreeGrid1: TUniDBTreeGrid
    	...
    	LayoutConfig.Cls = ' = custom-row'
    	...

    image.png.509f4ea2e18e7bf0d17a962a71bc826c.png

    Большое спасибо.

    И чтобы не плодить темы еще вопрос: Следующий код в моем тестовом приложении (исходники прикладывал) не работает в FireFox.
    Ошибка: document.execCommand('cut/' copy) было отклонено, поскольку оно не вызывалось из короткого запуска обработчика событий, созданного пользователем

    procedure TMainForm.UniFormKeyUp(Sender: TObject; var Key: Word;
      Shift: TShiftState);
    begin
      // Ctrl+C
      if (Key = 67 {'C'}) and (ssCtrl in Shift) then begin
        UniSession.AddJS(
          // Не работает в FireFox
          // Ошибка: document.execCommand('cut/' copy) было отклонено, поскольку оно не вызывалось из короткого запуска обработчика событий, созданного пользователем
          //Почему?
          ' var focus = document.activeElement;' +
          ' var textarea = document.getElementById("' + UniMemo1.JSName + '_id-inputEl"); '+
          ' textarea.select(); '+
          ' try { '+
          ' var successful = document.execCommand(''copy''); '+
          ' if(successful) console.log(''Copied!''); '+
          ' else console.log(''Unable to copy!''); '+
          ' } catch (err) { '+
          ' console.log(''Unsupported Browser!''); '+
          ' } ' +
          ' focus.focus(); // Возвращаем фокус туда, где был'
        );
      end;
    end;

    Почему?

     

  12. Здравствуйте,

    Подготовил приложение, демонстрирующее проблему. Версия UniGUI 1509.

    Описание того, что уже сделано :

    1. UniDBTreeGrid1: ClientEvents -> UniEvents -> beforeInit

    config.selModel = {
            type: 'checkboxmodel',
            mode: 'MULTI'
        };

    2. UniDBTreeGrid1.Options -> dgDontShowSelected=True (Если этого не сделать, то при получении данных в UniDBTreeGrid1 получим ошибку:  Could not set cell position: row: [0], column:[1] :Cannot read property 'store' of undefined.)

    3. Выделенные строки для передачи в буфер обмена. В версии 1506 не нормально работало. Выделенные строки выделялись и сразу выделение снималось и визуально выделенных строк не было видно так как галочка с checkbox'а тоже снималась. После обновления до версии 1509 эта проблема ушла. Выделение остается постоянным и не снимается галочка с checkbox'а.

    По CTRL+C содержимое ячеек копируется в буфер обмена:

    image.png.c4756f0e2bef05c963d8323a505c3915.png

    Обработчики  UniDBTreeGrid1: ClientEvents -> ExtEvents -> select/deselect формируются динамически.

    4. Пытаюсь изменить стиль выделенных ячеек через UniServerModule.CustomCSS:

    /* DBTreeGrid Selected row*/
    .custom-row .x-grid-cell {
       background-color: #B299CC !important;
    }
    .custom-row .x-grid-cell-selected  {
       background-color: greenyellow !important;
    }

    Стили назначаются строкам динамически в событиях UniDBTreeGrid1: ClientEvents -> ExtEvents -> select/deselect

    Но стиль CSS не  применяется к выделенным строкам :( 

    image.png.8752037ff29d530409ac2b7297cc2df4.png

    5. В связи с этим вопрос несколько меняется. Как теперь мне изменить цвет выделенных ячеек на кастомный? Что-нибудь типа например такого:

    post-906-0-73057100-1515063119.png (817×348)

     

    Заранее спасибо.

     

    DBTreeGrid_Multiselect.zip

    • Like 1
  13. 22 hours ago, Sherzod said:

    Здравствуйте,

    Вы можете прикрепить простой тестовый случай, то что сделано на данный момент?!

    Хорошо. Завтра подготовлю приложение демонстрирующее проблему и описание того, что уже сделано.

  14. Здравствуйте.

    Возникла необходимость воспользоваться компонентом TUniDBTreeGrid. Пользователь должен выделить мышкой несколько строк в UniDBTreeGrid и скопировать их в буфер обмена для последующей вставки в MS World, MS Excel или куда то еще.

    Я прочитал по интересующему вопросу топики (темы) 

     и 

    Сделал как там советовали и все заработало, но не так как ожидалось. То есть я получаю в буфер обмена нужные данные, но пользователь не видит, какие строки он выделил в UniDBTreeGrid. То есть нет визуального отображения выделенных строк.

    Это понятно так как включена опция UniDBTreeGrid.Options -> dgDontShowSelected=True

    Попробовал подкрашивать выделенные строки с помощью CustomCSS как описано здесь: 

     Но тоже ничего не вышло. Стиль "custom-row" вроде бы применяется (видно в отладчике Chrome), но изменения не отображаются в браузере.

    Подскажите пожалуйста как мне решить эту проблему с отображением выделенных (selected) строк в компоненте UniDBTreeGrid.

    Заранее спасибо.

  15. Здравствуйте,

    Есть необходимость вызывать внешнюю функцию из двух разных форм. Как сделать универсальный ajaxRequest, чтобы передавая в параметре этой функции имя формы получать правильную форму- получатель? Что-нибудь такое:

    Delphi:
    
    ...
    UniSession.AddJS('checkPlugin(' + Self.Name + ')');
    
    Внешний JS:
    
    function checkPlugin (form_name) {
    ....
    ajaxRequest(Ext.getForm(form_name).form, "EventName", ["result=" + result]);
    ....
    }

    или так не получится?

    Спасибо.

     

  16. Здравствуйте

    Возникает ошибка "Invalid or unexpected token" при попытке вызвать javascript функцию из внешнего файла подключенного в CustomFiles

    procedure TForm1.UniButton1Click(Sender: TObject);
    var
      s,s1,s2: string;
    begin
      try
        s1 := StringOfChar('Z', 100000); // Long String 100 000 chars
        s2 := EncodeString(s1);          //Base64 string 100 000 chars
        s := 'ExternalFuncWithParameters(0, "' + s2 + '")';
        UniSession.SendResponse(s, True);
      finally
    
      end;
    end;

     image.png.47142ecb318d01162b3a5d8fd3500c49.png

    Такая же ошибка при использовании UniSession.AddJS(s);

    Прошу помощи клуба. Заранее спасибо

     

×
×
  • Create New...