|
|
|
Добавление окна в систюменю и его выбор
|
|||
|---|---|---|---|
|
#18+
Всем доброго дня. Всегда использовал сл. код для добавления окна в системное меню: *-- Добавление наименования окна в меню LOCAL lnBar IF TYPE("oApp") == "O" AND RIGHT(ALLTRIM(.CAPTION),7)<>'(выбор)' *-- Определение следующего пункта меню для внесения имени окна IF CNTBAR("Window") = 0 OR GETBAR("Window", CNTBAR("Window")) < 0 lnBar = CNTBAR("Window") + 1 ELSE lnBar = GETBAR("Window", CNTBAR("Window")) + 1 ENDIF DEFINE BAR lnBar OF Window PROMPT THIS.frmSprMain.caption AFTER _MLAST lcFormName = THIS.frmSprMain.Name ON SELECTION BAR lnBar OF Window ACTIVATE Window &lcFormName ENDIF ACTIVATE MENU _MSYSMENU NOWAIT Создал класс formset c несколькими формами. Главную форму добавляю в сист. меню. На базе данного класса создано несколько формсетов. При одновременном открытии нескольких форм в системное меню заголовки форм добавляются правильно, но главная форма в формсете всегда имеет одинаковое имя, поэтому выбрать нужную форму через меню не могу (осужествляется последовательный переход между одноименными формами) Подскажите правильное решение проблемы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.11.2006, 11:03 |
|
||
|
Добавление окна в систюменю и его выбор
|
|||
|---|---|---|---|
|
#18+
А я при каждом запуске такой формы, добавляю к ее имени довесок типа " #1", " #2" и т.к., Сам номер запоминаю в форме и соответственно THIS.frmSprMain.caption будет у всех форм разный. Вместо номера можно придумать что-то свое, например, заголовок FormSet + "|" + заголовок самой формы. С уважением, Алексей ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.11.2006, 13:16 |
|
||
|
Добавление окна в систюменю и его выбор
|
|||
|---|---|---|---|
|
#18+
При чем тут заголовок формы - Capture? Capture я меняю программно - они разные. А вот Name - одинаковый. Или есть способ активизировать окно по Capture? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.11.2006, 13:30 |
|
||
|
Добавление окна в систюменю и его выбор
|
|||
|---|---|---|---|
|
#18+
В предыдущем вмесето Capture читать Caption!! :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.11.2006, 13:32 |
|
||
|
Добавление окна в систюменю и его выбор
|
|||
|---|---|---|---|
|
#18+
MikeLedПри чем тут заголовок формы - Capture? Capture я меняю программно - они разные. А вот Name - одинаковый. Или есть способ активизировать окно по Capture? Так меняй Name формы динамически! Приписывай номер к имени С уважениеми, Алексей. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.11.2006, 16:15 |
|
||
|
Добавление окна в систюменю и его выбор
|
|||
|---|---|---|---|
|
#18+
Класс формсет состоит из классов форм. Form.Name не меняется ни в конструкторе, ни программно. Могу поменять только formset.name, но это не решает проблемы - фктвизироваать надо форму, а не формсет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.11.2006, 16:26 |
|
||
|
Добавление окна в систюменю и его выбор
|
|||
|---|---|---|---|
|
#18+
MikeLedКласс формсет состоит из классов форм. Form.Name не меняется ни в конструкторе, ни программно. Могу поменять только formset.name, но это не решает проблемы - фктвизироваать надо форму, а не формсет. А попробовать Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. Обращаться надо через коллекцию Forms() ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.11.2006, 16:51 |
|
||
|
Добавление окна в систюменю и его выбор
|
|||
|---|---|---|---|
|
#18+
PaulWist , Вы о чем? У меня 10 formset на базе класса, в который включены 4 класса форм. Какая разница между formset1.form1.name и formset1.forms(1).name Любые попытки переименовать - Property Name is read only !!! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.11.2006, 17:39 |
|
||
|
Добавление окна в систюменю и его выбор
|
|||
|---|---|---|---|
|
#18+
Если "по простому", то сканируйте коллекцию форм, пока не найдете нужный заголовок Код: plaintext 1. 2. 3. 4. 5. 6. В более сложном варианте, надо создавать собственную коллекцию открытых форм и работать через нее. В данном случае "закрепить" за каждым пунктом меню ссылку на нужный объект. Хотя есть еще один вариант. Использовать стандартное меню FoxPro Как добавить в меню список открытых окон ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.11.2006, 18:00 |
|
||
|
Добавление окна в систюменю и его выбор
|
|||
|---|---|---|---|
|
#18+
В принципе я и так практически веду свою коллекцию окон. Приведенный вначале код добавляет новое окно в список (в классе). Остается только в коменде ON SELECTION BAR lnBar OF Window ACTIVATE Window &lcFormName заменить ACTIVATE Window &lcFormName DO MyActivForm(<заголовок_окна>) Но я думал,что для формсет что-то упустил. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.11.2006, 18:58 |
|
||
|
Добавление окна в систюменю и его выбор
|
|||
|---|---|---|---|
|
#18+
MikeLedКласс формсет состоит из классов форм. Form.Name не меняется ни в конструкторе, ни программно. Могу поменять только formset.name, но это не решает проблемы - фктвизироваать надо форму, а не формсет. Ну так меняйте в INIT Name формы! Зто же ваш код, как я понимаю? С уважением, Алексей. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.11.2006, 08:29 |
|
||
|
Добавление окна в систюменю и его выбор
|
|||
|---|---|---|---|
|
#18+
MikeLedPaulWist , Вы о чем? У меня 10 formset на базе класса, в который включены 4 класса форм. Какая разница между formset1.form1.name и formset1.forms(1).name Любые попытки переименовать - Property Name is read only !!! Покажите свой код, как у formset1.forms(1).name переименовывается Name? В какой момент вылетает ошибка? Вы запускали приведенный код? Тоже выскакивает ошибка? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.11.2006, 09:15 |
|
||
|
Добавление окна в систюменю и его выбор
|
|||
|---|---|---|---|
|
#18+
Паш, ты не понимаешь. Речь идет о FormSet, а не об одиночной форме. В данном случае форма - это не объект-контейнер верхнего уровня (у него действительно можно менять Name), а вложенный объект. У таких объектов свойство Name - Read Only. Разумеется, когда речь идет о классах. Чтобы было понятно о чем речь - положи на обычный класс формы любой объект. Создай собственно форму от этого класса или класс-наследник. А теперь попробуй в любом методе этой созданной формы изменить свойство Name вложенного объекта. Получишь "облом", поскольку недопустимо из класса-наследника менять некоторые свойства вложенных объектов созданных в родителе. В отношении FormSet то же самое касается входящих в него форм. Изменить свойство Name можно только у самого FormSet, как контейнера верхнего уровня, но не у вложенных в него объектов. Ведь "вложены" они были не у него, а у его родителя. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.11.2006, 11:07 |
|
||
|
Добавление окна в систюменю и его выбор
|
|||
|---|---|---|---|
|
#18+
ВладимирМПаш, ты не понимаешь. Речь идет о FormSet, а не об одиночной форме. В данном случае форма - это не объект-контейнер верхнего уровня (у него действительно можно менять Name), а вложенный объект. У таких объектов свойство Name - Read Only. Разумеется, когда речь идет о классах. Чтобы было понятно о чем речь - положи на обычный класс формы любой объект. Создай собственно форму от этого класса или класс-наследник. А теперь попробуй в любом методе этой созданной формы изменить свойство Name вложенного объекта. Получишь "облом", поскольку недопустимо из класса-наследника менять некоторые свойства вложенных объектов созданных в родителе. В отношении FormSet то же самое касается входящих в него форм. Изменить свойство Name можно только у самого FormSet, как контейнера верхнего уровня, но не у вложенных в него объектов. Ведь "вложены" они были не у него, а у его родителя. Так-с, проверяем (что-то я не понимаю), вроде все предложенные условия выполнены. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.11.2006, 11:50 |
|
||
|
Добавление окна в систюменю и его выбор
|
|||
|---|---|---|---|
|
#18+
Как я понимаю. Вы имя меняете в момент определения класса, а не формы. Это можно сделать, но это не то. Менять надо (хотелось) для ofs.forms(1). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.11.2006, 12:01 |
|
||
|
Добавление окна в систюменю и его выбор
|
|||
|---|---|---|---|
|
#18+
Может имеет смысл в классе формы, которая используется в FormSet, сразу предусмотреть в init смену имени с учетом, например имени контейнера (FormSet)? С уважением, Алексей ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.11.2006, 12:08 |
|
||
|
Добавление окна в систюменю и его выбор
|
|||
|---|---|---|---|
|
#18+
Пробовал, правда не совсем так (генерировал имя) и точно не помню какой ошибкой это закончилось. Кажется связь с классом была потеряна. Нодо будет посторить эксперимент. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.11.2006, 12:18 |
|
||
|
Добавление окна в систюменю и его выбор
|
|||
|---|---|---|---|
|
#18+
PaulWistТак-с, проверяем (что-то я не понимаю), вроде все предложенные условия выполнены. А теперь проделай все то же самое, но с ВИЗУАЛЬНЫМИ библиотеками. НЕ через код. Файлы VCX и SCX. Как вариант, сделай завершающий FormSet файлом SCX. Хотя это не принципиально... Вполне достаточно одной кнопки на одной форме и попытки изменить Name кнопки в экземпляре класса. Похоже, программное создание объектов принципиально отличается от визуального создания в VCX. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.11.2006, 12:30 |
|
||
|
Добавление окна в систюменю и его выбор
|
|||
|---|---|---|---|
|
#18+
ВладимирМПохоже, программное создание объектов принципиально отличается от визуального создания в VCX. А-ааа, Семён Семёныч !!! (с) Действительно, если в vcx в run-time добавить обьект, то его зменить можно, а так облом-с. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.11.2006, 13:20 |
|
||
|
Добавление окна в систюменю и его выбор
|
|||
|---|---|---|---|
|
#18+
У-уууу, Семёны Семёнычы !!! (с) Много полезного почерпнул. Спасибо Я что-то подобное уже проделывал. В моем случае это уже хлопотно, лучше я заголовки обработаю, как Владимир предлагал. Кстати, и ссылка хорошая им дана - отдельное спаибо. Я, конечно, понимаю, что правильные программисты пишут все руками и не пользуются различными генераторами, а еще более правильные пишут на ассемлере и в кодах. Только ячейки двигать уже тяжело. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.11.2006, 14:16 |
|
||
|
|

start [/forum/topic.php?fid=41&fpage=223&tid=1590280]: |
0ms |
get settings: |
8ms |
get forum list: |
13ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
33ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
42ms |
get tp. blocked users: |
1ms |
| others: | 214ms |
| total: | 327ms |

| 0 / 0 |
