Программа выводит на экран много control-ов IMAGE (разноцветные прямоугольники на картинке)
Например прорисовать синий прямоугольник поверх зелёного. Пока видится только один способ - убивать control и создавать его заново.
Но уж больно не хочется так делать. Пытался воспользоваться BringWindowToTop из WinAPI, никакого эффекта.
Может у кого будут какие-нибудь идеи как управлять порядком вывода на экран, не пересоздавая control-ы?
Возникла потребность дать пользователю возможность изменять порядок вывода на экран уже созданных control-ов IMAGE.Как управлять порядком вывода control-ов IMAGE на экран?
Модератор: Дед Пахом
Правила форума
При написании вопроса или обсуждении проблемы, не забывайте указывать версию Clarion который Вы используете.
А так же пользуйтесь спец. тегами при вставке исходников!!!
При написании вопроса или обсуждении проблемы, не забывайте указывать версию Clarion который Вы используете.
А так же пользуйтесь спец. тегами при вставке исходников!!!
-
- Посетитель
- Сообщения: 25
- Зарегистрирован: 06 Апрель 2012, 20:10
- Admin
- Администратор
- Сообщения: 3959
- Зарегистрирован: 05 Июль 2005, 15:59
- Откуда: Хабаровск
- Благодарил (а): 25 раз
- Поблагодарили: 22 раза
- Контактная информация:
Re: Как управлять порядком вывода control-ов IMAGE на экран
С похмелья сидел. Придумалось такое.
Код: Выделить всё
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
Рай совершает ошибки ничуть не реже чем ад. Просто у него хорошая пресса
-
- Посетитель
- Сообщения: 25
- Зарегистрирован: 06 Апрель 2012, 20:10