Помогите разобраться с TImage

Вопросы программирования и использования среды Lazarus.

Модератор: Модераторы

Re: Помогите разобраться с TImage

Сообщение alex-y » 20.05.2020 09:25:52

DedFrend Гы... Вот из-за лени матушки, когда не хочется тащиться, как идиоту, в соседнюю комнату и надрываться, включая компьютер с целевой ОС, порой приобретаешь привычки как-то сразу и размеры шрифта для кнопок вбивать в инспекторе объедков, и размещение продумывать. Вот этот перекос морды - типичная картина, когда пишешь под виндой, а потом собираешь под линуксом. Когда наоборот - другие косяки вылезают, по другому морду косит. А самое смешное в этой "истинной кроссплатформе" было у меня несколько дней назад, когда выяснилось, что почему-то в линуксе цвета в 32-битном формате пишутся ARGB, а в винде ABGR, то есть, младший бит в линуксе интерпретируется, как синий канал, а в винде - как красный. И пришлось в исходник два массива палитры вбивать.

Хотя, чести ради, не только Lazarus этим болеет. С питоновской Tkinter та же печаль. Спасибо хотя бы, что не приходится большие массивы кода переделывать под разные системы. У меня приятель был, мы дурачились с анализом аудиофайлов, в основном, на питоне, ну, для пробивания больших завалов - лазарь... Так у него по двум системам разбросаны разные плагины, поэтому ему самопал приходилось собирать под винду и макось, в ней вообще "косорылость третьего типа"...

Нормально, в общем, че уж...
alex-y
новенький
 
Сообщения: 12
Зарегистрирован: 14.05.2020 14:06:03

Re: Помогите разобраться с TImage

Сообщение olegy123 » 20.05.2020 19:42:36

alex-y писал(а):Ага, спасибо! То есть, получается, просто без шансов, кроме прямолинейного, других способов нет.
Есть сторонние компоненты, но вам этого не надо.
Стандартные компоненты ограничены достаточным функционалом чтобы загрузить и показать картинку. Что позволено в рамках GUI.

По поводу написание своих - если разобраться то можно очень сильный нарисовать с богатым функционалом. Это не сложно - есть канва, есть кисть, примитивы, есть работа с текстом. Можно добавить вектора. Тогда вообще можно как из фотошопа сделать элементы.
Я в свое время делал таймлайн - линейку размеров по времени, с увеличением и уменьшением(zoom) - пару дней пилил, и получилось.
И это на пользу, сразу понимаешь как работает система. Где можно выжимать, а где нужны другие инструменты.
Это будет работать не только на паскале, но на других языках и системах.
olegy123
долгожитель
 
Сообщения: 1572
Зарегистрирован: 25.02.2016 12:10:20

Re: Помогите разобраться с TImage

Сообщение alex-y » 20.05.2020 21:03:03

olegy123 писал(а):По поводу написание своих - если разобраться то можно очень сильный нарисовать с богатым функционалом.


Можно. Но зачем? Я еще помню конец 90-х, когда просто тошнило от недоразвитых студентов, приходящих на работу из институтов, где было ощущение, что преподы сидели на взятках от Борланда тогдашнего. Навязывая такой стиль - обязательное написание, регистрация и публикация компонентов по любому поводу и без повода. И столкнешься вот с таким "компонентщиком" случайно - его просто хочется прикончить из жалости, чтоб не мучился. Я-то воспитан на принципе "решай свою задачу, а не спасай мир". Разумеется, я умею писать компоненты. И на дельфи, и на билдере. Наверное, в лазаре это так же делается. Но вот вопрос - зачем это нужно для разовой задачи? Обычная судьба таких компонентов - до переустановки IDE валяться без дела в палитре. А вот их создание со всеми привязками, функционалами для режима дизайна, для работы, с интерфейсами и прочим, очень сильно отвлекает от той задачи, которую требуется решить.

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

