Ru-Board.club
← Вернуться в раздел «Прикладное программирование»

» Компоненты и утилиты для Delphi/BCB/FreePascal/Lazarus

Автор: Ludens
Дата сообщения: 12.11.2011 20:49

Цитата:
Телепатов здесь скорее всего нет.

Зато есть любители кидать понты банальности вроде "телепатов здесь нет".
Я никого не просил анализировать причины, по которым у меня не получилось, — поэтому телепаты тут не требуются. Я спрашивал про совсем другое.

Добавлено:

Цитата:
может быть есть смысл задать вопрос в ньюсгруппе разработчика?

нет смысла, потому что этот вопрос там давно задан (я приводил ссылку), и ответа нет
Автор: Arvur
Дата сообщения: 12.11.2011 23:25
Ludens
Странный вы человек, право слово. Ну да это не мои проблемы...


Цитата:
нет смысла, потому что этот вопрос там давно задан (я приводил ссылку), и ответа нет

Вы приводите ссылку на решение, признанное рабочим, и говорите "не получилось". Сомневаюсь, что по такому описанию проблемы вам кто-то сможет помочь.
Автор: VikLabel
Дата сообщения: 13.11.2011 08:59
Ludens
Попробуй поиск, нашёл например в поиске >>> (регистрация), Ещё TB2000 for XE >>> можно пошаманить (XE и XE2 рядом).
Может подойдут, не пробовал. Поиск выдал кучку ссылок, работы (проверки) на неделю хватит!
Ещё есть тема на sql.ru, правда старенькая, но есть личка, может там помогут! Удачи!
Автор: Ludens
Дата сообщения: 13.11.2011 11:49
VikLabel

Цитата:
Попробуй поиск

Конечно, конечно, я его пробовал. Но не нашел того, что искал, — ГОТОВОГО РЕШЕНИЯ. Идея создать такое решение самостоятельно — не очень меня вдохновляет, поскольку я не профессионал, а популярность TB-компонентов в мире велика, и мне казалось, что кто-нибудь поопытней меня уже должен был бы радикально решить эту несложную задачу. Потому я и обратился в данную ветку.
И, кажется, таки нашел то, что искал! Спасибо тебе, VikLabel! Дело не в том, что ты умеешь гуглить лучше меня, а в том, что ты сделал это на пару дней позже меня. :) За эти пару дней необходимое решение, похоже, появилось в Сети. Я еще не успел его потестировать, но тороплюсь сообщить ссылку на блог автора, найденного по наводке VikLabel:
http://www.armin-pfaeffle.de/blog/2011/11/toolbar2000-and-sptbx-for-delphi-xe2/
Там можно скачать без регистрации.

Upd: У меня все компоненты установились на XE2 без единого варнинга. Все работает прекрасно. Слава Джордану Расселу и его последователям!
Автор: Ludens
Дата сообщения: 14.11.2011 18:20
А вот еще одна "классическая" библиотека (говорят, идеально приспособлена для работы в связке с tb2k + SpTBXLib), которую недавно профессионально адаптировали под XE2:

PngComponents

У меня встала и работает безукоризненно.

Для тех, у кого нет аккаунта на абракадабре:
pngcomponents_for_delphi_2009_xe2.ZIP
Автор: kyamboj
Дата сообщения: 18.11.2011 09:10
Если шо там в этих PngComponents утечка, при вызове Clear а затем наполнении.
Автор: Ludens
Дата сообщения: 18.11.2011 09:26
kyamboj
напиши сборщику, пусть поправит. Хотя, возможно, это не его бага, а разработчика оригинала.
Автор: kyamboj
Дата сообщения: 18.11.2011 22:50
Ludens

Проще его создавать динамически при наполнении и уничтожать вместо очистки чем писать репорт ...
Ну а когда он юзается как икон холдер для контролов то итак сойдёт.
Автор: Ludens
Дата сообщения: 18.11.2011 23:45
kyamboj
ну, меня-то лично интересует эта библиотека только в качестве, как ты выразился, иконхолдера. :)
Но должны же мы заботиться об общей карме. Если ты обнаружил у кого-то баг, то нельзя это так оставлять. Ну, давай я ему напишу. Только объясни поточнее, чтО и в каком конкретно компоненте.
Автор: kyamboj
Дата сообщения: 21.11.2011 20:10
Использовал TPngImageList, загружал в него иконы то ли через
AddPng то ли через AddIcon, ну и вроде всё нормально было, потом решил тест драйв устроить проекту, в результате теста в PngImageList загружалось по 1000 икон потом вызывался Clear потом опять загружалась 1000 икон ну и так далее.

