Jump to content

ошибка при применении стиля к компоненту UniPopupMenu именно по событию onCreate


MSMK

Recommended Posts

Еще раз салам.

Столкнулся с такой проблемой, при создании в рантайме компонента UniPopupMenu, задаю ему стиль CSS

with TExtPopup(UniPopupMenu).MenuControl.JSInterface do
    begin
        JSConfig('cls', ['custom-menu-item']);
    end;

при инициализации выходит ошибка:
 

Screenshot_5.png

 

тестовый пример приложил

 

testMenuButton.zip

Link to comment
Share on other sites

20 minutes ago, Sherzod said:

Перенесите этот код в событие UniFormReady...

Вы меня не поняли. Я так пробовал, все работает. Мне нужно именно когда я создаю объект, в рантайм

Link to comment
Share on other sites

11 minutes ago, =GGG= said:

Вы меня не понял. Я так пробовал, все работает. Мне нужно именно когда я создаю объект, в рантайм

Именно UniPopupMenu? А я не вижу что этот объект создается в runtime.

Link to comment
Share on other sites

8 minutes ago, Sherzod said:

Именно UniPopupMenu? А я не вижу что этот объект создается в runtime.

да именно UniPopupMenu. Да я там не создаю в рантайм, но ошибка таже, если делать это в рантайме

 

Link to comment
Share on other sites

Just now, =GGG= said:

да именно UniPopupMenu. Да я там не создаю в рантайм, но ошибка таже, если делать это в рантайме

 

чт омне тестовый проект запилить для этого?

суть то понятно?

Link to comment
Share on other sites

2 hours ago, =GGG= said:

мне ждать от вас подмоги?))

procedure TMainForm.UniFormCreate(Sender: TObject);
begin
    //with TExtPopup(UniPopupMenu).MenuControl.JSInterface do
    //begin
    //    JSConfig('cls', ['custom-menu-item']);
    //end;

    MenuButton := TUniMenuButton.Create(Self);
    MenuButton.Name := 'btnMenuButton';
    MenuButton.Caption := 'Наведи на меня и я покажу тебе меню';

    MenuButton.ClientEvents.UniEvents.Values['afterCreate'] := 'function afterCreate(sender)' +
                                                                   '{'+
                                                                   '  textMetrics = new Ext.util.TextMetrics();'+
                                                                   '   valWidth = textMetrics.getWidth(sender.text);'+
                                                                   '   sender.width = valWidth + 30;'+
                                                                   '}';

    MenuButton.ClientEvents.ExtEvents.Values['mouseover'] := 'function mouseover(sender, e, eOpts)'+
                                                         '{'+
                                                         '  sender.maybeShowMenu();'+
                                                         '  sender.menu.setWidth(sender.getWidth());'+
                                                         '}';

    MenuButton.JSInterface.JSConfig('cls', ['ribbon-menu-btn']);
    
    MenuButton.JSInterface.JSAddListener('menushow', 'function(me){me.getMenu().addCls("custom-menu-item")}'); //<------------
    
    MenuButton.DropdownMenu := UniPopupMenu;
    MenuButton.Parent := pnTools;
    MenuButton.Visible := True;
end;

 

Link to comment
Share on other sites

17 hours ago, Sherzod said:
procedure TMainForm.UniFormCreate(Sender: TObject);
begin
    //with TExtPopup(UniPopupMenu).MenuControl.JSInterface do
    //begin
    //    JSConfig('cls', ['custom-menu-item']);
    //end;

    MenuButton := TUniMenuButton.Create(Self);
    MenuButton.Name := 'btnMenuButton';
    MenuButton.Caption := 'Наведи на меня и я покажу тебе меню';

    MenuButton.ClientEvents.UniEvents.Values['afterCreate'] := 'function afterCreate(sender)' +
                                                                   '{'+
                                                                   '  textMetrics = new Ext.util.TextMetrics();'+
                                                                   '   valWidth = textMetrics.getWidth(sender.text);'+
                                                                   '   sender.width = valWidth + 30;'+
                                                                   '}';

    MenuButton.ClientEvents.ExtEvents.Values['mouseover'] := 'function mouseover(sender, e, eOpts)'+
                                                         '{'+
                                                         '  sender.maybeShowMenu();'+
                                                         '  sender.menu.setWidth(sender.getWidth());'+
                                                         '}';

    MenuButton.JSInterface.JSConfig('cls', ['ribbon-menu-btn']);
    
    MenuButton.JSInterface.JSAddListener('menushow', 'function(me){me.getMenu().addCls("custom-menu-item")}'); //<------------
    
    MenuButton.DropdownMenu := UniPopupMenu;
    MenuButton.Parent := pnTools;
    MenuButton.Visible := True;
end;

 

спасибо огромное

Link to comment
Share on other sites

а подскажите еще, как убрать тень у выпадающего меню?

Прововал так

.custom-menu {
    box-shadow: none !important;;
}

не помогло.

И еще сделать выпадающее меню белым цветом.

Пробовал так

.custom-menu-item .x-menu-body-default {
  background: #fff !important;;
  padding: 2px;
}

тоже не помогло

Screenshot_6.png

Screenshot_7.png

Link to comment
Share on other sites

1 hour ago, =GGG= said:

а подскажите еще, как убрать тень у выпадающего меню?

Попробуйте:

MenuButton.JSInterface.JSAddListener('menushow', 'function(me){Ext.defer(function(){me.getMenu().getEl().shadow.hide()}, 10); me.getMenu().addCls("custom-menu-item")}');

 

Link to comment
Share on other sites

4 hours ago, Sherzod said:

Попробуйте:

MenuButton.JSInterface.JSAddListener('menushow', 'function(me){Ext.defer(function(){me.getMenu().getEl().shadow.hide()}, 10); me.getMenu().addCls("custom-menu-item")}');

 

спасибо

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...