А что касается "мне этого не надо", ну, неужели непонятно-то? Типичная штатная ситуация. Клиент не совсем тупой, он сможет поставить лазарь из дистра и скомпилировать мой проект на своей машине. Даже, может быть, дизайн на форме подправить, ну там, вписать на форму свое имя, пусть потешится. Но разбираться с кодом или установкой недостающих компонентов он точно не станет. Бинарник я ему выслать никак не смогу. Потому что там, кроме винды, нужна еще версия под макось, а этого у меня в помине нет, вот отсюда и требования - только на том, что входит в стандартный дистрибутив. И там не друг-приятель, с которым можно возиться в личке полмесяца, объясняя, как впендюрить в палитру вот этот и вот этот компоненты, чтоб они нормально привязывались к проекту.

Честно говоря, еще мне с лазарем не везет именно по этой линии. Сколько пытался собрать чужих проектов с самопальными компонентами - каждый раз одна и та же история. Именно компонент, какой-нибудь незначительный, не может установиться, причем, сам лазарь настолько перекашивает, что его уже легче переустановить с нуля. В дельфях-то такая история редкостью не была, а тут просто наваждение какое-то.
alex-y
новенький
 
Сообщения: 12
Зарегистрирован: 14.05.2020 14:06:03

Re: Помогите разобраться с TImage

Сообщение olegy123 » 22.05.2020 05:10:49

alex-y писал(а): Обычная судьба таких компонентов - до переустановки IDE валяться без дела в палитре.
для разовой работы вовсе его можно не регистрировать в IDE, а просто программно, руками его крепить.

alex-y писал(а):Честно говоря, еще мне с лазарем не везет именно по этой линии. Сколько пытался собрать чужих проектов с самопальными компонентами - каждый раз одна и та же история.
О, в других средах там по другому.. ага, там нет самопального, все официально..
Там как раз все самопальное, еще нужно мануалы читать чтобы поработать с компонентами, а некоторых есть только код, без пояснений..
Вчера на андройде искал ввод текста с маской, так вот официально нет такого компонента, пришлось искать. Искать по разным свалкам githab-а.
Нашел теперь нужно вдублится как с этим работать.
Ходил по форумам как то ставится( implementation) но для того чтобы вписать нужно дать gradle (gradle - система автоматической сборки) подсказки где искать репозитарий, чтобы нужный пакет приатчить.
Это не все, нужно разобраться как с этим еще работать, хорошо если все расписано в документации, но это не всегда есть.. как layout прописать XML код.
В XML прописывали параметры? Это не по propertys щелкать галки. Ручками, ручками. Не.. там есть визуальный построитель, но он такю дичь выдает.. да пока нужный параметр найдешь. Проще ручками править.
Это еще не все - бывают версии компонент в конфликт входят с другими компонентами, а то и с целым проектом. Недавно, так встрял.. оказывается гугл в современных версиях SDK с 26 версии поломал зависимости.. а мне надо писать под 25, аппарат физически 25 андройд, заказчику прикажете поменять аппаратную часть? Вот лезу по форумам ищу кто сталкивался этой бедой и как выкручиваются другие люди.
Я не разработчик компонентов.

Код: Выделить всё
    <com.google.android.material.floatingactionbutton.FloatingActionButton
        android:id="@+id/buttonReturn"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="end|bottom"
        android:layout_margin="24dp"
        android:contentDescription="Возврат"
        android:src="@drawable/ic_remove_circle_outline_black_24dp"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent" />
- это чтобы одну только кнопочку повесить, сколько необходимо мышкой накликать или ручками пописать, это только чтобы кнопка правильно приняла положение. Это не разработка компонента, это чтобы я, как клиент, мог разместить нужный объект на форме.

Как там в lazarus - щелкнуль по палтире, перенес на форму, aligen выровнял, ancor галками выставил.. и нужные события в коде прописал..

