Добро пожаловать к нам в гости! Наш сайт посвящён программе NeoBook, с помощью которой вы легко сможете создавать собственные мультимедиа-приложения без необходимости изучать сложные языки программирования! Зарегистрируйтесь, чтобы стать членом нашего сообщества.
Ну, видишь как хорошо получилось. И трекбар в дело пошел и переменную можно использовать.
Добавлено (04 Августа 2023, 21:45) ---------------------------------------------
Цитатаfrolandr ()
если все хорошо перенесу ссылку в первую тему.
Где трек бар, может лучше написать "ниже" и "выше", или вообще надписи убрать? А то я как то сижу и жду когда надпись высокое на низеое изменится при маленьком значении, а она все высокое и высокое.
Переменная если введена без скобок, так без скобок и остается. Ох и наобжигался я на этом когда только начинал. Ни как в толк не мог взять, все правильно, а не работает.
А значение только цифры, или буквы тоже можно вводить?
Добавил несколько команд для сохранения скриншотов в Clipboard и получения изображения из него с сохранением в файлы. Можно просто сделать скриншот кнопкой PrintScreen на клавиатуре, а плагином получить это изображение из буфера и сохранить в файл, или обработать каким-то другим плагином. Может кому понадобятся эти команды.
Цитатаmishem ()
Где трек бар, может лучше написать "ниже" и "выше", или вообще надписи убрать? А то я как то сижу и жду когда надпись высокое на низеое изменится при маленьком значении, а она все высокое и высокое.
Хмм, только сейчас увидел, добавленный тобой позже текст. Видел дату 4 августа, прочитал первую часть, затем смотрел, вижу, что дата так и осталась 4 июля, значит не было новых постов. Можно и изменить, наверное в след. обновлении так и сделаю.
Цитатаmishem ()
Переменная если введена без скобок, так без скобок и остается. Ох и наобжигался я на этом когда только начинал. Ни как в толк не мог взять, все правильно, а не работает.
А как должно быть? Что ввел так и сохраняется. Поясни подробнее... Посмотрел несколько плагинов - не понял, а вот посмотрел встроенные команды работы со строками, то понял. Если ввести вместо переменной просто текст, то добавляются квадратные скобки, другое дело, что и кириллические символы в скобки заключаются и даже числа, а это уже будет ошибкой.
Цитатаmishem ()
А значение только цифры, или буквы тоже можно вводить?
Можно вводить и буквы. Сначала была проверка и в переменную ошибки выводилась информация, а скриншот не создавался. Затем Андрей, тот который AS3856 написал, что если введена не цифра, то все же лучше делать скриншот, но качество сохранение ставить в 100. Ну а сообщение, которое выводилось в переменную ошибки теперь выводится в переменную предупреждения faWarnings.
Сообщение отредактировано frolandr - Ср, 09 Августа 2023, 23:13
другое дело, что и кириллические символы в скобки заключаются и даже числа, а это уже будет ошибкой.
Нет. Это не будет ошибкой. Там где должна быть именно переменная, любой введенный текст заключается в скобки. Там где возможны как переменная, так и значения, в скобки не заключается.
Например: "Сохранить значение в переменной:" Здесь в любом случае должна быть переменная. НБ принимает в любом виде названия переменных, и в кирилице, и в латинице и в цифрах.
В твоем случае "Указать переменную:", значит тоже, здесь не может быть какого нибудь значения, только имя переменной. Скобки не критично, но для новых, не опытных пользователей удобно и остерегает от не предвиденных синтаксических ошибок. А это на первых "парах" самые распрастраненные ошибки и встречаются на много чаще чем логические. И ищутся на много сложнее. Vаriable <> Variale. В первом слове первая "а" кириллицей. Можешь в блокноте проверить. Найдет только одно какое нибудь слово.
Цитатаfrolandr ()
Можно вводить и буквы. Сначала была проверка и в переменную ошибки выводилась информация, а скриншот не создавался.
Вообще то эта проверка должна происходить на стадии проектирования. Т.е. когда проект запускается. Если выбран трекбар и указаны не цифры, сообщение о том, что в написании команды допущена ошибка. Типа как когда прямоугольник например не указан.
Цитатаfrolandr ()
то все же лучше делать скриншот, но качество сохранение ставить в 100.
Здесь соглашусь. Вообще, на мой взгляд, везде должны быть на случай не предвиденной ошибки значения по умолчанию. Ошибка ошибкой, но программа должна все равно отработать. Т.е. конечный результат должен быть в любом случае.
Имхо, плагины предназначены для облегчения программирования. Т.е. вся программа рассчитана на пользователей, которые понятия не имеют как программировать но хотят сделать свою программу. Если на первых "парах" у них все получается, то интерес становится с каждым разом больше. А значит и опыта больше. Если с первого проекта начинают "сыпаться" ошибки, то и интерес пропадает. В самой НБ это организовано на высшем уровне, в плагинах люди упускают этот момент. Возможно просто забывают, как они сами начинали.
На мой взгляд, когда сомневаешься как правильно сделать, самое простое подсмотреть в НБ или плагинах NeoBookDBPro и NeoBookFMFTP. И все вопосы отпадают сами собой. Не хочешь читать хелп?
Изменил тексты по сторонам трекбара и добавил присоединение скобок для переменной.
Цитатаmishem ()
Переменная если введена без скобок, так без скобок и остается. Ох и наобжигался я на этом когда только начинал. Ни как в толк не мог взять, все правильно, а не работает.
Я обычно сначала две скобки ставлю [] затем уже между них имя переменной пишу . Ошибку можно допустить где угодно. Сейчас в плагине, как и во встроенных командах NEO добавляются скобки, они добавляются и на число [12345] и здесь можно допустить ошибку.
Цитатаmishem ()
Вообще то эта проверка должна происходить на стадии проектирования.
Соглашусь, часть введенных данных можно проверить, но содержимое переменной нельзя проверить на этой стадии, только при тестировании. К примеру, в окне помощнике ввел программист определенные данные и нажал кнопку Ок. В ответ получил подчеркивание полей красным цветом, где введены не те данные. Если данные введены не переменной, то можно проверить и на тип данных и путь к файлу и существование чего-то. Другое дело, что не кто не запретит программисту вводить или изменить данные без окна помощника, прямо в созданной команде. Тогда уже проверка только после запуска проекта.
Цитатаmishem ()
Имхо, плагины предназначены для облегчения программирования.
Наверное правильнее сказать, что плагины предназначены для расширения функциональных возможностей NEO. Сужу по себе конечно, когда начинал, то плагинами не пользовался, команд НЕО было достаточно, чтобы решать большинство потребностей. Когда нужно было что-то особенное начал смотреть в сторону плагинов, но в 2008-2009 годах их были единицы и как обычно то, что было нужно, то было платно. По этому и приходилось писать кое-какие плаги для себя.
Сообщение отредактировано frolandr - Ср, 09 Августа 2023, 22:58
но содержимое переменной нельзя проверить на этой стадии, только при тестировании
А тебе и не надо проверять содержимое, об этом уже должен думать тот, кто будет писать свою программу, там он уже должен учесть, что пользователь может поместить в переменную.
Цитатаfrolandr ()
когда начинал, то плагинами не пользовался
Обычно наоборот, когда начинают, ищут плагин, что бы сделал одной командой всю намеченную работу. Минимум кода, максимум возможностей. А вот со временем, когда понимают и могут читать код, начинают делать средствами НБ. И то не всегда.
Цитатаfrolandr ()
Сужу по себе
Ты то, на сколько я понял, уже имел представление о программировании. А я когда начинал, вообще ничего не смыслил. Для меня "Привет мир", было грандиозное достижение. Не хочешь читать хелп?
Дата: Вт, 12 Сентября 2023, 22:43 | Сообщение # 36
Участник
Проверенные
Сообщений: 207
Offline
Обновил плагин до версии 1.6. Для упрощения и удобства сделал так, что при создании снимка можно сразу выбрать формат изображения с сохранением в файл с расширением соответствующего формата. Создание снимка экрана или окна программы в Clipboard объединил в одну команду. Показать / скрыть панель также объединил в одну. В результате количество команд сократилось c двадцати до восьми. Ссылка на плагин и демку.
frolandr, тут на оффоруме вопрос задали, полез искать твой плагин. Наткнулся на команду faClipboardToFile . Решил проверить, так как бился дня три с консольками NConvert и ImageMagick. Думал утебя может нормально работает. Увы, та же проблема.
При копировании в буфер теряется альфа канал.
Что бы понять о чем я, зайди к примеру на этот сайт, или какой нибудь другой, где есть прозрачные картинки (значки, иконки). На изображение правой кнопкои и выбери Копировать картинку.
Примени команду плагина faClipboardToFile и увидишь проблему.
Это небольшая вспомогательная утилита для исправления моей досадной проблемы с Photoshop на Windows — тот факт, что он не обрабатывает прозрачность.
Она сохраняет изображение как файл .png (расположенный в %TEMP%\clip.png) и возвращает 0, если это удалось, и 1, если нет.
Используя это, вы можете, например, перехватывать нажатия Ctrl+V, когда Photoshop открыт, а затем, если ClipboardToPNG вернул 0, запустить действие Photoshop, которое вставит временный файл, в противном случае выполнить стандартную вставку.
Плагин Дембеля dmCMDLine не возвращает ничего, ни 0, ни 1. Но проверять можно папку темп на существование файла clip.png.
Так что если будет время, покопайся... Может исправишь?
Не плохо было бы еще добавить получение информации об изображении. Размеры, битность, DPI, количество цвета ...
Смотрел Андрея плагин asPicture3. У него с прозрачностью все замечательно, но есть другие проблемы. Но об этом уже в другой теме...
Приветствую! Пытался отправить в личку, но не понял получилось или нет. Вот ссылка на не упакованный плагин: https://disk.yandex.ru/d/xNw0urmawuIYcQ Дописал пару строк, у меня появилась прозрачность.
Попробуй вставить в объект Рисунок с такими параметрами.
И скачай этот рисунок и попробуй открыть его.
Если из буфера твоим плагином, будет черный фон. Я пробовал с того же сайта копировать что выше давал. Сохраняет с прозрачным фоном, а в объекте рисунок, если не устанавливать прозрачность, откроется с черным.
Этот же рисунок что ниже открывается прозрачный.
Есть какие то тонкости мне не известные. А нужно что бы с такими параметрами открывался прозразрачный.
Сейчас попробовал в фотошопе. Тоже черный фон при открытии.
Да, есть такое. Программы просмотра изображений в частности IrfanView отображают изображение прозрачным, а Фотошоп и Необук на черном фоне. В посте выше написал, что добавил пару строк, но посмотрел плагин, а оказывается одну строку пропустил, дописал, но результат не поменялся. Пробовал еще варианты. Дело в том, что в прозрачность в PNG файле задает первый пиксел, но прозрачность можно получить и указав какой именно цвет сделать прозрачным. Так вот принудительно указал прозрачный цвет - черным, но результат прежний. Попробовал на прямую, т.е. скопировал файл в буфер и сразу открыл его в Фотошоп, так вот тот же черный фон. Получается в плагине вроде как и нет ошибки, так как фотошоп сам из буфера обмена делает черный фон.
Пишу в c++builder, прозрачность делал так: bmp->Transparent=true; bmp->TransparentMode=tmAuto;
Принудительно делал так: bmp->TransparentMode = tmFixed; //фиксированное значение цвета bmp->TransparentColor = clBlack; //черный цвет в прозрачный
Скопировал то изображение, которое у тебя прозрачное, у меня все равно оно в Фотошоп с черным фоном.
Поискал по форумам, нашел такой ответ: --- Браузер копирует изображение в буфер обмена в формате 24bpp. Что превращает прозрачность в черноту. Вы можете получить формат 32bpp из буфера обмена, но для этого требуется обработка формата DIB. Для этого в системе нет встроенной поддержки. ---
Что интересно, если посмотреть обычными средствами, то они показывают, что файл 32bpp, но если смотреть графической программой, то файл 24bpp, файл изображения загрузил.
Думаю в этом проблема, к сожалению конвертировать с налета 24->32 не получилось, нужно искать решение, к сожалению пока нет времени.
Всяко пробовал, не получается в 32 переделать, на некоторых изображениях почему то каналы меняются, из-за чего изображение стало зеленым, а вот прозрачность так и не получилась.
Спасибо, примерно так и делаю. В clipboard содержится bitmap, создаю новый png 32 битный с альфа каналом, но в обменнике изображение 24 битное, при Assign(Clipboard()) оно просто накладывается на пустое прозрачное изображение. Нужно 24 конвертировать в 32, но что-то идет не так, почему то у меня вообще пустой некорректный файл получается.
Хотел проверить еще так: взял 32 битный png, средствами виндовс скопировал его, но видимо он копируется в какое-то другое место, потому что плагин не обнаружил изображение в обычном clipboard. т.е. Иначе можно было бы проверить как плагин обрабатывает 32 битный png.
Код из исходника при нажатии на кнопку вставить избуфера
Код
procedure TFmMain.btnPasteClick(Sender: TObject); var p: TPicture; begin if not Clipboard.HasFormat(CF_PICTURE) then begin MessageDlg('The clipboard has no image!', mtError, [mbOk], 0); Exit; end;
p := TPicture.Create; try TMyClipboard(Clipboard).AssignTo(p);
finally if Sender = btnPaste then SetGraphic(0, p.Graphic) else SetGraphic(1, p.Graphic);
FreeAndNil(p); end; end;
procedure TFmMain.pbPaint(Sender: TObject); var bmp: TBitmap; rct: Trect; pbx: TPaintBox; src: TBitmap; start, stop, freq: Int64; begin if not (Assigned(FPNG))then Exit;
if Sender is TPaintBox then pbx := Sender as TPaintBox else pbx := pb;
// получить битмап пропорционально ранее созданному PNG src := LoadBitmapFromGraphic(Image2.Picture.Graphic, FPNG.Width); QueryPerformanceFrequency(freq); QueryPerformanceCounter(start);
try // если не 32 бита, две следующие функции с таким // битмапом работать не будут src.PixelFormat := pf32Bit; // сделать картинку полностью прозрачной src := SetBitmapAlpha(src,0); // перенос альфа-канала src := SetPngAlphaToBitmap(FPNG, src); // в конце, установка альфа формата src.AlphaFormat := afDefined; // посчитать время QueryPerformanceCounter(stop); Label1.Caption := FormatFloat('###,##0.###',1000*(stop - start)/freq)+' msec';
// получить пропрциональный размерам окна прямоугольник rct := GetProportRect(GetImageRect(src), rct.Width, rct.Height); // отцентрировать его rct := CenterInRect(pbx.ClientRect, rct);
with bmp.Canvas do begin Brush.Color := clWhite; FillRect(ClipRect); StretchDraw(rct,src); Brush.Style := bsClear; Pen.Color := clBtnShadow; Rectangle(ClipRect); end;
Этот кусок кода на Делфи, я не могу его полностью перевести в c++builder. Начал, но не пойму что это такое: TMyClipboard(Clipboard).AssignTo(p); Если это класс, то с классами в среде я даже не пробовал работать. На сколько я мог прочесть в нем производится получение изображения из обменника и отрисовка его на канве. Конвертации из 24 бит в 32 здесь нет.
Повторюсь нужно конвертировать изображение, без этого оно не будет отображаться в Фотошопе с прозрачностью. Просто попробуй скопировать изображение с того сайта, что ссылку давал выше, затем открой Фотошоп, создай документ с прозрачностью и вставь изображение из обменника через Редактирование->Вставить. Изображение будет как и в плагине с черным фоном. Потому что он тоже его не переводит в 32бит, а вставляет что есть.
//преобразовать в 32-битный формат BITMAP bm; GetObject(hbitmap, sizeof(bm), &bm); int w = bm.bmWidth; int h = bm.bmHeight; char *bits32 = new char[w*h*4];