Хотелки от пользователей :-)

Автор MWW_Ruza, 19 февраля 2024, 22:01

« назад - далее »

sau

Цитата: АЛьФ от 17 марта 2024, 20:49
Цитата: sau от 17 марта 2024, 18:52По методу "ГотовностьПринтера". Очень не всегда дает информацию о возможности печати на принтер. Использую проверку на длину очереди (т.е. количество заданий, находящихся в очереди). Как правило (чеки, накладные) задание небольшие по времени выполнения, соответственно, если длина очереди более допустимого значения (например, 2-3), то последующая отправка на печать "подозрительна".

Этот метод - это просто обертка над функцией EnumPrinters() из WinAPI. Тут я вряд ли что смогу исправить. Что винда возвращает, то и передаю.
Вопрос не в исправлении, а в добавлении новой (другой) функции ДлинаОчередиПечати

sau

Цитата: АЛьФ от 17 марта 2024, 20:49
Цитата: sau от 17 марта 2024, 18:35
Цитата: АЛьФ от 17 марта 2024, 09:38
Цитата: sau от 17 марта 2024, 00:59Можно ли получить событие изменения ширины колонки МногострочнойЧасти (ТаблицыЗначений)? Для реализации возможности сохранения пользовательских настроек.

Для этого не обязательно отслеживать именно изменение ширины, достаточно во время сохранения прочитать ширину.
Или я чего-то не понял.
Ширина колонок "сбивается" (возвращается в первоначальное состояние) даже при простом переключении фокуса между формами. Зачем сохранять настройки, если они не менялись? Возможно (как вторичный эффект) сгенерируется событие, когда "сбивается" (возможно восстановить).

А если просто отключить автоширину колонок?
Отключена обязательно.
Т.е. если изменить ширину колонки (мышью), а затем переключиться на любое другое другое окно (дочернее в 1С) и вернуться обратно, то восстанавливается ширина заданная в конфигураторе.

Злоп

Цитата: sau от 17 марта 2024, 21:37При чем тут это...
это к жмакам по заголовкам колонок. для чего жмакать по заголовкам колонок?

АЛьФ

Цитата: sau от 17 марта 2024, 21:40Вопрос не в исправлении, а в добавлении новой (другой) функции ДлинаОчередиПечати

Ок.

Forum123

В FormEx можно динамически создавать любой controls?
Хотелка в возможности динамически создавать диалоговые формы.

АЛьФ

Цитата: Forum123 от 18 марта 2024, 11:58В FormEx можно динамически создавать любой controls?
Хотелка в возможности динамически создавать диалоговые формы.

Есть метод РасширениеФормы::ДобавитьАтрибут()
Вот тут старая тема с обсуждением его работы: https://www.1cpp.ru/forum/YaBB.pl?num=1178269183

alyuev

Цитата: sau от 17 марта 2024, 01:25Можно ли отследить нажатие мышью на заголовке колонки в МногосточнойЧасти (ТаблицеЗначений)?

Вот как я делал:

ИмяМнЧ="МногострочнаяЧасть";
	Если АнглоЯзычныйИнтерфейс=1 Тогда ИмяМнЧ="Multycolumn"; КонецЕсли;  //+Al 2019-12-20 11:10:24 Для не русской винды нужно вместо МногострочнаяЧасть использовать Multycolumn, иначе координаты не возвращает 