alex-y писал(а):Даже, может быть, дизайн на форме подправить, ну там, вписать на форму свое имя, пусть потешится. Но разбираться с кодом или установкой недостающих компонентов он точно не станет.
Замете это еще не дизайн.. это только размещение на форме одной кнопки, без покраски и событий..
Ваш клиент в Андройде точно стал бы делать.
Вы просто обленились.
olegy123
долгожитель
 
Сообщения: 1572
Зарегистрирован: 25.02.2016 12:10:20

Re: Помогите разобраться с TImage

Сообщение iskander » 22.05.2020 14:37:35

alex-y писал(а):iskander

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

Ага, ляпнул не подумав. :oops:
А если вот так?
iskander
постоялец
 
Сообщения: 286
Зарегистрирован: 08.01.2012 18:43:34

Re: Помогите разобраться с TImage

Сообщение alex-y » 22.05.2020 21:52:40

olegy123 писал(а):Ваш клиент в Андройде точно стал бы делать.


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

Я, раз уж заговорили про жуткую сложную житуху под "зеленым антропоидом", другую историю вспомню, которую краешком проходил. Есть, наверное, и поныне такая среда, как Allegro Common Lisp. В 2012-м пришлось один раз воспользоваться. В чем там прикол - это компилятор лиспа. Который не псевдокод гонит, а нативный машинный, причем, очень оптимизированный. Правда, к программке идет рантайм-библа метров на 20, но это и 10 лет назад уже никого не пугало. Второй прикол среды - это графическая IDE с сильным закосом под дельфи и билдер. То есть, весь оконный интерфейс можно спокойно в ней сделать. Самый тяжкий недостаток - коммерческая. Однако, была бесплатная триал-версия, которая не запускалась без наличия инета. И матов я выпустил в адрес создателей этой хрени немало.

И вот вопрос - а на хрена она вообще нужна-то была? Почему не дельфи? Да потому, блин, что интерфейс, как бы страшно с ним ни было возиться на Лиспе, был лишь верхушкой айсберга. Или какашкой вороны, пролетавшей над этим айсбергом. А "внутри", под этим интерфейсом работала отличная, очень крупная, но при этом хорошо сколоченная "тематическая" библиотека на Лиспе. На других языках ничего подобного не нашлось, а эта - ну просто конфетка. И можно было подрочиться с Аллегро только ради этого.

Если же программа состоит ТОЛЬКО ИЗ ОДНОГО ИНТЕРФЕЙСА - ну, блин, есть БДСМ, есть ЛГБТ, кто как хочет, так и тешится... Нравится под андроид писать нашлепки, возясь с каждой кнопочкой и чекбоксом, под которыми две-три формулы - да кто ж запретит!

Вот и в моем проекте, спровоцировавшем это обсуждение, та же фигня. Скроллинг картинки - да, но кроме него, еще другие интерфейсные элементы надо обслуживать, а код, лежащий под интерфейсом на порядки сложнее и в разы крупнее того, что я тут, как демку, выложил. Там даже обслуживание событий для других элементов управления ощутимо крупнее, чем обслуживание скроллинга. А поскольку так, то уже не критично, пишем мы на лазаре с помощью IDE или подтягиваем fpGUI какой-нибудь, или прямо на иксах молотим (или на чистом WinAPI, тут, кстати, есть опыт). Правда, для меня эти варианты ведут к погружению на месяцы в документацию по библиотекам, с которыми я никогда не сталккивался. На чистом WinAPI на дельфях писал, было. Но тут не тот случай, нужна кроссплатформа.

Добавлено спустя 10 минут 56 секунд:
iskander писал(а):Ага, ляпнул не подумав. :oops:
А если вот так?


Понравилось! Я просто поясню для случайных прохожих, в чем юмор. Мы создаем две панели - вертикальную и горизонтальную - для линеек, которые хранятся в TImage и занимают всю панель. При скроллинге за пределы начала картинки этим TImage задается отрицательная координата Left или Top. То есть, это работает! И я нахожу это приемлемым.

