37.
I_G_O_R
69
22.08.09 19:08
Сейчас в теме
() даю подсказку: в событии Ярлыка(то есть "ПолеКартинки", кот. мы перетаскиваем) "НачалоПеретаскивания" рисуем вокруг невидимые картинки 8 штук с событием "ПроверкаПеретаскивания", в котором присваиваем новые координаты нашему Ярлыку. А в событии Ярлыка "ОкончаниеПеретаскивания" удаляем все картинки. Вот такая идея использовалась в выше указаном рабочем столе. Если бы вы заметили, то ярлыки передвигаются строго по сетке, иначе никак штатными средствами. много картинок программно не нарисуешь, 1С-ка слишком медленно с графикой работает.
Вот код формы обработки, чтоб работало нужно у формы добавить событие "При открытии" и потом скопировать весь этот код и вставить в форму:
========================= начало ===========================
Перем ПеремещаемаяКартинка;
/////////// Обработчики событий формы /////////////////////
Процедура ПолеПроверкаПеретаскивания(Элемент, ПараметрыПеретаскивания, СтандартнаяОбработка)
// перемещаем картинку
ПеремещаемаяКартинка.Лево = Элемент.Лево+5;
ПеремещаемаяКартинка.Верх = Элемент.Верх+5;
УдалитьВокругКартинки();
НарисоватьВокругКартинки();
КонецПроцедуры
Процедура КартинкаНажатие(Элемент)
Предупреждение("Вы нажали ярлык!");
КонецПроцедуры
Процедура КартинкаНачалоПеретаскивания(Элемент, ПараметрыПеретаскивания, СтандартнаяОбработка)
ПеремещаемаяКартинка = Элемент;
НарисоватьВокругКартинки();
КонецПроцедуры
Процедура КартинкаОкончаниеПеретаскивания(Элемент, ПараметрыПеретаскивания, СтандартнаяОбработка)
УдалитьВокругКартинки();
КонецПроцедуры
////////// Вспом. процедуры ////////////////////////////
Процедура НарисоватьВокругКартинки()
х = ПеремещаемаяКартинка.Лево-5;
у = ПеремещаемаяКартинка.Верх-5;
НП("К1", х - 50, у - 50); НП("К2", х , у - 50); НП("К3", х + 50, у - 50);
НП("К4", х - 50, у ); НП("К5", х + 50, у );
НП("К6", х - 50, у + 50); НП("К7", х , у + 50); НП("К8", х + 50, у + 50);
КонецПроцедуры
// процедура НарисоватьПоле(Имя, х, у)
Процедура НП(Имя, х, у)
Если х>0 И у>0 И х < (Ширина - 48) И у < (Высота - 73) Тогда
Картинка = ЭлементыФормы.Добавить(Тип("ПолеКартинки"), Имя);
Картинка.Лево = х;
Картинка.Верх = у;
Картинка.Ширина = 50;
Картинка.Высота = 50;
//Картинка.Рамка = Новый Рамка(ТипРамкиЭлементаУправления.Одинарная);
Картинка.РазрешитьПеретаскивание = Истина;
Картинка.ПрозрачныйФон = Истина;
Действие = Новый Действие("ПолеПроверкаПеретаскивания");
Картинка.УстановитьДействие("ПроверкаПеретаскивания", Действие);
КонецЕсли;
КонецПроцедуры
Процедура УдалитьВокругКартинки()
Для к= 1 По 8 Цикл
Картинка = ЭлементыФормы.Найти("К" + к);
Если Не Картинка = Неопределено Тогда
ЭлементыФормы.Удалить(Картинка);
КонецЕсли;
КонецЦикла;
КонецПроцедуры
Процедура Перерисовать()
Картинка = ЭлементыФормы.Добавить(Тип("ПолеКартинки"), "Картинка1");
Картинка.Лево = 8+5;
Картинка.Верх = 33+5;
Картинка.Ширина = 40;
Картинка.Высота = 40;
//Картинка.Рамка = Новый Рамка(ТипРамкиЭлементаУправления.Одинарная);
Картинка.РазрешитьНачалоПеретаскивания = Истина;
Картинка.Картинка = БиблиотекаКартинок.ДокументОбъект;
Картинка.Гиперссылка = Истина;
Действие = Новый Действие("КартинкаНачалоПеретаскивания");
Картинка.УстановитьДействие("НачалоПеретаскивания", Действие);
Действие = Новый Действие("КартинкаОкончаниеПеретаскивания");
Картинка.УстановитьДействие("ОкончаниеПеретаскивания", Действие);
Действие = Новый Действие("КартинкаНажатие");
Картинка.УстановитьДействие("Нажатие", Действие);
Картинка = ЭлементыФормы.Добавить(Тип("ПолеКартинки"), "Картинка2");
Картинка.Лево = 8+5+50;
Картинка.Верх = 33+5+100;
Картинка.Ширина = 40;
Картинка.Высота = 40;
//Картинка.Рамка = Новый Рамка(ТипРамкиЭлементаУправления.Одинарная);
Картинка.РазрешитьНачалоПеретаскивания = Истина;
Картинка.Картинка = БиблиотекаКартинок.ГеографическаяСхема;
Картинка.Гиперссылка = Истина;
Действие = Новый Действие("КартинкаНачалоПеретаскивания");
Картинка.УстановитьДействие("НачалоПеретаскивания", Действие);
Действие = Новый Действие("КартинкаОкончаниеПеретаскивания");
Картинка.УстановитьДействие("ОкончаниеПеретаскивания", Действие);
Действие = Новый Действие("КартинкаНажатие");
Картинка.УстановитьДействие("Нажатие", Действие);
КонецПроцедуры
Процедура ПриОткрытии()
Перерисовать();
КонецПроцедуры
========================= начало ===========================