Пример как можно перетаскивать картинки на форме

Навеяно обработкой "Рабочий стол" (http://infostart.ru/projects/5466/ ) для 1С:Предприятие, идея алгоритма I_G_O_R, код в собственном исполнении.

Обработка демонстрирует технологию перемещения картинки на форме. Код простой и понятный, без оптимизации — для простоты восприятия. Может кому и пригодится в повседневной работе 🙂

При нажатии кнопки «Как рамка», при перетаскивании картинка сохраняет свое первоначальное положение которое меняет только после окончания перетаскивания. Пользователь наблюдает перемещение в виде рамки.

Для перетаскивания, наводим курсор, нажимаем левую кнопку мыши, удерживая ее, производим перемещение объекта путем акта движения руки в заданном головой направлении.

Навеяно обработкой «Рабочий стол» — //infostart.ru/projects/5466/

66 Comments

  1. Шёпот теней

    … убИл …

    … вОт …

    ….. ))) ….

    Reply
  2. WKBAPKA

    2(Шепот): Спасибо 🙂

    Reply
  3. Шёпот теней

    I_G_O_R то же плюс поставил в «Настройка и оптимизация» …

    Reply
  4. Шёпот теней

    … ммм …

    … это ВАМ спАсибо …

    … удачи …

    Reply
  5. WKBAPKA

    я только не учитывал границы формы, но это не сложно, одно условие и выравнивание по границе — 2 пункта. Так, привел для примера. Но возможности идея открывает огромные. I_G_O_R большой респект за идею.

    Reply
  6. Шёпот теней

    WKBAPKA и I_G_O_R

    … гениально чЁ ужЖж и говорить …

    … с уважением «Шёпот теней» …

    Reply
  7. WKBAPKA

    Шёпот согласись, идея рабочего стола лежала на поверхности. Каждый из нас работал с рабочим столом каждый день и до Светозора не подумал, что можно такое же сделать в 1С. Говорят, что в наше время что либо новое придумать нельзя, ан нет, можно, еще как можно 🙂

    тебе спасибо за плюс, думаю что твой рабочий стол теперь будет еще лучше!

    Reply
  8. CheBurator

    идея рабочего стола меня бесит до крайности.

    Reply
  9. WKBAPKA

    ну мало ли что меня бесит. идея очень шикарная. особенно, с меню в УПП и УТП 🙂

    Reply
  10. Шёпот теней

    (7) … нууу…. не думаю…

    … и не потому, что «упираюсь» — просто не понимаю необходмости и нужности и удобства в «двигании» значков …

    … вОООбщем это дело вкуса …

    … а рабочих столов в 1С полно … посмотрите БП, например, — просто они реализованы в манере 1С — вОООбщем дело вкуса …

    … мне в «моём» столе нравятся именно тем что описано в описании … а передвижение значков мало интересует …

    … идея I_G_O_R и ваше воплощение — отлично … я восхощЁн …

    Reply
  11. I_G_O_R

    Я уже говорил, что это не моя идея, а Светозора, так что спасибо ему. У него код был закрыт, но модуль формы нельзя закрыть, я отладчиком обнаружил, что на форме появляются 8 невидимых картинок и все стало ясно, а код написать дело техники. Код был закрыт, я его разгадал и рассказал всем, а вы мне плюсики ставите, как-то не хорошо, не нужны мне такие плюсики.

    Reply
  12. Шёпот теней

    (11) … хорошо … забрал …. было бы сказано … вот …

    Reply
  13. WKBAPKA

    2(11): Плюсики за то что не поленился. У меня была идея код открыть, да все как то руки не доходили.

    Дело в том, что для таких конфигураций как УТП и УПП такие технологии очень сильно облегчают жисть. Если еще добавить более одного рабочего стола, на которых можно группировать ярлыки, очень будет удобно делать интерфейсы.

    Reply
  14. Ish_2

    (11),(13) Я извиняюсь.

    Но при втором взгляде предлагамое решение (перетаскивание на «рабочем столе») показалось «диковатым извращением».

    На мой взгляд, оказалось гораздо проще , нагляднее, функциональнее использовать следующий подход.

    Расположить на форме поле табличного документа («рабочий стол»). Роль «ярлыков» будут играть рисунки («текст») табличного документа.

    И тогда все операции с «ярлыками — рисунками» (добавление, удаление, перетаскивание, изменения размера, корректировка) будут осуществляться на уровне платформы.

    Запретить активизацию пустых ячеек, убрать автоскроллинг и т.д.

    можно программно.

    Reply
  15. Ish_2

    (12) Шепот , нас обманули ! См. (14)

    Reply
  16. Шёпот теней

    (15) … на рынке всегда два умных дурака … и оба радуются … )))

    … данное решение мне понравлось …

    … понимаю что их может быть много … решение с табличном полем ? — согласен …

    … но есть идея а есть реализация … то, что кажется лёгким изначальным — становится трудным при реализации …

    … рабочий стол — штатными средствами — при 100 % заполнении рисунком вЕЕЕсьма «тормознутое» дело …

    … повторюсь: дело не столько в красоте сколько в практичности и не обходимости … поэтому изначально надо задаться вопросом для «ЧЕГО» делаем «рабочий стол» … «свой» я делал из описанной в описании необходимости …

    … поэтому дискуссия должна протекать в русле не «как» — т.к. способов реализации много» а для «чего» — тогда вопрос методов реализации почти отпадёт …

    … вот …

    Reply
  17. Ish_2

    (16) Бесполезность идеи «рабочего стола» не вызывает сомнений.

    Речь идет лишь о технологическом вопросе : о подходе к решению проблемы «перетаскивания» и др.

    Reply
  18. Шёпот теней

    (17) … бесполезность … ? … нуу… нууу… идея летает в воздухе и не только … имеет несколько воплощений как от сАмой 1С так и других товарищЧей …

    .. и это не столько «идея» сколько лишь возможность повторить то, что уже прижилось в других системах … метод аналогии …

    … думаю не стоит своЁ мнение или мнения круга лиц — выдавать как истину …

    … думаю как раз наоОобоОорот что те сложившиеся формы общения интерФейса -будут жить и развиваться — это и «меню» и «значки» и «рабочий стол» и их различные сочетания …

    … другого пока не придумали …

    … или ??? …

    … вот …

    Reply
  19. Ish_2

    (18)

    Уточняю (17) : речь идет не об идее рабочего стола , как таковой , а об

    идее такой реализации «рабочего стола», как в текущей теме.

    Так вот : также как и моя с табличном полем , так и идея автора темы могут рассматриваться лишь как демонстрации техники программирования.

    Применение в бизнес-решениях таких технологий выглядит «чудаковато».

    Говорю только от своего имени , разумеется.

    Более практичным выглядит подход к построению интерфейса в 8.2.

    Reply
  20. Шёпот теней

    (18) … принято … СОгласен … уважаю твоё мнение …

    .. лично я подерживаю любую идею «рабочего стола» …

    … по поводу «чудаковато»-сти — думается мы начинаем вторгаться в область «вкусов» и «предпочтений» — а тут выяснить истину БЕЗполезно … )))

    … вОт …

    Reply
  21. Шёпот теней

    в (20) читать первую строку в следующем изложении:

    (19) … принято … СОгласен … уважаю твоё мнение …

    … волнуюсьВОТошибаюсь …

    Reply
  22. Шёпот теней

    WKBAPKA

    … опять поздравляю: уже «6» …

    … не плохо ))) и рАзговор удАлся …

    … так сказать теория и практика рука об руку …

    … дальнейших удачЬ …

    Reply
  23. WKBAPKA

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

    Reply
  24. WKBAPKA

    т.е. если подложку нельзя сделать тогда это большой минус в таком решении. А с точки зрения реализации соглашусь, очень просто все делается

    Reply
  25. Ish_2

    (24) Что такое «подложка» ?

    Reply
  26. WKBAPKA

    сорри, задний фон

    Reply
  27. Ish_2

    (26) Не думал , что это существенно. Ок.Подумаю.

    А вообще , после выхода 8.2 предплагаю мы будем с грустью смотреть на эти изыски.

    Reply
  28. WKBAPKA

    согласен. но пока 8.2. нет приходиться извращаться.. а прикиньбте, как народ до сих пор извращается на 7.7. 😉 и не переходит же на 8.х )

    Reply
  29. I_G_O_R

    короче и то фигня и это, мне лично рабочий стол вообще не нужен т.к. я работаю во франче. Клиенты мне за рабочий стол врядли заплатят, а бесплатно работать не хочется. Есть только один плюс: никогда не работал с перетаскиванием, а теперь кое-что умею.

    Reply
  30. WKBAPKA

    (29): ага, это верно. но все таки, дело не в самом рабочем столе, а технологии. это дает возможность создавать не страндартные меню. и это плюс, как поется в песне 🙂

    Reply
  31. WKBAPKA

    да и самое главное во всем этом, это не стандартные решения. т.е. заставляе взглянуть на многие проблемы с другой стороны.

    иногда, то что говорят, нельзя сделать штатными средствами, оказывается можно, и работает достаточно эффективно

    Reply
  32. Ish_2

    (29) , (31) Согласен с обоими. Новыми знаниями и навыками и полезны такие обсуждения.

    Reply
  33. Ish_2

    (31) А «подложку» я всё-таки прикину как сделать. Потом доложу.

    Reply
  34. Шёпот теней

    (33) .. как версия для подложки — сделать как вебСайдеры — пилят риснок на необходимые части, вставляют — смотрится как единое целое … у них даже и программки специальные есть по разбиению … главное чтобы количество квадратиков было не запредельным ….

    … вот …

    … всем удачи …

    Reply
  35. Ish_2

    (34) Почти ничего не понял.

    Решение в лоб выглядит так :

    Р — рисунок табл.документа накрывает все видимое поле табл.документа с типом «картинка» , куда загружается файл с расширением «.bmp» («Подложка»)

    П — поля картинки с запрещением перетаскивания (т.е. запрещают скроллинг)

    Схема расположения :

    РП

    П

    Поверх рисунка «Р»(подложка) свободно создаются и перетаскиваются рисунки с типом «текст».

    Пока так.

    Reply
  36. Ish_2

    Виноват , пользователю недоступно тогда изменение фона рабочего стола.

    Reply
  37. Ish_2

    Виноват 2.

    Никаких проблем с изменением пользователем картинки фона рабочего стола («подложки») не возникнет.

    Организуется для пользователя диалог выбора файла «.bmp» и после :

    МояКартинка = Новый Картинка(ИмяФайлаКартинки)

    РисунокРабочегоСтола.Картинка = МояКартинка;

    Reply
  38. WKBAPKA

    я на выходных попробую, будет ли работать:) но иногда и на форме имеет смысл что либо подвигать )

    Reply
  39. Ish_2

    (38) ,(34) Виноват 3.

    А лучшим ,по-моему, решением будет использование свойства табл.документа

    ФоноваяКартинка , куда и загружается файл .bmp , Например 800х600.

    Тогда рисунок «Р» — просто не нужен.

    Конечно ,нужно пробовать , чтобы сказать что-то более определенное , но

    сам подход с использованием поля табл.документа и рисунков табл.документа (текст, картинка , лист Excel , фигуры и т.д) в качестве ярлыков гораздо перспективнее . Т.к. используется вся мощь платформы , то вид и функциональность «рабочего стола» могут быть просто недостижимыми

    при другом подходе.

    Reply
  40. director04

    (8) Когда чела «бесит» — это от лукавого…. У каждого свои фобии.

    Reply
  41. Широкий

    Блин .. а с утечкой памяти что нить придумали.

    Я все уже перепробовал — лажа получается

    Reply
  42. WKBAPKA

    а куда она утекает? 😉

    Reply
  43. venger

    (42) А ведь утекает таки;)

    Reply
  44. WKBAPKA

    ну дык вопросы к 1С разработчикам 😉

    Reply
  45. Широкий

    (44) Ловко спихнул

    Reply
  46. WKBAPKA

    возможно это происходит из за объявленной глобальной переменной в модуле… в принципе, ее можно и не использовать…

    Reply
  47. venger

    (46) А не из-за динамического создания-удаления временных картинок вокруг перетаскиваемой на форме, случаем?

    Reply
  48. WKBAPKA

    ну вы интересные ребята, честное слово… откуда я знаю, из-за чего. Я ведь оперирую языком платформы.

    Reply
  49. venger

    (41) Вот игруха, вроде как, без утечки: http://infostart.ru/public/58600/

    Мои предположения в 47-м посте, похоже, оправдались…

    Reply
  50. WKBAPKA

    2(49): я еще раз настаиваю на том, что это баг платформы… если есть возможность создавать на лету объекты, то и Destructor этих объектов должен работать корректно… если есть утечка памяти, значит это баг в платформе!

    Reply
  51. WKBAPKA

    типа сам себя похвалил 😀

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

    Reply
  52. I_G_O_R

    поддерживаю WKBAPKA, в моей обработке тоже утечки,баг платформы однозначно

    Reply
  53. I_G_O_R

    вот этот код попробуйте у себя запустить:

    Для к = 1 по 10000 Цикл
    
    Картинка = ЭлементыФормы.Добавить(Тип(«ПолеКартинки»), «Картинка»);
    ЭлементыФормы.Удалить(Картинка);
    
    КонецЦикла;
    

    сразу видно утечки памяти, всех поздравляю с обнаружением очередного бага, не было бы инфостарта, может никогда бы не нашли 😮

    Reply
  54. WKBAPKA

    2(53): + 1

    иногда у меня создается впечатление, что некоторые путают языки высокого уровня с предметно-ориентированными конструкторами, и выдвигают к ним повышенные требования…

    Reply
  55. venger

    (50)-(54) +49, Похоже у нас получился разговор немого со слепым, никто не сомневался, что баг платформы, вопрос был в том, чтобы понять где он и обойти, сохранив возможность перетаскивания, что я Вам и продемонстрировал в игрухе тут: http://infostart.ru/public/58600/

    А Вы вместо того, чтобы попытаться понять, что Вам говорит человек, а потом уже отвечать, твердите свое… Ну да ладно… Конечны Вы ребята самые умные, куда уж мне;)

    Reply
  56. WKBAPKA

    2(55): я пока свой рабочий стол не собирался делать, так что искать в чем баг платформы и как его обойти не очень хотелось… да и I_G_O_R продемонстрировал незатейливый код по созданию и удалению картинки в цикле. Как обойти этот баг? 😉

    Reply
  57. venger

    (56) > Как обойти этот баг?

    Так качните игруху по ссылке и гляньте предложенной мной способ обхода в действии, сделайте мне приятное;) Ну ё, я ж тоже человек, тоже хочу одобрения от коллег;) Способ прост, как пять копеек, кстати;)

    Reply
  58. Широкий

    Я тупо сделал своп картинок — т.е. не удаляю/создаю а просто меняю координаты у существующих картинок — все нормально.

    (57) Обработку не качал — как у тебя сделано?

    Reply
  59. WKBAPKA

    2(58): нормальный вариант решения… прелесть

    Reply
  60. venger

    (58) Тот же принцип…

    Reply
  61. Ёпрст

    Как то в снеговике через одно место это всё…

    Вот пример таскания всего в клюшках + формекс:

    Reply
  62. WKBAPKA

    2(60): переходим на ты 😉 ты же понимаешь, что при должном вниманию, каждому из нас пришла бы в голову такое же решение… мы же не дураки тут… но подчеркиваю, еще раз, при внимании, я лишь выложил пример и написал, дальше можно оптимизировать как хош 😉

    Я персона Вип Вип, у меня есть джип джип, обгоняю, подрезаю, все сигналят, БИП, БИП 😉

    Reply
  63. WKBAPKA

    2(61): показать полочки, где лежат пирожки ? тут обсуждается реализация штатными средствам!

    Reply
  64. venger

    (62) > ты же понимаешь…

    Полностью согласен, вообще, как-то нехорошо стартанули в общении, но думаю, что в дальнейшем, эта заминка замнется и забудется:)

    Reply
  65. WKBAPKA

    2(65): 😉 я вообще не конфликтый человек, просто иногда очень эмоциональный 🙁

    Reply
  66. lev6975

    По- ходу, в 1с перетаскивание картинки нереально стандартными событиями с получением координат дропа, всё перетаскивание ориентировано на табличные поля, колонки и прочее, пасьянс косынку написать нельзя, например:-)))))

    ЗЫ:Штатными средствами 1С без аддонов и костылей

    Reply

Leave a Comment

Ваш адрес email не будет опубликован. Обязательные поля помечены *