Атр=ФормаРасш.ПолучитьАтрибутПоКоординатам(_X,_Y);
		Если ПустоеЗначение(Атр) = 0 Тогда
			Если Атр.Идентификатор = "МногострочнаяЧасть" Тогда
				СообщитьВОтладке("Попали в МногострочнаяЧасть");
				Об=ФормаРасш.ПолучитьАтрибут(ИмяМнЧ);
				СообщитьВОтладке("Получили атрибут");
				СимволВниз=" v";СимволВверх=" ^"; //СимволВниз=" \/";СимволВверх=" /\";
	в="";л="";Ш="";Вы="";Об.ПолучитьКоординаты(Л,В,Ш,Вы);
				ВысотаШапки=15;
	Если (_Y>В)и(_Y<В+ВысотаШапки)и(_X<(Л+Ш-20)) Тогда // Попали в Шапку (учитывая высоту шапки и не учитываю левый скрол-бар)
					СообщитьВОтладке("Попали в шапку");
					Если ТипКонтекста="Журнал" Тогда ФлСО=1;Перейти ~Выход;КонецЕсли;
					Курсор=65539; //Стрелка
					//65539  -> NORMAL;65541  -> INSERT;65543  -> WAIT;65545  -> CROSS;65547  -> UP;65549  -> RESIZE_NW_SE;65551  -> RESIZE_NE_SW;65553  -> RESIZE_EW;65555  -> RESIZE_NS;65557  -> MOVE;65559  -> NOT_ALLOWED;65561  -> PROGRESS;
					//65563  -> HELP			 
					//Установить курсор можно через Сервис.УстановитьКурсор();
					Попытка	Враппер = СоздатьОбъект("DynamicWrapperX");Враппер.Register("USER32.DLL","GetCursor","r=l");Курсор = Враппер.GetCursor(); //Определяем тип курсора
					Исключение
					КонецПопытки;
					Если (Курсор<>65539)и(Курсор<>65541) Тогда СообщитьВОтладке("Код курсора :: "+Курсор);ФлСО=1;Перейти ~Выход;КонецЕсли;
					ФормаРасш.УстановитьТекущуюЯчейку(ИмяМнЧ,_X,_Y+ВысотаШапки);
					АктЭлемент = КФ.АктивныйЭлемент();
					ТекЗаголовок=КФ.ПолучитьАтрибут(АктЭлемент).Заголовок();
					НапрСортировки=?(Найти(ТекЗаголовок,СимволВниз)<>0,"-","+");
					Если ТипКонтекста="Документ"		Тогда Конт.СортироватьСтроки(НапрСортировки+АктЭлемент);СообщитьВОтладке("Отсортировали по полю "+НапрСортировки+АктЭлемент);
					ИначеЕсли ТипКонтекста="Справочник" Тогда Конт.Сортировка(АктЭлемент);СимволВверх=СимволВниз;
					КонецЕсли;

Таким образом реализована возможность сортировки таблицы по клику левой кнопки в шапке, а по правой - выбор видимости колонок справочника/журнала/табличной части документа

Злоп

Высота шапки (заголовки ТЗ/многострочной) - получается разной в зависимости от назначенного шрифта...
я тупо проще делал: клал куда-нить кнопку "сортировка" и все. а видимость колонок - это у меня везде где есть ТЧ почти всегда лежит отдельная кнопка с диалогом настройки/сохранения видимости колонок.

alyuev

То, что я привёл - это выдержка из глобальных перехватов ПриНажатииЛевойКнопки/ПриНажатииПравойКнопки. Т.о. это распространяется на любые перечисленные выше формы.

sau

Цитата: alyuev от 18 марта 2024, 14:30
Цитата: sau от 17 марта 2024, 01:25Можно ли отследить нажатие мышью на заголовке колонки в МногосточнойЧасти (ТаблицеЗначений)?

Вот как я делал:

ИмяМнЧ="МногострочнаяЧасть";
	Если АнглоЯзычныйИнтерфейс=1 Тогда ИмяМнЧ="Multycolumn"; КонецЕсли;  //+Al 2019-12-20 11:10:24 Для не русской винды нужно вместо МногострочнаяЧасть использовать Multycolumn, иначе координаты не возвращает 

Атр=ФормаРасш.ПолучитьАтрибутПоКоординатам(_X,_Y);
		Если ПустоеЗначение(Атр) = 0 Тогда
			Если Атр.Идентификатор = "МногострочнаяЧасть" Тогда
				СообщитьВОтладке("Попали в МногострочнаяЧасть");
				Об=ФормаРасш.ПолучитьАтрибут(ИмяМнЧ);
				СообщитьВОтладке("Получили атрибут");
				СимволВниз=" v";СимволВверх=" ^"; //СимволВниз=" \/";СимволВверх=" /\";
	в="";л="";Ш="";Вы="";Об.ПолучитьКоординаты(Л,В,Ш,Вы);
				ВысотаШапки=15;
	Если (_Y>В)и(_Y<В+ВысотаШапки)и(_X<(Л+Ш-20)) Тогда // Попали в Шапку (учитывая высоту шапки и не учитываю левый скрол-бар)
					СообщитьВОтладке("Попали в шапку");
					Если ТипКонтекста="Журнал" Тогда ФлСО=1;Перейти ~Выход;КонецЕсли;
					Курсор=65539; //Стрелка
					//65539  -> NORMAL;65541  -> INSERT;65543  -> WAIT;65545  -> CROSS;65547  -> UP;65549  -> RESIZE_NW_SE;65551  -> RESIZE_NE_SW;65553  -> RESIZE_EW;65555  -> RESIZE_NS;65557  -> MOVE;65559  -> NOT_ALLOWED;65561  -> PROGRESS;
					//65563  -> HELP			 
					//Установить курсор можно через Сервис.УстановитьКурсор();
					Попытка	Враппер = СоздатьОбъект("DynamicWrapperX");Враппер.Register("USER32.DLL","GetCursor","r=l");Курсор = Враппер.GetCursor(); //Определяем тип курсора
					Исключение
					КонецПопытки;
					Если (Курсор<>65539)и(Курсор<>65541) Тогда СообщитьВОтладке("Код курсора :: "+Курсор);ФлСО=1;Перейти ~Выход;КонецЕсли;
					ФормаРасш.УстановитьТекущуюЯчейку(ИмяМнЧ,_X,_Y+ВысотаШапки);
					АктЭлемент = КФ.АктивныйЭлемент();
					ТекЗаголовок=КФ.ПолучитьАтрибут(АктЭлемент).Заголовок();
					НапрСортировки=?(Найти(ТекЗаголовок,СимволВниз)<>0,"-","+");
					Если ТипКонтекста="Документ"		Тогда Конт.СортироватьСтроки(НапрСортировки+АктЭлемент);СообщитьВОтладке("Отсортировали по полю "+НапрСортировки+АктЭлемент);
					ИначеЕсли ТипКонтекста="Справочник" Тогда Конт.Сортировка(АктЭлемент);СимволВверх=СимволВниз;
					КонецЕсли;