Но, уважаемый iskander, на данный момент, когда я пишу этот пост, у меня башка вообще не варит. И я просто не могу оценить накладные расходы на ПОЛНУЮ реализацию. Вот, я уже выкладывал свой вариант, на котором остановился, потому что он меня полностью устраивает.

https://yadi.sk/d/asFcGhYPrZITRA

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

А для быстрой демки при постоянных нулевых координатах края "несущих" панелей - конфетка! Просто и понятно.
alex-y
новенький
 
Сообщения: 12
Зарегистрирован: 14.05.2020 14:06:03

Re: Помогите разобраться с TImage

Сообщение olegy123 » 23.05.2020 06:21:10

alex-y писал(а): Если человек попросил приложение именно для компьютера, значит, для компьютера и надо делать. Если бы попросил для смартфона - я бы отказался, я с андроидом еще лет 8 назад нажрался неприятных продуктов и завязал.
Я привел простой пример реализации размещения одной кнопки на форме в популярной среде программирования, сколько нужно сделать операций для простого обычного программиста.

А тут выясняется запрос, мол хочу чтобы было то и то и еще в сверху то - и чтобы ничего сложного не было. Такого в жизни не бывает.
Либо наброски разных компонент и связи между ними, либо создать чистый TWinComponent - как это делают настоящие крутые перцы, максимум что нужно обработать событий по изменению размера, мышки и клавиатуры - разрисовать канву.
Лично я рисовал на Cario (его используют Firefox и Crome для рисования веб-контента у себя) и размещал итог на TWinComponent. В результате получил шикарный качественный компонент, все что хотел.
За исключением одного захотелось анимированные элементы - как в играх, не хватило скорости отрисовки. Там необходимы аппаратные скорости.


Ничего плохого лично я не вижу в написании с нуля компонента - коммерческие делфовские VCL, которым пользуются выше 95% Delph-овские программисты написаны с нуля.

Если не нравится инсталить в палитру компонент, возможно будет сложно для других программистов - то можно программно компонент размещать в продукте, тоже проблем не вижу.
olegy123
долгожитель
 
Сообщения: 1572
Зарегистрирован: 25.02.2016 12:10:20

Re: Помогите разобраться с TImage

Сообщение alex-y » 23.05.2020 16:17:49

olegy123 писал(а):Ничего плохого лично я не вижу в написании с нуля компонента - коммерческие делфовские VCL, которым пользуются выше 95% Delph-овские программисты написаны с нуля.


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

Закинул свой вопрос. Довольно быстро получил ответы, которые помогли, как минимум, не искать то, чего нет. Сделал так, как сделал. Но обратил внимание, что эта тема полезла в топ на форуме, много просмотров, поперло обсуждение. И, в принципе, я против бездарной и бездумной философии ни о чем. Это пустой флуд. И выработавшаяся привычкка "быть диджеем на виртуальной дискотеке" подталкивает хоть к какому-то регулированию прохождения полемики под "моим" постом.

Ну ладно, выдал я решение, выдал свое iskander - отлично! Коллекция рецептов пополняется, может, пусть и дальше такое происходит? Ведь, учитывая, что единственного идеального решения нет, лучше накопить подборку разных подходов, так?

Я ведь ничего не имею против компонента. Даже с установкой в палитру. Но, блин, неужели неясно, что оформлять все подряд в компоненты - это несколько расточительно. Ну вот, мне надо открыть какой-то текстовый файл с CSV-таблицей внутри. Максимум сотня строк. Имеет смысл создавать компонент-парсер для такого мини-отчета? Да еще и окружать его всей группой компонентов управления источниками данных? Какой смысл, если всего лишь надо подсчитать суммы по двум колонкам и показать, скажем, "обладателя первого места"?

Итак, именно моя задача, заявленная при старте - скроллинг картинки с параллельным скроллингом линеек. Создаем компонент. Какие будем свойства публиковать? Какие методы? Я вообще плохо себе представляю "план", схему такого компонента, как самостоятельной библиотеки. Получается больше ритуальных песнопений и камланий с бубном, чем работы на конечный результат. Поддержите уж полемику, набросайте такой компонент, пусть пойдет в коллекцию.
alex-y
новенький
 
