Переключение на Главную Страницу Страницы: [1] 2 3 4 ОтправитьПечать
Очень популярная тема (более 25 ответов) Маленький класс для создания закладок (число прочтений - 22301 )
vandalsvq
1c++ power user
Отсутствует


Я всего лишь als-особиратель
;-)

Сообщений: 2487
Местоположение: Уфа
Зарегистрирован: 18. Июля 2007
Пол: Мужской
Маленький класс для создания закладок
22. Ноября 2007 :: 14:49
Печать  
Использован ActiveX "Forms.MultiPage.1".

Небольшое описание в файле ReadMe.txt почитайте если кому надо....

Скриншот ниже

Последнее изменение (15.02.08):
1.  Возможность создавать закладки в нужной позиции - ВставитьЗакладку(ИД,Заголовок,Подсказка,НомерЗакладки)
2.  Возможность позиционироваться на закладке по ее номеру или идентификатору - ВыбратьЗакладку(ИД)

Последнее изменение (20.02.08):
1.  Добавлена возможность изменения параметров закладки - УстановитьПараметрыЗакладки(ИД,Заголовок,Подсказка,Положение)

Все кто писал большое спасибо, я принимаю во внимание все сказанное ниже но как и многие перекраиваю на свой манер.
Кому еще что захочется а самим будет лень напишите, будет время покопаюсь, но не гарантирую.


Кстати было желание перейти с Forms на Comctl или вообще на Codejock-овские контролы.
Из плюсов Comctl:
1. пиктограммы на закладке
2. установка фиксированной ширины и высоты закладки (в Формз пока в этом направлении не копал)
Из минусов Comctl:
1. отсутствие управления видимостью и доступностью (мне это пока нравится и отказываться не хочу)
Из плюсов Codejock:
1. Все что только можно придумать они умеют.
2. Внешний вид, одно только это стоит многого
Из минусов Codejock:
1. Платность контролов (хотя мы живем в России конечно, но на коммерческие продукты не советую)
2. Дольше разбираться и сложнее в кодинге, но это все мелочи и фигня в принципе.
« Последняя редакция: 20. Февраля 2008 :: 11:06 - vandalsvq »  

TabbedForm.rar ( 6 KB | Загрузки )

Отхожу от дел. Долго и мучительно.
Наверх
IP записан
 
vandalsvq
1c++ power user
Отсутствует


Я всего лишь als-особиратель
;-)

Сообщений: 2487
Местоположение: Уфа
Зарегистрирован: 18. Июля 2007
Пол: Мужской
Re: Маленький класс для создания закладок
Ответ #1 - 22. Ноября 2007 :: 14:50
Печать  
Кстати если привязать их к форме с помощью класса привязки вообще приятно.

Вот и скриншот...
  

Tabbed_form.jpg ( 67 KB | Загрузки )
Tabbed_form.jpg

Отхожу от дел. Долго и мучительно.
Наверх
IP записан
 
JohnyDeath
1c++ power user
1c++ donor
Отсутствует



Сообщений: 3050
Местоположение: Волгоград
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Маленький класс для создания закладок
Ответ #2 - 22. Ноября 2007 :: 15:34
Печать  
Вот это:
Код
Выбрать все
Процедура Change()
	Страница = Закладки.ТекущаяСтраница();
	Если ПустоеЗначение(Страница) = 0 Тогда
		Форма.ИспользоватьСлой(ОсновнойСлой+Страница,2);
	КонецЕсли;
КонецПроцедуры 


можно добавить в КОП, чтоб каждый раз не писать это в модуле своей формы.
+ Добавить:
Код
Выбрать все
Перем ОсновнойСлой Экспорт; 


в Конструктор добавить строчку:
Код
Выбрать все
ОсновнойСлой="Основной,"; 


И всё. Если в какой-то форме будет другой "несменяемый" слой, то можно просто написать
Код
Выбрать все
Закладки = СоздатьОбъект("УправлениеЗакладками");
Закладки.ОсновнойСлой="Основной,Общий," 



П.С. это на вскидку
  
Наверх
 
IP записан
 
1cvirus
Junior Member
**
Отсутствует


I Love YaBB 2!

Сообщений: 89
Зарегистрирован: 24. Мая 2006
Re: Маленький класс для создания закладок
Ответ #3 - 22. Ноября 2007 :: 15:34
Печать  
чето у меня на месте закладок написано "Здесь должен быть АктивИкс"
  
Наверх
 
IP записан
 
vip
1c++ power user
Отсутствует



Сообщений: 1570
Зарегистрирован: 19. Мая 2006
Re: Маленький класс для создания закладок
Ответ #4 - 22. Ноября 2007 :: 15:38
Печать  
1cvirus писал(а) 22. Ноября 2007 :: 15:34:
чето у меня на месте закладок написано "Здесь должен быть АктивИкс"

Переменную модуля с именем закладки заведи.
  
Наверх
ICQ  
IP записан
 
vandalsvq
1c++ power user
Отсутствует


