Имейте в виду, что ситуация с плавающими палитрами отличается между 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)