Сообщения: 12
Зарегистрирован: 14.05.2020 14:06:03

Re: Помогите разобраться с TImage

Сообщение Снег Север » 24.05.2020 07:18:20

alex-y, вы теплое с мягким путаете. Если вы делаете просто обработку каких-то данных, вам компонент избыточен. Если же делаете отображение данных на форме в нужном вам виде - визуальный компонент самое то, поскольку он именно для такого предназначен. Еще современный вариант - если функциональность готового компонента немного не устраивает - написать к нему helper. Я детально не вникал в вашу задачу, но у меня сложилось впечатление, что ваши проблемы - от её неверной постановки. Вы пытаетесь сделать скроллбары частью изображения, а они должны быть частью "обвязки" изображения.
И как вам тоже уже сказали, вам ничто не мешает код собственного компонента сделать частью кода программы и вставлять компонент на форму в рантайме, без предварительной установки в палитру. Единственное неудобство - в дизаинтайме ваш компонент недоступен.
Аватара пользователя
Снег Север
долгожитель
 
Сообщения: 2547
Зарегистрирован: 27.11.2007 16:14:47

Re: Помогите разобраться с TImage

Сообщение alex-y » 24.05.2020 10:29:22

Снег Север
Как гласит народная мудрость - "голодной куме все хлеб на уме". Ну ладно, пройдемся вкратце, пытаясь соблюдать и кошрут, и халяльность, с призыванием имен Ктулхи и ктулхиной дочки...

Снег Север писал(а):Я детально не вникал в вашу задачу


Вот чесслово, надо было вникнуть, там вникать не во что. Изначальная постановка вопроса выглядела так. Есть ли в штатном TImage лазаруса поля, позволяющие задать положение картинки внутри окна компонента. Ответ - нет. Почему так категорично, см. ниже. От этого места и пошла пляска, поскольку я озвучил одно из условий, а именно - никаких сторонних компонентов. В общем, программу я написал, клиент доволен, а как она внутри устроена, его не волнует.

Но вдруг пришлось в Вашем лице и в лице еще одного товарища столкнуться с партией непримиримых компонентщиков. Бывает и хуже, а вам я так скажу. Если уж вы навязываете так агрессивно свой стиль программирования (при этом, справедливости ради, заметим - не предлагая ничего, просто сотрясая воздух демагогией), так самым правоверным путем было бы для начала посмотреть исходник.

В нашем случае нас исходник TImage не волнует, этот класс полностью наследует TCustomImage, у которого нет ни одного published-свойства, так вот, определение класса TImage только и делает, что объявляет такие свойства. Итак, исходник TCustomImage, метод Paint

Изображение

Быстрый анализ показывает, что там и правда, нет никаких попыток позиционирования картинки, а рисование выполняется методом StretchDraw канвы. Следовательно, чтоб все было умилительно, нам (по первичной постановке задачи) нужно лишь создать компонент, полностью наследующий TCustomImage, добавитть пару полей (property) - типа OriginX и OriginY, например, обвязать их методами read и write, перекрыть метод Paint, а потом, скопипастив основной код, внести небольшие правки, учитывающие эти два поля. Вот и все печали!

Давайте заканчивать пляску с компонентным подходом, ладно?
alex-y
новенький
 
Сообщения: 12
Зарегистрирован: 14.05.2020 14:06:03

Re: Помогите разобраться с TImage

Сообщение Снег Север » 24.05.2020 11:05:45

alex-y, заканчивайте пляску, но тогда какого... вы тут вопросы задаете?
Аватара пользователя
Снег Север
долгожитель
 
Сообщения: 2547
Зарегистрирован: 27.11.2007 16:14:47

Пред.

Вернуться в Lazarus

Кто сейчас на конференции

Сейчас этот форум просматривают: Yandex [Bot] и гости: 7

Рейтинг@Mail.ru