Я всего лишь als-особиратель
;-)

Сообщений: 2487
Местоположение: Уфа
Зарегистрирован: 18. Июля 2007
Пол: Мужской
Re: Маленький класс для создания закладок
Ответ #5 - 22. Ноября 2007 :: 16:45
Печать  
JohnyDeath

По всем пунктам согласен, просто КОП делался давно и в конфе напихан много где, неохото лопатить весь код в целях замены данной части.

Спасибо критике  Подмигивание как говорится если она по существу то полезна  Очень довольный
  

Отхожу от дел. Долго и мучительно.
Наверх
IP записан
 
1cvirus
Junior Member
**
Отсутствует


I Love YaBB 2!

Сообщений: 89
Зарегистрирован: 24. Мая 2006
Re: Маленький класс для создания закладок
Ответ #6 - 23. Ноября 2007 :: 07:10
Печать  
vip писал(а) 22. Ноября 2007 :: 15:38:
1cvirus писал(а) 22. Ноября 2007 :: 15:34:
чето у меня на месте закладок написано "Здесь должен быть АктивИкс"

Переменную модуля с именем закладки заведи.

не помогло - помогите - туплю
  
Наверх
 
IP записан
 
vandalsvq
1c++ power user
Отсутствует


Я всего лишь als-особиратель
;-)

Сообщений: 2487
Местоположение: Уфа
Зарегистрирован: 18. Июля 2007
Пол: Мужской
Re: Маленький класс для создания закладок
Ответ #7 - 23. Ноября 2007 :: 07:45
Печать  
1cvirus писал(а) 23. Ноября 2007 :: 07:10:
vip писал(а) 22. Ноября 2007 :: 15:38:
1cvirus писал(а) 22. Ноября 2007 :: 15:34:
чето у меня на месте закладок написано "Здесь должен быть АктивИкс"

Переменную модуля с именем закладки заведи.

не помогло - помогите - туплю


В общем кусок кода из справочника который скриншотил

Код
Выбрать все
//{ ---- переменные закладок на форме
Перем Закладки;
//}

//{ ==== СОЗДАНИЕ ЗАКЛАДОК НА ФОРМЕ

Процедура ПоКнЗакладки(НаимСлоя)
	Форма.ИспользоватьСлой(НаимСлоя,2);
	Если НаимСлоя = "Основной,Общие" Тогда
		Форма.ИспользоватьСлой(НаимСлоя+",ВидыДеятельностиКонтрагентов",2);
	КонецЕсли;
КонецПроцедуры

Процедура СоздатьЗакладки()
	Закладки = СоздатьОбъект("УправлениеЗакладками");
	Закладки.ДобавитьЗакладку("Общие","Общие","Общие данные контрагента");
	Закладки.ДобавитьЗакладку("ДоговорыКонтрагентов","Договоры","Договоры контрагента");
	Закладки.ДобавитьЗакладку("БанковскиеСчета","Банковские счета","Банковские счета контрагента");
	Закладки.ДобавитьЗакладку("КонтактнаяИнформация","Контактная информация","Контактная информация контрагента");
	Закладки.ДобавитьЗакладку("КонтактныеЛица","Контактные лица","Контактные лица контрагента");
	Закладки.ДобавитьЗакладку("ПостоянныйФайлКлиента","Постоянный файл","Постоянный файл контрагента");
	Закладки.СоздатьЗакладки(Контекст,"ФормаЗакладки");
КонецПроцедуры

Процедура ФормаЗакладки_Change()
	Страница = Закладки.ТекущаяСтраница();
	Если ПустоеЗначение(Страница) = 0 Тогда
		ПоКнЗакладки("Основной,"+Страница.Name);
	КонецЕсли;
КонецПроцедуры

//} 



еще вопросы?
  

Отхожу от дел. Долго и мучительно.
Наверх
IP записан
 
1cvirus
Junior Member
**
Отсутствует


I Love YaBB 2!

Сообщений: 89
Зарегистрирован: 24. Мая 2006
Re: Маленький класс для создания закладок
Ответ #8 - 23. Ноября 2007 :: 07:55
Печать  
Цитата:
еще вопросы?

спасибо помогло
  
Наверх
 
IP записан
 
vandalsvq
1c++ power user
Отсутствует


Я всего лишь als-особиратель
;-)

Сообщений: 2487
Местоположение: Уфа
Зарегистрирован: 18. Июля 2007
Пол: Мужской
Re: Маленький класс для создания закладок
Ответ #9 - 23. Ноября 2007 :: 08:58
Печать  
1cvirus писал(а) 23. Ноября 2007 :: 07:55:
Цитата:
еще вопросы?

спасибо помогло


Пожалуйста.

На будущее... поскольку чтобы АктивИкс продолжал свое существувование в течении всего времени работы с формой нужно чтобы переменная объекта АктивИкса не уничтожалась...
Ввиду того что переменная активикса закладок хранится в классе то необходимо чтобы сам объект КОПа существовал пока форма открыта.