Потом через диспечер задач подметил что размер выделенной памяти процессу после каждого цикла "+1000; Clear;" увеличивается на несколько килобайт (то ли на 30 то ли на 300 точно не помню ) ...

Потом установил что дело именно в TPngImageList, а именно в том что после вызова Clear
всё же где то чего-то остаётся, хотя все иконы удаляются.

FastMM не использовал...

Автор: Ludens
Дата сообщения: 22.11.2011 10:14
kyamboj
Попытался воспроизвести твой тест. Сделал так:

Код:
procedure TForm1.PngBitBtn1Click(Sender: TObject);
var
I: Integer;
begin
for I := 0 to 4967 do PngImageList1.AddPng(PngBitBtn1.PngImage);
PngImageList1.Clear;
end;
Автор: kyamboj
Дата сообщения: 22.11.2011 22:18
Ludens
Тогда возможно это было с AddIcon ... ( может моя ошибка была, но это я исключаю хотя уже не смогу воспроизвести всех условий )

В любом случаи после D2009 уже нет смысла в PngImageList теперь он часть ImageList

http://blogs.embarcadero.com/nickhodges/2008/08/13/39100



Код:
XE2 :

uses
Vcl.Imaging.pngimage;

var Png: TPngImage; // TPngImage = class{$IFDEF UseDelphi}(TGraphic){$ENDIF}
Автор: Ludens
Дата сообщения: 23.11.2011 15:15
kyamboj

Цитата:
после D2009 уже нет смысла в PngImageList теперь он часть ImageList

Ты в этом уверен? Я пробовал подгружать png-иконки в ImageList — они подгружаются, но, похоже, конвертируются при этом в bmp и теряют альфа-канал. Именно поэтому, как мне казалось, сохраняется большой смысл в PngComponents.
Автор: Arvur
Дата сообщения: 23.11.2011 15:26
Ludens

Цитата:
Я пробовал подгружать png-иконки в ImageList — они подгружаются, но, похоже, конвертируются при этом в bmp и теряют альфа-канал.

В Delphi XE png с альфа каналом точно работают. Не забываем

Код: ImageList.ColorDepth := cd32Bit;
Автор: kyamboj
Дата сообщения: 23.11.2011 15:55

Цитата:
Ты в этом уверен? Я пробовал подгружать png-иконки в ImageList — они подгружаются, но, похоже, конвертируются при этом в bmp и теряют альфа-канал. Именно поэтому, как мне казалось, сохраняется большой смысл в PngComponents.


У меня в компонент едиторе XE2 галочка есть "стиль XP (c альфа каналом)" чекаю и png c альфой

А если без едитора грузить с альфой то так :

Цитата:

uses
Vcl.Imaging.pngimage;
...
object ImageList1: TImageList
ColorDepth = cd32Bit
DrawingStyle = dsTransparent
end
...
var
Bmp: TBitmap; png: TPngImage;
....
Bmp:= TBitmap.Create;
png:= TPngImage.Create;
png.LoadFromFile( OpenPictureDialog1.FileName );
png.CreateAlpha;
png.Transparent := True;
bmp.Assign(png);
ImageList1.AddMasked(bmp, clNone);
png.Destroy;
Bmp.Destroy;
...


другое дело в каком формате хранятся иконы в самом компоненте, это я хз тут проверять надо.
зы: Хоть это ни о чём не говорит но компонент едитор предлагает экспорт иконок в bmp и png.
Автор: Ludens
Дата сообщения: 24.11.2011 09:02

Цитата:
другое дело в каком формате хранятся иконы в самом компоненте

