Как управлять порядком вывода control-ов IMAGE на экран?

Clarion, Clarion 7

Модератор: Дед Пахом

Правила форума
При написании вопроса или обсуждении проблемы, не забывайте указывать версию Clarion который Вы используете.
А так же пользуйтесь спец. тегами при вставке исходников!!!
Ответить
Nibirjanin
Посетитель
Сообщения: 25
Зарегистрирован: 06 Апрель 2012, 20:10

Как управлять порядком вывода control-ов IMAGE на экран?

Сообщение Nibirjanin »

Программа выводит на экран много control-ов IMAGE (разноцветные прямоугольники на картинке)
cla.jpg
Возникла потребность дать пользователю возможность изменять порядок вывода на экран уже созданных control-ов IMAGE.
Например прорисовать синий прямоугольник поверх зелёного. Пока видится только один способ - убивать control и создавать его заново.
Но уж больно не хочется так делать. Пытался воспользоваться BringWindowToTop из WinAPI, никакого эффекта.
Может у кого будут какие-нибудь идеи как управлять порядком вывода на экран, не пересоздавая control-ы?
Аватара пользователя
Admin
Администратор
Сообщения: 3959
Зарегистрирован: 05 Июль 2005, 15:59
Откуда: Хабаровск
Благодарил (а): 25 раз
Поблагодарили: 22 раза
Контактная информация:

Re: Как управлять порядком вывода control-ов IMAGE на экран

Сообщение Admin »

С похмелья сидел. Придумалось такое.

Код: Выделить всё

               PROGRAM
               MAP
               END

ImagesQueue    QUEUE,TYPE
id               LONG
feq              LONG
               END

MoveImages     CLASS,TYPE
List             &ImagesQueue
Construct        PROCEDURE
Destruct         PROCEDURE
Add              PROCEDURE(LONG id, LONG feq)
MoveUp           PROCEDURE(LONG id)
MoveDown         PROCEDURE(LONG id)
SwapProperty     PROCEDURE(LONG feq1, LONG feq2)
               END

Window WINDOW('Move images'),AT(,,344,238),FONT('Tahoma',,,),CENTER,GRAY,RESIZE
       GROUP('Image 1'),AT(252,6,83,49),USE(?Group1),BOXED
         BUTTON('Move Up'),AT(279,18,45,14),USE(?ButtonUp)
         BUTTON('Move Down'),AT(279,33,45,14),USE(?ButtonDown)
       END
       PROMPT('1'),AT(117,21),USE(?Prompt1:1)
       PROMPT('2'),AT(144,54),USE(?Prompt1:2)
       GROUP('Image 3'),AT(252,60,83,49),USE(?Group1:1),BOXED
         BUTTON('Move Up'),AT(279,72,45,14),USE(?ButtonUp1)
         BUTTON('Move Down'),AT(279,87,45,14),USE(?ButtonDown1)
       END
       PROMPT('3'),AT(174,84),USE(?Prompt1:3)
       PROMPT('4'),AT(201,114),USE(?Prompt1:4)
     END

c    LONG

mi   MoveImages


  CODE
  OPEN(Window)
  Window{PROP:Buffer} = 1
  ACCEPT
    CASE ACCEPTED()
    OF ?ButtonUp
      mi.MoveUp(1)
    OF ?ButtonDown
      mi.MoveDown(1)
    OF ?ButtonUp1
      mi.MoveUp(3)
    OF ?ButtonDown1
      mi.MoveDown(3)
    END
    CASE EVENT()
    OF EVENT:OpenWindow
      c = CREATE(0, CREATE:Image)
      (c){PROP:Hide} = FALSE
      (c){PROP:Text} = 'VF_ac13.jpg'
      (c){PROP:XPos} = 10
      (c){PROP:YPos} = 10
      (c){PROP:Width} = 100
      (c){PROP:Height} = 100
      (c){PROP:Tiled} = 1
      mi.Add(1, c)
      c = CREATE(0, CREATE:Image)
      (c){PROP:Hide} = FALSE
      (c){PROP:Text} = 'VF_pois01a.jpg'
      (c){PROP:XPos} = 40
      (c){PROP:YPos} = 40
      (c){PROP:Width} = 100
      (c){PROP:Height} = 100
      (c){PROP:Tiled} = 1
      mi.Add(2, c)
      c = CREATE(0, CREATE:Image)
      (c){PROP:Hide} = FALSE
      (c){PROP:Text} = 'VF_pois01b.jpg'
      (c){PROP:XPos} = 70
      (c){PROP:YPos} = 70
      (c){PROP:Width} = 100
      (c){PROP:Height} = 100
      (c){PROP:Tiled} = 1
      mi.Add(3, c)
      c = CREATE(0, CREATE:Image)
      (c){PROP:Hide} = FALSE
      (c){PROP:Text} = 'VF_pattern33.jpg'
      (c){PROP:XPos} = 100
      (c){PROP:YPos} = 100
      (c){PROP:Width} = 100
      (c){PROP:Height} = 100
      (c){PROP:Tiled} = 1
      mi.Add(999, c)
    END
  END
  CLOSE(Window)