Не советовал бы делать переменную данного КОПа глобальной потому как для каждой отдельной панели прийдется создавать отдельный экземляр объекта... т.е. в том случае как у меня на скриншоте есть переменная Закладки = СоздатьОбъект("УправлениеЗакладками"); и переменная ЗакладкиОбщие = СоздатьОбъект("УправлениеЗакладками");

И еще комментарий на счет вставки закладок... я пока не заморачивался на счет вставки закладок в конкретное место поэтому при использовании метода "ВставитьЗакладку" она вставляется в уже существующую панель последней. Т.е. Добавить используется для создания закладок до инициализации панели, вставить и удалить можно использовать на лету...

В моем скриншоте аналогичным образом вставляются и удаляются закладки при установке/снятии флага "Покупатель","Поставщик"... (правда поставщик пока не делает.... т.к. нет необходимости, наработки еще не доделаны).

Рад что кому-то это пригодилось. А то ощущение своей бесполезности как потребителя 1С++ и FormEx не давало покоя  Смех
  

Отхожу от дел. Долго и мучительно.
Наверх
IP записан
 
vandalsvq
1c++ power user
Отсутствует


Я всего лишь als-особиратель
;-)

Сообщений: 2487
Местоположение: Уфа
Зарегистрирован: 18. Июля 2007
Пол: Мужской
Re: Маленький класс для создания закладок
Ответ #10 - 24. Января 2008 :: 17:36
Печать  
Можно сказать немного доработанный класс...
что касается замечаний что говорилось выше, я их не исправлял, т.к. реально мне оно не особо мешает, у меня половина кода всякого на все случаи в шаблонах забито  Подмигивание

Из нового:
Управление доступностью закладок
Управление видимостью закладок

в общем то все
  

TabbedForm_001.rar ( 5 KB | Загрузки )

Отхожу от дел. Долго и мучительно.
Наверх
IP записан
 
Kapet
Senior Member
****
Отсутствует


Ламер - вансист

Сообщений: 262
Местоположение: Ukraine, Kyiv
Зарегистрирован: 27. Декабря 2006
Пол: Мужской
Re: Маленький класс для создания закладок
Ответ #11 - 14. Февраля 2008 :: 10:04
Печать  
Просто супер! Спасибо!
  
Наверх
ICQ  
IP записан
 
vandalsvq
1c++ power user
Отсутствует


Я всего лишь als-особиратель
;-)

Сообщений: 2487
Местоположение: Уфа
Зарегистрирован: 18. Июля 2007
Пол: Мужской
Re: Маленький класс для создания закладок
Ответ #12 - 14. Февраля 2008 :: 12:31
Печать  
Kapet писал(а) 14. Февраля 2008 :: 10:04:
Просто супер! Спасибо!


Ну....  пожалуйста  Подмигивание

Активизировать какую либо закладку не получается программно....  Плачущий
  

Отхожу от дел. Долго и мучительно.
Наверх
IP записан
 
admin spb
Full Member
***
Отсутствует


I Love YaBB 2!

Сообщений: 150
Зарегистрирован: 26. Апреля 2007
Пол: Мужской
Re: Маленький класс для создания закладок
Ответ #13 - 14. Февраля 2008 :: 13:41
Печать  
в класс добавляем процедуру:
Процедура ТекущаяЗакладка(НомЗакл=1) Экспорт
ОбъектЗакладки.Value=НомЗакл-1;
КонецПроцедуры


В форме вызываем: Закладки.ТекущаяЗакладка(1)


Улыбка)))))))))))))))))))))))))
  
Наверх
 
IP записан
 
Kapet
Senior Member
****
Отсутствует


Ламер - вансист

Сообщений: 262
Местоположение: Ukraine, Kyiv
Зарегистрирован: 27. Декабря 2006
Пол: Мужской
Re: Маленький класс для создания закладок
Ответ #14 - 14. Февраля 2008 :: 13:52
Печать  
Уточняю предыдущий пост. Переключаем закладки или по номеру или по идентификатору:
Код
Выбрать все
Процедура ТекущаяЗакладка(Закл) Экспорт
	Если ТипЗначенияСтр(Закл)="Число" Тогда
		ОбъектЗакладки.Value=Закл-1;
	ИначеЕсли ТипЗначенияСтр(Закл)="Строка" Тогда
		ТаблицаЗакладок.ВыбратьСтроки();
		Пока ТаблицаЗакладок.ПолучитьСтроку()=1 Цикл
			Если СокрЛП(ТаблицаЗакладок.Идентификатор)=СокрЛП(Закл) Тогда
				ОбъектЗакладки.Value=ТаблицаЗакладок.НомерСтроки-1;
				Прервать;
			КонецЕсли;
		КонецЦикла;
	КонецЕсли;
КонецПроцедуры 

  
Наверх
ICQ  
IP записан
 
Переключение на Главную Страницу Страницы: [1] 2 3 4
ОтправитьПечать