Боюсь, что все-таки в bmp. То есть png для внутреннего представления преобразуется в bmp и на экран выводится как bmp. Мне так кажется. Ну вот, хоть убей, есть такое ощущение, что png-иконки, загруженные в штатный ImageList, выглядят как-то чуть-чуть подпорченными. Или это у меня в глазах глюки? Фиг знает. Но очень хочется, чтобы кто-нибудь уже наконец внес окончательную ясность в этот вопрос. Либо у меня оптическая иллюзия, и для иконок, изначально полученных в png-формате, нет НИКАКОЙ РАЗНИЦЫ между ImageList и PngImageList. Либо PngImageList в чем-то лучше, и использование библиотеки PngComponents все-таки иногда имеет сиысл.
Автор: Arvur
Дата сообщения: 24.11.2011 10:15
Ludens

Цитата:
Боюсь, что все-таки в bmp. То есть png для внутреннего представления преобразуется в bmp и на экран выводится как bmp. Мне так кажется. Ну вот, хоть убей, есть такое ощущение, что png-иконки, загруженные в штатный ImageList,  выглядят как-то чуть-чуть подпорченными.

Именно так, в bmp. И там действительно есть потери при преобразовании, но насколько я понял они крайне малы. На практике разницы не ощущаю.
Автор: Ludens
Дата сообщения: 24.11.2011 12:09
Arvur

Цитата:
Именно так, в bmp. И там действительно есть потери при преобразовании

А при использовании PngImageList из PngComponents? Там изображение тоже переводится в bmp или нет?
Автор: Arvur
Дата сообщения: 24.11.2011 12:51
Ludens

Цитата:
А при использовании PngImageList из PngComponents? Там изображение тоже переводится в bmp или нет?

Мне кажется, там честная работа с png. Но я туда заглядывал ну очень давно.
Автор: Ludens
Дата сообщения: 24.11.2011 16:16

Цитата:
Но я туда заглядывал ну очень давно.