MoveImages.Construct        PROCEDURE
  CODE
  SELF.List &= NEW ImagesQueue

MoveImages.Destruct         PROCEDURE
  CODE
  FREE(SELF.List)
  DISPOSE(SELF.List)

MoveImages.Add              PROCEDURE(LONG id, LONG feq)
  CODE
  SELF.List.id = id
  SELF.List.feq = feq
  ADD(SELF.List)

MoveImages.MoveUp           PROCEDURE(LONG id)
pos                         LONG
feq1                        LONG
feq2                        LONG
id1                         LONG
id2                         LONG
  CODE
  SELF.List.id = id
  GET(SELF.List, SELF.List.id)
  IF NOT ERRORCODE()
    feq1 = SELF.List.feq
    id1 = SELF.List.id
    pos = POINTER(SELF.List)
    GET(SELF.List, pos+1)
    IF NOT ERRORCODE()
      feq2 = SELF.List.feq
      id2 = SELF.List.id
      SELF.SwapProperty(feq1,feq2)
      SELF.List.id = id1
      PUT(SELF.List)
      GET(SELF.List, pos)
      SELF.List.id = id2
      PUT(SELF.List)
    END
  END

MoveImages.MoveDown         PROCEDURE(LONG id)
pos                         LONG
feq1                        LONG
feq2                        LONG
id1                         LONG
id2                         LONG
  CODE
  SELF.List.id = id
  GET(SELF.List, SELF.List.id)
  IF NOT ERRORCODE()
    feq1 = SELF.List.feq
    id1 = SELF.List.id
    pos = POINTER(SELF.List)
    GET(SELF.List, pos-1)
    IF NOT ERRORCODE()
      feq2 = SELF.List.feq
      id2 = SELF.List.id
      SELF.SwapProperty(feq1,feq2)
      SELF.List.id = id1
      PUT(SELF.List)
      GET(SELF.List, pos)
      SELF.List.id = id2
      PUT(SELF.List)
    END
  END

MoveImages.SwapProperty     PROCEDURE(LONG feq1, LONG feq2)
ip                          GROUP
XPos                          LONG
YPos                          LONG
Width                         LONG
Height                        LONG
Text                          STRING(255)
                            END
  CODE
  ip.XPos = feq1{PROP:XPos}
  ip.YPos = feq1{PROP:YPos}
  ip.Width = feq1{PROP:Width}
  ip.Height = feq1{PROP:Height}
  ip.Text = feq1{PROP:Text}

  feq1{PROP:XPos} = feq2{PROP:XPos}
  feq1{PROP:YPos} = feq2{PROP:YPos}
  feq1{PROP:Width} = feq2{PROP:Width}
  feq1{PROP:Height} = feq2{PROP:Height}
  feq1{PROP:Text} = feq2{PROP:Text}

  feq2{PROP:XPos} = ip.XPos
  feq2{PROP:YPos} = ip.YPos
  feq2{PROP:Width} = ip.Width
  feq2{PROP:Height} = ip.Height
  feq2{PROP:Text} = ip.Text
Как то так ...
Как то так ...
MoveImages.zip
move images top top & bottom & anywhere :)
(70.91 КБ) 117 скачиваний
Рай совершает ошибки ничуть не реже чем ад. Просто у него хорошая пресса
Nibirjanin
Посетитель
Сообщения: 25
Зарегистрирован: 06 Апрель 2012, 20:10

Re: Как управлять порядком вывода control-ов IMAGE на экран

Сообщение Nibirjanin »

Хорошая идея! Спасибо!
Ответить