Как изменить ширину плавающей паллеты в сценариях DM - PullRequest
0 голосов
/ 22 ноября 2018

Теперь я пытаюсь написать сценарий DM для отображения плавающей палитры, как показано в следующем коде.Однако, например, длинная строковая метка, включенная в этот код, выступает из окна палитры.Итак, мне интересно, как изменить размер окна палитры (т. Е. Ширину в этом случае).На самом деле, некоторые официальные палитры Gatan, такие как «Camera View», «Camera Acquire» и т. Д., Кажутся шире, чем палитра, созданная этим кодом.Будет оценено, если вы поделитесь своей мудростью.Заранее большое спасибо.

Class MyDialog: UIFrame
{
    TagGroup createDLGtgs( Object self ){
        TagGroup DLGtgs, DLGItems
        DLGtgs = DLGCreateDialog( "Test Dialog", DLGItems )
        DLGItems.DLGAddElement( DLGCreateLabel( "Test of Gatan DigitalMicrograph scripting" ) )
        DLGItems.DLGAddElement( DLGCreatePushButton( "OK", "testOK" ) )
        return DLGtgs
    }
//
    Object Init( Object self ){
        self.super.Init( self.createDLGtgs() )
        return self
    }
//
    Void testOK( Object self ){
        OKDialog( "Hello!" )
    }
}
//
Object DialogOBJ = Alloc( MyDialog ).Init()
String DialogName = "Test Dialog"
String toolName = "Test Tool"
RegisterScriptPalette( DialogOBJ, DialogName, toolName )
OpenGadgetPanel(toolName)

1 Ответ

0 голосов
/ 22 ноября 2018

Имейте в виду, что ситуация с плавающими палитрами отличается между GMS 2.x и GMS 3.x.
По существу, зарегистрированные плавающие палитры постепенно исчезают в GMS 3.x с новым пользовательским интерфейсом,Они все еще поддерживаются в некоторой степени, но не все функциональные возможности остаются, и некоторое поведение глючит.Для GMS 3.x обычно лучше запускать скриптовые диалоги как модальные или немодальные диалоги и больше не устанавливать их как палитры .


Этот ответ здесь для GMS 2.x (протестировано с GMS 2.3.3)

Вам необходимо добавить теги позиции в tagGroup, описывающую диалог.Вы делаете это в своем примере кода вопроса выше, добавляя к методу TagGroup createDLGtgs( Object self ):

TagGroup positionTgs = DLGBuildPositionFromApplication()
positionTgs.TagGroupSetTagAsString( "Width", "Medium" ) 
DLGtgs.DLGPosition( positionTgs )

Допустимые строковые значения:

  • "Small" Как слевапалитры инструментов GMS 2.x.
  • "Medium" Как и палитры инструментов GMS 2.x
  • "Wide" очень широкие

Однако есть несколько дополнительных опций для тегов position , но они не будут применяться к плавающим палитрам, только к обычным немодальным диалогам .Вы можете установить ширину и высоту окна либо со значением абсолютный размер , либо позволить ему автоматически определиться по размеру содержимого.Ниже приведен пример: * * * тысяча сорок-девять 1050 *

В приведенном выше DLGBuildPositionFromApplication() устанавливает окно приложения в качестве опорного кадра для диалога.Затем можно определить положение диалогового окна слева | центр | справа и сверху | центр | снизу к этому кадру, используя команду DLGBuildRelativePosition() с -1|0|1 в качестве соответствующего параметра, как в примере:

class CMyClass : UIFrame
{
    void InitAndShow( object self ) {
        Taggroup DLG,DLGItems
        DLG = DLGCreateDialog("Test",DLGItems)
        DLGItems.DLGAddElement( DLGCreateLabel( "Just some long text for extra width" ))
        DLGItems.DLGAddElement( DLGCreateLabel( "A second line" ))

        TagGroup positionTgs = DLGBuildPositionFromApplication()
        positionTgs.TagGroupSetTagAsTagGroup( "Width", DLGBuildAutoSize() )
        positionTgs.TagGroupSetTagAsTagGroup( "Height", DLGBuildAutoSize() )

        // Appear top-right     
        positionTgs.TagGroupSetTagAsTagGroup( "X", DLGBuildRelativePosition( "Inside", 1 ) )
        positionTgs.TagGroupSetTagAsTagGroup( "Y", DLGBuildRelativePosition( "Inside", -1 ) )
        DLG.DLGPosition( positionTgs )

        self.super.Init( DLG ).Display("Test")
    }
}

Alloc(CMyClass).InitAndShow()

Опорная рамка не обязательно должна быть окном приложения.Вы можете указать любое значение, используя DLGBuildPosition(), что позволяет использовать прямоугольник окна, а затем размещать диалоговое окно справа от него.И с опорной рамой, можно также размер диалогового окна относительно что использование DLGBuildMatchSize(), как показано в следующем примере:

class CMyClass : UIFrame
{
    void InitAndShow( object self, documentWindow win ) {
        Taggroup DLG,DLGItems
        DLG = DLGCreateDialog("Test",DLGItems)
        DLGItems.DLGAddElement( DLGCreateLabel( "Just some long text for extra width" ))
        DLGItems.DLGAddElement( DLGCreateLabel( "A second line" ))

        number t,l,b,r
        win.WindowGetFrameBounds(t,l,b,r)
        TagGroup positionTgs = DLGBuildPosition(t,l,b,r)
        positionTgs.TagGroupSetTagAsTagGroup( "Width", DLGBuildAutoSize() )
        positionTgs.TagGroupSetTagAsTagGroup( "Height", DLGBuildMatchSize() )

        // Appear center-right outside the window
        positionTgs.TagGroupSetTagAsTagGroup( "X", DLGBuildRelativePosition( "Outside", 1 ) )
        positionTgs.TagGroupSetTagAsTagGroup( "Y", DLGBuildRelativePosition( "Inside", 0 ) )
        DLG.DLGPosition( positionTgs )

        self.super.Init( DLG ).Display("Test")
    }
}

image img := RealImage("test",4,100,100)
img.ShowImage()
documentWindow win = img.ImageGetOrCreateImageDocument().ImageDocumentGetWindow()
Alloc(CMyClass).InitAndShow(win)
...