Таким образом реализована возможность сортировки таблицы по клику левой кнопки в шапке, а по правой - выбор видимости колонок справочника/журнала/табличной части документа
Набросал с определением высота шапки (с учетом шрифта, многострочности):
Атр=РасширениеФормы.ПолучитьАтрибутПоКоординатам(КоординатаПоГоризонтали,КоординатаПоВертикали);
Если ПустоеЗначение(Атр)=0 Тогда
   Если Атр.Идентификатор="МногострочнаяЧасть" Тогда
      В=0; ВВ=0; ВВВ=0; Н=0;
      Атр.ПолучитьКоординаты(,ВВВ,,);
      РасширениеФормы.ПолучитьКоординатыЯчейки("МногострочнаяЧасть",1,1,В,,Н,,0);
      РасширениеФормы.ПолучитьКоординатыЯчейки("МногострочнаяЧасть",2,1,ВВ,,,,0);
      ШиринаРамки=ВВ-Н+1;
      Если (КоординатаПоВертикали<В) и (КоординатаПоВертикали>ВВВ+ШиринаРамки+1) Тогда
         ФСО=0;
         ВысотаШапки=В-ВВВ+1;
         РасширениеФормы.ПолучитьКоординатыТекущейЯчейки("МногострочнаяЧасть",В,,Н,,0);
РасширениеФормы.УстановитьТекущуюЯчейку("МногострочнаяЧасть",КоординатаПоГоризонтали,В+1);
      КонецЕсли;
   КонецЕсли;
КонецЕсли;
Но это все равно "игра ума". Не учитывается, что первая колонка может быть не видна и т.п.
Но появились хотелки "КоличествоКолонок" и "ИмяКолонкиПоНомеру"

Злоп

Цитата: sau от 18 марта 2024, 23:11Но появились хотелки "КоличествоКолонок" и "ИмяКолонкиПоНомеру"
тогда уже и ИменаКолонок() - возвращает СЗ/ТЗ с перечнем имен (идентификаторов колонок) в виде "идентификатор колонки" и "заголовок колонки". Учесть что и имя колонки и заголовок колонки могут быть пустой строкой (и в ИмяКолонкиПоНомеру тоже, возвращать имя, а в параметре - заголовок)

Forum123

Интересный проект https://github.com/Kr00l/VBCCR  VB Common Controls Replacement Library (Replacement of the MS common controls)

Djelf

Цитата: Forum123 от 19 марта 2024, 20:09Интересный проект https://github.com/Kr00l/VBCCR  VB Common Controls Replacement Library (Replacement of the MS common controls)
К сожалению, у Крола не все контролы корректно создаются через 1с++, вроде по коду все верно, но по факту не создаются и падают. Некоторые зависят от операционки.
Использовать можно, но проверять на проде стоит очень тщательно.

alyuev

По следам https://forum.mista.ru/topic/889103#32 - зарегил c:\Windows\SysWOW64\VBCCR17.OCX. Создание объектов происходит:

ОбъектImageListCtrl = СоздатьОбъект("VBCCR17.ImageList");
Сообщить(ТипЗначенияСтр(ОбъектImageListCtrl)); // ==> OLE._ImageList

ЭлементУправления = СоздатьОбъект("VBCCR17.ToolBar");
Сообщить(ТипЗначенияСтр(ЭлементУправления)); // ==> OLE._ToolBar

Но при этом обращение к ЭлементУправления.ImageList - вызывает ошибку:

Incorrect variable type

Forum123

Цитата: alyuev от 20 марта 2024, 13:05Но при этом обращение к ЭлементУправления.ImageList - вызывает ошибку:

Incorrect variable type

Для использования сторонних ActiveX в 1С иногда требуется создание binding, учитывающий работу 1С с OLE.
Contols интересные.
Допилить бы их для 1С 7.7.