Добро пожаловать к нам в гости! Наш сайт посвящён программе NeoBook, с помощью которой вы легко сможете создавать собственные мультимедиа-приложения без необходимости изучать сложные языки программирования! Зарегистрируйтесь, чтобы стать членом нашего сообщества.
Плагин для создания скриншота рабочего стола или его части, а также снимков активных окон программ. Можно сделать снимок только клиентской части приложения, без меню, полос прокруток и пр. Сохраняет снимки в файлы bmp, png и jpg с возможностью выбора качества сохранения. Во время работы скомпилированного проекта плагин проверяет некоторые параметры и выводит сообщения о возможных ошибках в переменную faErrors. Демка прилагается. Об ошибках, недочетах, пожеланиях усовершенствованиях прошу писать здесь на форуме.
Список команд плагина:
Снимки с сохранением в файлы faScreenShot - Сделать скриншот экрана (рабочего стола) и сохранить его в файл формата BMP, PNG или JPG. faScreenShotArea - Сделать снимок выбранной области экрана (рабочего стола) и сохранить его в файл формата BMP, PNG или JPG. Отсчёт координат ведется от верхнего левого угла экрана. faSnapShotWindow - Сделать снимок активного окна программы и сохранить его в файл формата BMP, PNG или JPG. faSnapShotAreaWindow - Сделать снимок только клиентской области программы (без меню, полос прокрутки и пр.) и сохранить его в файл формата BMP, PNG или JPG.
Снимки и буфер обмена faClipboardClear - Очистить буфер обмена Clipboard. faSnapShotToClipboard - Сделать скриншот экрана или снимок активного окна программы и поместить его в буфер обмена Clipboard. faClipboardToFile - Сохранить снимок сделанный с помощью плагина, другой программы или кнопкой PrintScreen из буфера обмена Clipboard в файл BMP, PNG или JPG.
Панель задач faTaskbar - Показать / скрыть панель задач. Воспользуйтесь этой командой, если нужно сделать скриншот экрана без панели задач. Не забудьте вернуть панель обратно!
плагин конечно работает, но неплохо бы дописать формат расширения после выбора имени файла.Это можно сделать программно в теле плагина , а не проверять каждый дописано расширение или нет. Добавить к командам команду выбора прямоугольника для снимка и делать снимок любой области экрана( это несложно) . Добавить дополнительно формат для сохранения *.PNG . Ну и в качестве опции - можно делать чёрно-белые изображения, добавить возможность добавлять надпись ( например дату или ещё что то) - Тема большая ..... При превышении степени сжатия скриншота сделай максимально возможную степень сжатия и выводи в переменную сообщение. ( при отрицательных значения - соответственно минимальное сжатие и сообщение в переменную) Кстати - имя переменной желательно назначать самому юзеру а не автору плагина.
Добавлено (19 Июня 2023, 21:31) --------------------------------------------- Если вместо степени сжатия будет что то другое - плаг делает снимок с максимальным сжатием , но в переменную ничего не приходит( ну хоть пусть вякнет что не комильфо идёт какое то)
Добавлено (19 Июня 2023, 21:33) --------------------------------------------- В форме помощника кода добавить кнопочки выбора переменных. Для совсем малоопытных это помощь.....
Добавлено (19 Июня 2023, 21:33) --------------------------------------------- и удобство
Сообщение отредактировано AS3856 - Пн, 19 Июня 2023, 21:24
В команде скриншота всего экрана была ошибка. Дело в том, что начиная с Виндовс 8.1 у пользователя появилась возможность устанавливать масштаб. Вот я не учел этого, по этому размер экрана определялся немного не верно. В "чужих" плагинах тоже такая ошибка, видимо делались они давно и также не было учета масштабирования. Долго я искал в WinApi как получить этот параметр, первоначально даже из реестра вынимал, однако если изменить масштаб, то в реестре изменения вступали только после перезагрузки. Позже нашел возможность получать размеры. В новой версии эту ошибку исправил.
Команду скриншота выбранной части экрана начал писать сразу после размещения первой версии. По этому проверок в нем еще больше :), помимо переменной faErrors ввел еще и faWarnings, в которую выдаются предупреждения. Пока выкладываю как написал, затем подумаю, возможно действительно нужно уменьшить кол. проверок. Над PNG подумаю, нужен ли он? Я плохо знаю этот формат, он в основном для небольшого размера файлов в которых имеется прозрачность.
По кнопкам в помощниках не понял, там же есть кнопки, вы их не видите? Прилагаю скриншот.
Добавлено (21 Июня 2023, 20:53) --------------------------------------------- Добавил в плагин две команды: faTaskbarHide - скрыть панель задач. faTaskbarShow - показать панель задач. Возможно понадобятся тем, кто захочет сделать скриншот экрана без панельки. Команды без параметров. После того как скроете панель задач и сделаете снимок не забудьте показать панель. Новая версия плагина 1.2 Ссылка на плагин с демкой.
Спасибо, понял где. У трек бара не делал кнопку. Мне показалось, что здесь может быть противоречие. Если к примеру ползунок установлен на значении 80, а переменная содержит значение 60, какое из них передавать плагину? Как то не соображу как быть в этом случае? Если есть соображение, то рад буду совету.
я когда то тоже экспериментировал с разными компонентами но пришёл к выводу - использовать только комбо и Едит. Это наиболее рационально Ну и если переменная содержит отличное от ползунка значение - то ползунок должен принять значение переменной. Во вторых - это у тебя (и юзеров) окно помощи написания команды а для качественного написания должна быть кнопка выбора переменных т.к. юзер захочет вставить на место этих цифирок переменную от трекбара. ИМХО. наиболее интересен компонент LabeledEdit - позволяет сразу писать пояснение к команде и даёт возможность ввода текста - Это как раз всё что требуется. Проверки корректного введения текста просты, ну и часто использую функцию StrToIntDef(string, value) - удобная штука. Плюс - что бы не писать одно и то-же - например перевести шрифт в строку туда и обратно , или цвет в строку туда и обратно, ( да много всякого) - написал отдельный юнит ., и использую его во всех проектах. Там же можно ниписать и проверки и разбивку строк и всё что угодно - напишешь один раз - и можно пользоваться и не думать об этом пока что то новое в голове не нарисуется...
Сообщение отредактировано AS3856 - Чт, 22 Июня 2023, 00:09
Ну и если переменная содержит отличное от ползунка значение - то ползунок должен принять значение переменной.
В этом случае ползунок становится бесполезен. Если переменная содержит отличное значение, то ползунок сдвинется на это значение, но что делать, если юзер начнет двигать ползунок, менять значение в переменной? Но возможно пользователь этого не хочет. Он то в уме держит значение переменной. Вот тут и получается противоречие. Думал я по разному. Согласен, что лучший выход это Edit, но хотелось разнообразия, по этому и сделал трекбаром. Да еще заморочился, со сменой цвета цифр значения при сдвиге ползунка. Делал то плагин для себя, вернее для заказанной программы, а там единожды устанавливается степень качества.
Добавлено (22 Июня 2023, 11:26) --------------------------------------------- Добавил четыре команды - снимки с сохранением в формат PNG. Команды аналогичны снимкам с сохранением в формат BMP, по этому демку не прилагаю. Ссылка на плагин версии 1.3
Добавлено (22 Июня 2023, 11:36) --------------------------------------------- Андрей, ну это у тебя куча плагинов, по этому ты со временем все по полочкам раскладываешь, а я все в основном для себя делал. У тебя плагин для сетки целый комбайн с несколькими десятками команд. Я первые два плагина в 2013-2014 годах сделал. Затем долгое время не нужно было и вот в конце прошлого года понадобилось. Для себя я без окон помощников делал, в этом случае они всего по 50-100 кб. занимают, а ввести пару переменных в ручную не проблема для меня.
Если переменная содержит отличное значение, то ползунок сдвинется на это значение, но что делать, если юзер начнет двигать ползунок, менять значение в переменной? Но возможно пользователь этого не хочет. Он то в уме держит значение переменной. Вот тут и получается противоречие.
на мой взгляд у тебя каша в голове ( без обид) Ну какое ещё отличноемежду собой значения? Это окно помощника кода и более ничего. Пропиши в окне - при его создании значение ползунка равно значению переменной, - и твоя каша в голове будет рассасываться. Не держит юзер в голове никаких данных- всё что ему надо - это переменная .Твой ползунок устанавливает какое то значение - и оно в программе будет константой, а надо переменную - что бы юзер мог подставитьь свой трекбар
Добавлено (22 Июня 2023, 12:23) ---------------------------------------------
Цитатаfrolandr ()
Затем долгое время не нужно было и вот в конце прошлого года понадобилось. Для себя я без окон помощников делал, в этом случае они всего по 50-100 кб. занимают, а ввести пару переменных в ручную не проблема для меня.
не проще ли на делфи писать .... - и код получается лучше, и прога работает быстрее и возможностей больше. VisualNeo как прокладка. фактически можно написать библиотеку и ей пользоваться. ( плагин - это обычная библиотека , просто расширение специфичное) ну так пиши себе библиотеки ( или юниты, что на мой взгляд лучше т.к. таскать не надо ) - и используй делфи.
Сообщение отредактировано AS3856 - Чт, 22 Июня 2023, 12:25
Может и каша. Ну вот есть переменная var она пустая, инициализируется в процессе выполнения какого-то кода. Когда чел настраивает команду плагина, то а в переменной NULL, трек бар улетит на 0. Я не считаю это нормальным.
Сейчас если добавить введение переменной, то рядом с трекбаром нужно создать еще поле Edit, чтобы в него попадала переменная, а как иначе? При редактировании команды нужно в помощнике видеть ту переменную, что ввел. В итоге нужно иметь фактически две переменные на одно значение, вот это точно каша. Если добавлять поле ввода, то трекбар просто нужно удалять, а я над ним потел пару дней
Нееет, мне языки в стиле Паскаля не нравятся. Я со знакомыми в девяностых начинали писать еще на Ассемблере для процессора Z80, компа Спектрум. Затем у нас была кухня по созданию сайтов, а там html и css, по минимуму php, затем подоспел js. В 2010 начали учить mql4 для торговых систем Форекса. Для увеличения продаж написанных советников, скриптов и стратегий нужна была прога презентаций, вот тут и понадобился Необук. Все эти языки на которых пишу произошли от С, по этому и плагины писал на c++. Я конечно могу перевести полсотни строк с Делфи на С++, но не все функции.
FUNCTION MainNameFunction( var Data1, Data2: PAnsiChar ) : BOOLEAN; begin Result := False; MainFormName := TMainFormName.CreateParented(GetActiveWindow);
with MainFormName do try Edit1.Text:= STRING(Data1); // выбор прямоугольника //************************************************************************** TrackBar1.Position:= StrToIntDef(string(Data2), 0); // установка значения трекбара //************************************************************************** if ShowModal = mrOK then begin SetStr(Data1, AnsiString(Edit1.Text)); SetStr(Data2, AnsiString(IntToStr(TrackBar1.Position))); Result := TRUE; end; finally Free; end; end;
Добавлено (22 Июня 2023, 18:31) --------------------------------------------- вот и вся простейшая функция вызова окна помощника кода. Это для Delphi 10.4 Для делфи 7 - немного другое. Как видишь - для трекбара принимается значение переменной при создании., и при сохранении - значение трекбара передаётся в переменную. и кстати - это не переменные - а строка ( string). все данные передаются строкой.
Добавлено (22 Июня 2023, 18:38) ---------------------------------------------
Цитатаfrolandr ()
Когда чел настраивает команду плагина, то а в переменной NULL, трек бар улетит на 0. Я не считаю это нормальным.
так он настроит - и выставит какое то значение. Во вторых - ты опять путаешь окно помощника кода не знаю уж с чем.
faScreenShotJpg "" "80" - вот твоя команда.- и юзер теперь будет вручную копаться и писать вместо цифры 80 имя своей переменной от своего трекбара ( необукерского) . Я тебе и предлагаю облегчить ему жизнь.
Добавлено (22 Июня 2023, 18:40) --------------------------------------------- трекбар в окне кода вообще не нужен. - ну уж если оочень хочешь - так оставь.....
Добавлено (22 Июня 2023, 18:46) --------------------------------------------- с таким же успехом можно применить SpinEdit
Добавлено (22 Июня 2023, 18:49) --------------------------------------------- TrackBar1.Position:= StrToIntDef(string(Data2), 0); // установка значения трекбара
- можешь в этой строке выставить первоначальное состояние трекбара.- и вопрос будет решён
Сообщение отредактировано AS3856 - Чт, 22 Июня 2023, 18:32
Днем сделал тестовый помощник, код написать не успел, к племяшу на д.р. ездил. Код завтра напишу, посмотрю как все будет выглядеть в работе. Скрин скидываю.
Добавлено (22 Июня 2023, 21:29) ---------------------------------------------
ЦитатаAS3856 ()
трекбар в окне кода вообще не нужен. - ну уж если оочень хочешь - так оставь.....
Вот и я об этом, что если есть Edit , то и трекбар не нужен.
Добавлено (22 Июня 2023, 21:34) ---------------------------------------------
ЦитатаAS3856 ()
Edit1.Text:= STRING(Data1); // выбор прямоугольника
Вот здесь не пойму, что за прямоугольник выбираешь?
ЦитатаAS3856 ()
и кстати - это не переменные - а строка ( string).
Из форм все строками передается, в js к примеру тоже.
Добавлено (22 Июня 2023, 21:36) --------------------------------------------- Ну и да, финальный кусок кода был такой:
Вот здесь не пойму, что за прямоугольник выбираешь?
к твоему плагу это не относится. Это для плагинов с созданием компонента в прямоугольнике. -Я по привычке написал и к твоему примеру , но понятно это тебе не надо..
Вобщем, не получается передать значение из переменной в трекбар и если честно я все еще не понимаю, как можно из не запущенного приложения передать содержимое переменной. Иногда когда голова не соображает как сделать начинаю перебирать различные варианты. Так вот: 1. Функциями подобными TrackBar1.Position:= StrToIntDef(string(Data2), 0); // установка значения трекбара мы передаем не содержимое, а саму строку. Т.е. если вместо переменной вписать просто число, то все работает, в трекбар записывается число. Если передавать имя переменной, то в трекбар попадает тоже имя переменной, не ее содержимое. Т.е. фактически получается передать только копию строки. 2. Решил тогда попробовать функцию char * Value; nbGetVar(buf3, Value);, из полученного параметра извлечь значение, получаю лишь пустое значение.
Если приложение будет в тестовом режиме или скомпилировано и запущено, то TrackBar1.Position:= StrToIntDef(string(Data2), 0); уже сработает как нужно.
Что-только не пробовал, не получается из незапущенного приложения взять значение ПЕРЕМЕННОЙ(строки). Думаю так, что когда мы запускаем редактирование команды плагина работает только плагин, а он не может получить доступ к данным из не запущенного приложения.
Заменить параметр ACTIONPARAM_ALPHA на ACTIONPARAM_VARIABLE тоже не чего не дал.
Если видишь как это решить буду рад увидеть код
Сообщение отредактировано frolandr - Пт, 23 Июня 2023, 14:15
я дал тебе нормальный рабочий код- от него и танцуй
Я так понял ты пишешь на C ? . Читать я это могу кое как - но уж помочь и написать точно несмогу( да и нет желания) Ещё раз повторю - у тебя каша в голове. Ты путаешь окно помощника кода хрен его знает с чем. Выкинь его из головы - смотри на команду без окна. Если ты захочешь в неё написать константу - число , то всегда это число и будет а что бы изменить его - надо в проекте необука поставить трекбар. Не в твоём окне - а в проекте Необука. И тогда это число будет меняться. И дело тут не в твоём окне и твоём трекбаре.Подумай- каждый раз когда ты решишь применить эту команду - перед этим ты меняешь значение трекбаром необука(или например в эдите его пишешь - суть та-же) - и потом уже даёшь команду на выполнение этой - твоей - команды.
Я пишу в С++builder. Твой код не рабочий. Возможно мы говорим о разных вещах. Я тебе пишу, что я не могу получить данные переменной из не запущенной программы. Ты мне пишешь про трекбар в проекте Необук. При чем здесь трекбар в проете Нео я вообще тебя не понимаю?
Добавлено (23 Июня 2023, 18:11) --------------------------------------------- Вот смотри код на Нео: .инициализируем переменную var значением 50 SetVar "[var]" "50" .команда плагина для криншота faScreenShotJPG "[path]" "[var]"
Кликаем на команду плагина, чтобы открылось окошко, где: 1.Edit для пути сохранения файла. 2.Трекбар 3.Edit для переменной var(значение качества изображения.)
Так вот при открытии окна плагина сделай так, чтобы трекбар сдвинулся на середину, на значение 50. (Т.е. мне нужно получить значение переменной [Var] и записать его в трекбар, но все что мы получаем это пустое значение.)
Напиши код на Делфи, я пойму.
Я лично не могу получить значение из переменной var, она пустая!!!
Вот скриншот окна для примера.
Добавлено (23 Июня 2023, 18:14) --------------------------------------------- Все, что я пытаюсь до тебя довести, это то, что пока проект не запущен, то плагин принимает только строки с именами переменных. Они пустые, пока проект не запущен. Если вписать число или строку, да, плагин получает эти данные, но не ЗНАЧЕНИЕ переменной, он получает только ее имя [Var].
Добавлено (23 Июня 2023, 18:28) --------------------------------------------- Ты считаешь вот так должно работать?
Код
Edit1->Text = Params[0]; //получаю полученные данные = пути к файлу Edit2->Text = Params[1]; //= качество сохранения
int var = StrToIntDef(AnsiString(Params[1]),0); //берем содержимое переменной(которая в нео унас [var]) TrackBar1->Position = var; //пишем значение в трекбар
int Modal = Form1->ShowModal(); if (Modal == mrOk) { //если нажата кнопка "Ок", то char *buf1 = AnsiString(Edit1->Text).c_str(); //сохраним в буфер строку из Edit SetStr(Params[0], buf1); //сохраним char* buf2 = AnsiString(Edit2->Text).c_str(); SetStr(Params[1], buf2); TrackBar1->Position = StrToIntDef((Edit2->Text),0);
FreeStr(buf1); //освобождаем память выделенной для buf FreeStr(buf2); return true; }
Добавлено (23 Июня 2023, 18:50) --------------------------------------------- Вот коряво перевел, сорян Считаешь так будет работать? Ответ - нет...
if ShowModal = mrOK then begin SetStr(Data0, AnsiString(Edit1.Text)); SetStr(Data1, AnsiString(Edit2.Text)); TrackBar1.Position:= StrToIntDef(Edit2.Text), 0); Result := TRUE; end;
FUNCTION MainNameFunction( var Data1, Data2: PAnsiChar ) : BOOLEAN; begin Result := False; MainFormName := TMainFormName.CreateParented(GetActiveWindow);
with MainFormName do try Edit1.Text:= STRING(Data1); // имя файла для сохранения снимка //************************************************************************** TrackBar1.Position:= StrToIntDef(string(Data2), 0); // установка значения трекбара //************************************************************************** if ShowModal = mrOK then begin SetStr(Data1, AnsiString(Edit1.Text)); SetStr(Data2, AnsiString(IntToStr(TrackBar1.Position))); Result := TRUE; end; finally Free; end; end;
ЭТО РАБОЧИЙ КОД ДЛЯ ТВОЕГО ОКНА - ниже - поправил твоё написание
Добавлено (23 Июня 2023, 19:12) ---------------------------------------------
Цитатаfrolandr ()
Edit1.Text = Data0; Edit2.Text = Data1; ЭТУ СТРОКУ ВЫКИНЬ - это бред - у тебя нет второго Эдита TrackBar1.Position:= StrToIntDef(string(Data1), 0);
if ShowModal = mrOK then begin SetStr(Data0, AnsiString(Edit1.Text)); SetStr(Data1, AnsiString(Edit2.Text)); Эту строку выкинь - у тебя нет 2-го Эдита SetStr(Data1, AnsiString(IntToStr(TrackBar1.Position))); Эту строку полностю переписал по новому - у тебя какая то чепуха
Result := TRUE; end;
Сообщение отредактировано AS3856 - Пт, 23 Июня 2023, 19:35
Ну - пиши как сам знаешь.... И нафига тебе там второй эдит ? непонятно его не видел - незаметил сразу....- да он там и не нужен Я тебе уже посылал РАБОЧУЮ функцию вызова окна что там у тебя не работает - непонятно
Добавлено (23 Июня 2023, 19:43) ---------------------------------------------
Цитата
Вывод. Переменная в незапущеной програме ПУСТАЯ
Естественно пустая - бесспорно.. и мне это доказывать не надо
Добавлено (23 Июня 2023, 19:47) --------------------------------------------- я уже вот не пойму - ты чего пытаешься мне что то доказать ? - у меня нет вопросов к написанию кода плагина - причём окна это самое простое (но утомительно долгая рутина) вопросы были у тебя - я пытаюсь тебе прояснить как и что работает ... - но что то пошло не так.. пробуй - пиши добью вот свой плаг - если ты не решишь свою задачу - напишу тебе пример нормально рабочий плагина из одной команды с трекбаром
Ну у меня первоначально было изменение качество трекбаром, ты мне написал, что нужно переменной еще сделать. Ну а если делать кнопочку для выбора переменной, то она должна же добавиться куда-то. Ну это понятно, что она запишется в команду плагина, ее конечно там можно видеть. Но как бы по классике она должна и в помощнике показываться, по этому и сделал второй Едит.
ЦитатаAS3856 ()
Естественно пустая - бесспорно.. и мне это доказывать не надо
Зачем же ты меня вводил в заблуждение, что трекбар в помощнике можно сдвинуть в зависимости от значения переменной? А о чем же мы тогда спорили? Я тебе и пишу, что если переменная в окно передается пустая, то и сдвинуть трекбар не возможно. А она передается пустая. Все это время я и пытался тебе это доказать.
Ок. Будет время напиши код, я посмотрю как тебе это удаться, думаю это просто не возможно.
Сообщение отредактировано frolandr - Пт, 23 Июня 2023, 20:13
Зачем же ты меня вводил в заблуждение, что трекбар в помощнике можно сдвинуть в зависимости от значения переменной? -Это я ляпнул не подумавши - другого объяснения нет. В помощнике все переменные пусты. И это вообще не переменные - а так - строки. В переменные они превращаются уже в проекте компилированном.
окна это самое простое (но утомительно долгая рутина)
А что сложного при создании окна? Какая там может быть рутина? Передал размер формы, едиты почти все одинаковые, одна кнопочка SpeedButton, которая хоть на 100 команд, указываешь ей тоже только Top и left ну и пр. Я десять лет назад для каждой команды пиcал отдельный помощник, т.е. тупо создавал новый Unit и ручками кидал на форму нужные компоненты Для меня мучения это проверка полученных данных, правда когда лень, просто забиваю, проверяю только основное.
Добавлено (23 Июня 2023, 20:35) ---------------------------------------------
Цитатаfrolandr ()
-Это я ляпнул не подумавши - другого объяснения нет.
У тебя большой опыт, ты написал и я принял к сведению, думал пишешь, значит можно получить значение, всю голову сломал. Ну хорошо, что разобрались, полезный опыт мне.
Добавлено (23 Июня 2023, 20:40) --------------------------------------------- Еще по окну помощника, они ведь часто одинаковые. Т.е. вот в этом плагине 12+2 команды, т.е. 12 используют помощники, но из них фактически всего два помощника, один с одним едитом на 9 команд и еще там где трекбар и все.
Сообщение отредактировано frolandr - Пт, 23 Июня 2023, 20:32
Я понял, что идет речь об окне помощника, я не понимаю в чем там рутина? Для создания каждого компонента нужно от двух до 6 строк. Я к примеру их тупо копирую, нужно 5 едитов, пять раз скопировал, только изменил Edit1 на Edit2, а также координату по Y. У меня к примеру стандартные компоненты создаются размером 70 пикс, это с отступом, ну и затем просто добавляю эти 70 пикс к координате. Можно вообще написать функцию, которая будет все вычислять, т.е. отправил ей количество компонентов, и начальную координату первого по Y. Она их через цикл создала, разместила на форме, далее, идет размещение своего табконтрола, далее кнопки, далее происходит расчет высоты формы автоматом. Вот я сейчас начал допиливать СпинЕдит, посмотри в первом прикреплении окно помощника, во втором код, который создает это окно. Повторюсь, можно вообще 2-3 строки написать и окно готово, но для этого нужно написать функцию, но когда пишешь 2-3 плагина, писать такую функцию лень
Немного изменил плагин, при создании снимков и сохранении в файл с расширением jpg сделал возможность выбора качества изображения не только Трекбаром, но и переменной. Версия 1.4 с демкой.