Программное создание кнопок в 1С v7 #549907


#0 by Nervosa
Здравствуйте? Скажите, пожалуйста, можно ли в 1С программно создавать кнопки(задавая их размер, положение и т.д.) и если да, то как? Заранее спасибо.
#1 by VladZ
Можно, разрешаю.
#2 by trdm
+1
#3 by Ёпрст
Можно. ДобавитьАтрибут
#4 by Nervosa
Ахахахаха!!! Спасибо, блин....
#5 by Nervosa
- ага. Щас попробую.
#6 by povar
попробуй, попробуй ...
#7 by andrewks
нужна кнопка Пыщь? start.ru/public/77297/
#8 by Nervosa
- Мда, вот я так и понял, что нужно качать эту компоненту. А без неё никак? То есть стандартными средствами?
#9 by Umka2008
без компоненты? Переходи на 8-ку
#10 by andrewks
станд средствами винды? можно, делай
#11 by ДенисЧ
А 8ка - это тоже компонента :-)
#12 by andrewks
и довольно прожорливая, по сравнению с 1с++
#13 by Ёпрст
1сpp к созданию контролов на форме не имеет никакого отношения.
#14 by andrewks
ну, раньше-то она вместе с формексом шла
#15 by Nervosa
- так, а с этого места, если можно, поподробней..!
#16 by Ёпрст
и че ? в той версии ДобавитьАтрибут не было никогда. ДобавитьАтрибут  - метод formex.dll
#18 by truba
а еще можно без плюсов и формекса насоздавать кнопки заранее а потом только определять их видимость а еще можно при загрузке на кнопку вешать разные названия и обрабатывать нажатие ее по условию да много чего еще можно если не зацикливаться
#19 by Nervosa
- Мда, насчёт создания кнопок заранее думал, но решил, что как-то это не по-спортивному. Теперь вот не знаю что лучше...
#20 by Ёпрст
всё зависит от задачи.
#21 by truba
ну вот изврат: На форме десять предопределенных кнопок. Все скрыты Все обращаются на одну и ту же процедуру НажатиеКнопки Перед открытием определяешь количество показываемых кнопок и их названия В НажатиеКнопки исполняется код в зависимости от названия нажатой кнопки. Почти универсальный механизм без плюсов.
#22 by Nervosa
Хммм...Ну в общем я решил воспользоваться формэксом, но тут же возникла проблемка. Делаю так - А мне вместо кнопки (да и любого другого атрибута) всё время создаётся поле для ввода даты. В чём дело, не подскажете?
#23 by Ёпрст
да уж.. а почитать (13,16) не судьба ужо ?
#24 by Nervosa
ээээ....а что ж за хрень тогда создаётся?
#25 by АЛьФ
#26 by МимохожийОднако
Где хочешь применить сии тайные знания?
#27 by palpetrovich
дык, ясен пень, ты  ДобавитьАтрибут попробуй :) ps   чисто отметь ветку, ничего личного  :)
#28 by Rabbit
v7 вей, он такой
#29 by Nervosa
А на такое -
#30 by Ёпрст
а документацию не пробовал читать перед этим ?
#31 by Nervosa
- als-ка спасла))) А то в doc'е какая-то ерунда написана. Ну и раз уж я опять тут, то такой вопрос - удалить созданный атрибут нельзя? Только Видимость в 0, как я понял((
#32 by trdm
>> Мда, вот я так и понял, что нужно качать эту компоненту. А без неё никак? нефига ты не понял. компоненты поому и пишутся что без неё иногда никак.
#33 by Nervosa
- неправда, всё я понял)
#34 by Ёпрст
да. Можно только через дюнаврап какой-нить, например. Проще проверить, есть ли такой контрол ужо, если нет  - создать.
#35 by Nervosa
- дюнаврап ето шо такое? Второе не подойдёт, к сожалению, надо именно удалять.
#36 by АЛьФ
А че за задача-то?
#37 by Nervosa
- уффф, долговато объяснять) Сейчас уже просто надо бы как-то научиться удалять кнопки.
#38 by Mikeware
судя по , "сделаем мы ей эту кнопку, только она зае...ца ее по экрану ловить"©
#39 by Nervosa
- ха, ну почти так)
#40 by Nervosa
Господа, так что же это за ДЮНАВРАП такой, с помощью которого я, вероятно, смогу удалять кнопочки????
#41 by FN
опиши задачу полностью
#42 by andrewks
#43 by Nervosa
- сенк ю. ->
#44 by АЛьФ
2 А тут никто никуда не торопится.
#45 by Nervosa
Блин, уже который час бьюсь - dll-ку зарегистрировал, а всё равно выдаётся ошибка "Ошибка при создании объекта из компоненты C:Program Files1Cv77BINdynwrapx.dll (отсутствует CLSID)", что, видимо, тянет за собой "Wrap.Register("KERNEL32.DLL", "DeleteObject"); {Документ.ДобавлениеКнопки.Форма.Модуль}: Неизвестная ошибка". Код такой: Может в курсе кто-нибудь, где собака зарыта?
#46 by Nervosa
Естественно, ошибки появляются при выполнении ВернутьсяНаПредыдущийЭкран.
#47 by andrewks
ЗагрузитьВнешнююКомпоненту("dynwrapx.dll"); - лишнее
#48 by andrewks
Wrap.Register("KERNEL32.DLL", "DeleteObject"); - маловато аргументов
#49 by andrewks
Кл - это чо?
#50 by Nervosa
Кл - переменная, в которую передаётся Windows-класс созданной кнопки. Вот же - Кл = НовыйАтрибут.Класс;
#51 by FN
ну как, получилось? удаляются кнопки?
#52 by Nervosa
- стал делать через GDI32 и вместо Класса передаю Дескриптор - ошибки перестали выскакивать, но кнопка чего-то не удаляется.
#53 by Nervosa
Теперь код выглядит так - кнопка по-прежнему не удаляется.
#54 by andrewks
а точно ли в Дескриптор именно тот хэндл, что нужен DeleteObject?
#55 by Nervosa
Если верить хэлпу по форэксу - Дескриптор Синтаксис: Дескриптор Назначение: получение HWND окна формы и вот этому описанию - DeleteObject Описание Удаляет Handle из памяти и освобождает связанные с ним pесуpсы системы. Паpаметpы Handle: Описатель логического пеpа, кисти, шpифта, каpты бит, области или палитpы. Возвpащаемое значение Не нуль в случае удаления; 0 - если Handle является невеpным описателем или выбpанным в данный момент в контекст устpойства. Чорт, где ж тогда правильный дескриптор искать???((( Или функцию другую юзать...
#56 by andrewks
эх, давно я winapi не юзал.... лет эдак 10. но сдаётся мне, что нужно этому хэндлу послать что-нить типа WM_DESTROY
#57 by Nervosa
Ага) Только что тоже наткнулся на эту штуку.Буду пробовать.
#58 by andrewks
Function DeleteObject(Handle: THandle): Bool; Handle: Описатель логического пеpа, кисти, шpифта, каpты бит, области или палитpы. нет окон. это не та функция. дестроить надо
#59 by andrewks
не пропадай только, результат не забудь запостить, а то интересно уже стало, а самому попробовать некогда :-)
#60 by Nervosa
океюшки
#61 by andrewks
ну чо?
#62 by Torquader
Нужно функцию DestroyWindow - она удалит окно, но ресурсы, задействованные для его "поддержки" со стороны 1С останутся. P.S. при помощи этой "магической" функции удавалось даже диалоги Windows "раздевать", чтобы пользователи чего-то лишнего не нажали.
#63 by Nervosa
Пока кручу-верчу с этой DestroyWindow...
#64 by Nervosa
В общем пока такое - В Кл находится атрибут созданной кнопки под названием Дескриптор. Если верить хэлпу, то оно представляет собой "HWND окна формы". Таким образом, что мы имеем? Обратно на основной слой мы возвращаемся, но при попытке заново создать кнопку на слое "ВыборШВ" или просто хотя бы его посмотреть у меня вылетает 1С !!! То есть, как я понял, DestroyWindow удаляет слой. Вот как-то так.
#65 by andrewks
"То есть, как я понял, DestroyWindow удаляет слой" - нет, скорей всего не так. просто, видимо, 1С не в курсах, что кнопку уже удалили, и при попытке обращения к данному объекту терпит крах. в общем, Альф нужён, может он соблаговолит рассказать, как он "объясняет" 1сине про новые элементы формы, также можно "объяснить" и про удаление, по идее
#66 by FN
А меня все же распирает любопытство - что за задача такая?
#67 by Nervosa
- окей, объясню. Есть форма, на ней два слоя. На первом N-ное количество кнопок, по нажатию на каждую из них показываем второй слой, где на основе таблицы будет формироваться РАЗНОЕ количество кнопок с РАЗНЫМИ заголовками, которые. То есть и количество кнопок, и их заголовки формируются из этой таблицы.
#68 by Mikeware
Визарда ваяешь? :-))
#69 by Nervosa
- А, ну и надо иметь возможность вернуться на предыдущий "экран"(т.е. слой), удаляя эти кнопки. - в общем-то можно и так сказать.
#70 by FN
А открыть вторую обработку в модальном режиме и уже в ней построить кнопки - такой вариант не катит? при закрытии формы кнопки удаляются корректно и происходит возврат на прошлый "слой"
#71 by FN
+ при этом можно устанавливать размеры "второго слоя" в зависимости от кол-ва кнопок. например как тута: - это я типа таск-менеджер для 1С делал. Открывать только при наличии нескольких окон, открытых в 1С.
#72 by АЛьФ
2 Достаточно заранее создать побольше кнопок на невидимом слое и в нужный момент переносить на твой второй слой, располагая в нужных местах. Ненужные убирать на невидимый слой. Кнопок-то ограниченное количество.
#73 by Nervosa
- насоздавать кнопок я-то успею)) А вот чтоб создавать их и удалять(точнее уже только удалять) - до этого пытаемся докопаться.
#74 by Nervosa
>>создавать их и удалять программно fixed
#75 by FN
да не надо их удалять. Сделай списокзначений созданных кнопок, при возврате на первый слой - делай всем видимость, при построении второго слоя - бери кнопки из списка (если не хватает - создавай еще) меняй координаты, размеры, заголовки. Тут кода 10-20 строк
#76 by АЛьФ
2 Не получится. В все правильно написано. Кнопка - это (условно говоря) документ-вид. Ты удаляешь только вид, а документ остается "висеть". Для 1С этот объект все еще существует. И она пытается к нему обратиться. Ну, можешь попробовать перед удалением кинуть удаляемую кнопку на какой-то невидимый слой. Но память будет течь.
Тэги:
Ответить:
Комментарии доступны только авторизированным пользователям