Как выбрать открытое изображение с DLGCreateImagePopup в созданном диалоге - PullRequest
1 голос
/ 30 сентября 2019

Я создал диалог с DLGCreateImagePopup, чтобы выбрать открытое изображение. Но после выбора изображения я ничего не могу сделать для этого изображения. Как получить идентификатор изображения или название выбранного изображения?

1 Ответ

0 голосов
/ 30 сентября 2019

Если вы хотите сделать это в виде диалогового окна (т.е. получить изображение после нажатия кнопки ОК), вы можете сделать это следующим образом:

Class CMyDLG : UIframe
{
       TagGroup DLG,DLGItems,imgPop        
       object Init(object self)
       {
              DLG = DLGCreateDialog("Test",DLGItems)
              imgPop = DLGCreateImagePopup()
              DLGItems.DLGAddElement( imgPop )       
              return self.super.init(DLG)
       }

       image GetSelectedImage( object self )
       {
              string selectedImageLabel
              imgPop.DLGGetValue(selectedImageLabel)
              Result("\n" + selectedImageLabel)
              // From the string, get the label
              string label = selectedImageLabel.left( selectedImageLabel.find(":") )
              Result("\n" + label)
              // From label, return image
              return FindImageByLabel(label)
       }
}

// main
{
       object dlg = Alloc(CMyDLG).Init()
       dlg.Pose()
       image selected := dlg.GetSelectedImage()
       if ( selected.ImageIsValid() )
              selected.SetName( "Selected" + random())
       else Throw( "Error, nothing selected." )
}

Если вы хотите что-то сделать с изображениемв то время как диалоговое окно все еще отображается (немодальное диалоговое окно), вам нужно будет прикрепить метод типа OnChanged к элементу, как показано в:

Class CMyDLG : UIframe
{
       TagGroup DLG,DLGItems,imgPop        
        void FieldChanged(object self, taggroup tg)
        {
              string selectedImageLabel
               tg.DLGGetValue(selectedImageLabel)
              Result("\n" + selectedImageLabel)
              // From the string, get the label
              string label = selectedImageLabel.left( selectedImageLabel.find(":") )
              Result("\n" + label)
              // From label, return image
              image selected := FindImageByLabel(label)
              if ( selected.ImageIsValid() )
                  selected.SetName( "Selected" + random())
              else Throw( "Error, nothing selected." )
       }

        object Init(object self)
       {
              DLG = DLGCreateDialog("Test",DLGItems)
              imgPop = DLGCreateImagePopup().DLGChangedMethod("FieldChanged")
              DLGItems.DLGAddElement( imgPop )       
              return self.super.init(DLG)
       }

}

// main
{
    Alloc(CMyDLG).Init().display("myDialog")   
}

Обратите внимание, что когда я тестировал этот скрипт напоследняя версия GMS 3, я заметил ошибку . Метод Changed (и, следовательно, фактический выбор), по-видимому, происходит только при обращении к раскрывающемуся списку во второй раз .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...