А я — недавно. :) Но ни хрена не понял. :(
Автор: kyamboj
Дата сообщения: 24.11.2011 18:47
----
Автор: kyamboj
Дата сообщения: 25.11.2011 02:16
--
Автор: 0D0A
Дата сообщения: 25.11.2011 02:44
Давно разбирался с TPngImageList. Коротко. Про хранение: TImageList использует WinAPI ImageList_Write для записи картинок. В каком формате непонятно, точно не bmp, ico или png. Выставление ColorDepth меняет хранимые данные, так что 100% исходная информация изменяется. TImageList.Draw рисует при помощи ImageList_Draw. Наверно пытается нарисовать, то что сохранено, не учитывая параметры устройства вывода (иначе зачем было коверкать сохраняемые данные?). Вообщем контролировать в рантайме мы это не можем. В результате, для картинок с альфаканалом получаем качество от приемлемого до убогого.
TPngImageList хранит оригинальный png. Следовательно, во первых, мы сами можем контролировать в рантайме как рисовать (используя его свойство PngImages (TPngImageCollectionItems)). Потом... при загрузке, TPngImageList создает системный ImageList, конвертируя пнг в иконки PngToIconXX - это на случай если кто-то захочет рисовать напрямую через ImageList_Draw(TPngImageList.Handle). Но в 99% эта конвертация не нужна, так как TPngImageList.Draw не использует ImageList_Draw, а рисует напрямую и без косяков при помощи TPngImage.Draw. Следовательно, если не испльзуются прямые вызовы ImageList API, то копирование пнг в иконки можно вообще закоментарить. Выводы: на 99% TPngImageList ничего общего с TImageList не имеет, а хитро им прикидывается, храня оригинальный пнг и используя для рисования не ImageList API, а методы TPngImage. Короче, к чему я это... не используйте стандартный TImageList для пнг
Автор: Ludens
Дата сообщения: 25.11.2011 08:11
kyamboj
0D0A
спасибо, мужики, наконец-то нарисовалось исчерпывающее разъяснение.
Из него для себя я делаю следующий вывод: поскольку лично я трепетно отношусь к мелочам, деталям и нюансам UI, то, пожалуй, продолжу использовать PngImageList из библиотеки PngComponents — тем более, появился ее мод (http://cc.embarcadero.com/Item/26127) с подержкой XE2 и небольшими усовершенствованиями интерфейса.
Как контейнер иконок, PngComponents особенно хороша в комплекте с SpTBXLib, где каким-то волшебным способом реализовано высококачественное отображение png-иконок в режиме Disabled без использования отдельных иконок, специально нарисованных для этого режима.
Кстати, 0D0A, когда-то ты подарил мне свой ребилд старых PngComponents, откуда вычищено все лишнее (то есть все, кроме TPngImageList :)). Не сделал ли ты аналогичную чистку новой версии?

Добавлено:
А что находится в директории C:\Program Files\Common Files\CodeGear Shared\Images\GlyFX\Icons\PNG, которая упомянута в ссылке от kyamboj (http://blogs.embarcadero.com/nickhodges/2008/08/13/39100)?
У меня такой директрории нет (возможно, это из-за использования Lite-версии XE2). Не затруднит ли того, у кого она есть, выложить сюда ее содержимое?
Автор: Arvur
Дата сообщения: 25.11.2011 10:18
Да... Познавательная дискуссия. Надо к PngImageList возвращаться, хотя обычный пока и не косячил.

kyamboj зачем посты-то потер? Конвертировать png через иконки тоже полезное решение. И пофигу, что это эксперт. Важна идея.

Ludens

Цитата:
каким-то волшебным способом реализовано высококачественное отображение png-иконок в режиме Disabled

Загляни в файлик PngFunctions. Там полезные функции MakeImageGrayscale и MakeImageBlended. Вроде бы в SpTBX еще рельефность накладывается (emboss), но это не знаю чем.

Цитата:
А что находится в директории C:\Program Files\Common Files\CodeGear Shared\Images\GlyFX\Icons\

Там бесплатные для пользователей Delphi иконки от GlyFX. В Delphi XE аж два набора - XP и Aero. В bmp и png форматах. Собственно вот они:
_http://www.glyfx.com/shop/listing/xp-icon-sets/
_http://www.glyfx.com/shop/listing/vista-icon-sets/
Автор: Ludens
Дата сообщения: 25.11.2011 11:33

Цитата:
Собственно вот они:

там они за деньги
Автор: Arvur
Дата сообщения: 25.11.2011 11:40
Ludens

Цитата:
там они за деньги

Дык это я чтобы посмотреть можно было. Если нужны - спроси в варезнике, я сейчас выложить не смогу.
Автор: 0D0A
Дата сообщения: 25.11.2011 17:27
Ludens
Я пока сижу на ХЕ, 64-битного пока ничего не надо, так что PngImageList примерно такой же. Используется только как хранилище задпных в design time картинок привязанных к свойставм Images итп. других компонентов. В рантайме его не дергаю, так что все связанное с этим убрано
Автор: kyamboj
Дата сообщения: 25.11.2011 19:44
Меня не слушайте, я какую-то пургу прогнал... как стал проверять то чего понаписал так понял что ничего не понимаю ... в дурку пора лечится от привычки сначала писать потом проверять

Целый день возился так и не понял почему ComponentEditor от CnPack-а умеет засовывать в обычный ImageList иконы с качеством как у TPngImageList ...
В ручную все иконы засовываютcя в ImageList но почему-то они более тёмные чем если это делать через Editor Cnpack-a, кто знает почему ?


XE2 Глифы лежат в C:\Program Files (x86)\Embarcadero\RAD Studio\9.0\Images\GlyFX\glyFX.zip
но это "Embarcadero Special Edition sets" а не то чего хотелось бы.
Если кому надо вот сцыль http://zalil.ru/32134371

Добавлено:

Цитата:
не используйте стандартный TImageList для пнг


Если только не стоит CnPack
Автор: Ludens
Дата сообщения: 25.11.2011 20:17
kyamboj

Цитата:
Если только не стоит CnPack

Ну вот... Только появилась, казалось бы, ясность, как ты пришел и все испортил... Опять, что ли, мучиться сомнениями? :)

Страницы: 12345678910111213

Предыдущая тема: AutoCad 2005/VBA


Форум Ru-Board.club — поднят 15-09-2016 числа. Цель - сохранить наследие старого Ru-Board, истории становления российского интернета. Сделано для людей.