Page 1 of 6

Screenshooter

Posted: Tue Jun 06, 2006 3:08 pm
by Maxxxx32
Еще одна прога, при помощи которой можно сохранить содержимое экрана в KolibriOS:
Image
http://maxxxx32.narod.ru/scrshoot.7z
Пока не поддерживается востановление окна после сворачивания. При сохранении используется 70-я функция. Файл сохраняется в формат bmp.
Кстати GUI компоненты: editbox, label, checkbox можно без труда добавить к любой другой программе. Мигание при перерисовке сведено к минимуму.

Posted: Tue Jun 06, 2006 6:36 pm
by Mario79
Maxxxx32
Хорошая функциональность, мне понравилось. Стоит, однако, написать, что нужно вводить не только имя файла, а полный путь вместе с именем.
Предложение насчет editbox:
1) Нужна корректная обработка клавиш Home и End, чтобы курсор перемещался соответственно к началу и в конец.
2) Было бы хорошо, если бы курсор моргал, но это не обязательно, в принципе и так удачно.
Удачи.

Posted: Tue Jun 06, 2006 8:33 pm
by Maxxxx32
Mario79
Сделал все, кроме моргания. Ссылка таже.
Моргание можно сделать, если у KolibriOS появится функция, которая будет выполнять какой-либо фрагмент кода за определенные промежутки времени.

Posted: Tue Jun 06, 2006 9:18 pm
by Quantum
В Колибри нет таймеров?

Posted: Wed Jun 07, 2006 10:50 am
by diamond
При отсутствии моргания не тратится лишнего процессорного времени на моргание (да и размер кода уменьшается)...

Posted: Sat Jun 10, 2006 11:32 am
by Maxxxx32
Обновил программу:
1) теперь поддерживаются длинные имена файлов (используется 70-я функция вместо 58-ой);
2) теперь можно самому задавать время задержки;
3) поддерживается автонумерация файлов;
4) улучшена обработка мышки в editbox.

Posted: Sun Jun 11, 2006 8:49 pm
by Mario79
Maxxxx32
Нужно написать текстовик к приложению. Я так и не смог запустить автосохранение с автонумерацией. Смог только одиночное сохранение с ручным вводом имени.

Posted: Tue Jun 13, 2006 12:04 pm
by Maxxxx32
Mario79
Добавил readme.txt
Имя файла не генерируется полностью, просто в том месте имени файла, где стоит знак "*" (без кавычек) этот знак будет заменен на номер, котрый автоматически увеличивается при каждом сохранении. Например, если написать так /hd0/1/*.bmp, на жесткий диск запишется файл 00.bmp.

Размер editbox уменьшен на 40 байт.

Posted: Tue Jun 13, 2006 5:31 pm
by Maxxxx32
При сворачивании окно не перестает быть активным; если окно активно, функция активации окна его не восстанавливает. Единственное решение проблемы, которое я нашел, это сразу после сворачивания запускать "отвлекающий" поток, который дезактивирует главное окно.
Есть ли более красивое решение этой проблемы ?

Posted: Tue Jun 13, 2006 7:03 pm
by Mario79
Maxxxx32
Замечания насчет readme.txt
1) Обычно в нем написано кто автор;
2) Насчет имени в 264 символа, когда по стандарту FAT положено 260 символов, а в твоей программе можно ввести около 50 символов на весь путь. Где ты взял эту цифру?
3) Ctrl+PrintScrn - горячая клавиша. Не написано, какое действие она выполняет.

Теперь предложения по поводу программы:
1) Наверное, лучше сделать, чтобы, как только начал "фоткать", то вместо звездочки вставлялись цифры следующего сохраняемого файла.
2) Можно еще сделать режим полного автосохранения с параметром задержки между снимками. Потом можно будет из файлов сделать анимацию, но это так на будущее.

Не понял фразы:
При сворачивании окно не перестает быть активным; если окно активно, функция активации окна его не восстанавливает.
Первый раз слышу о таком. Даже когда окно активно через панель проводится его насильственная активация с восстановлением всех исходных параметров. Посылается событие через mcall 18,3.
Если я чего-то не так понял, то распиши максимально подробнее.
Если этот глюк проявился в эмуляторе, то это вина эмулятора, а не ядра.

Posted: Wed Jun 14, 2006 1:16 pm
by Maxxxx32
в твоей программе можно ввести около 50 символов на весь путь
Не 50, а 255, хотя это тоже мало. Исправлю.
Если я чего-то не так понял, то распиши максимально подробнее.
Программы я пишу и тестирую в самой KolibriOS, а не в эмуляторе. Насколько я знаю, панель активизирует (разворачивает) окно только при нажатии на кнопку на самой панели, в этот момент активным является окно именно панели, а не окно программы, окно программы успешно восстанавливается.
В моей программе функция восстановления окна сработает, если ты сделаешь активным другое окно, можешь проверить: поставь задержку так, чтобы ты успел выбрать другое окно, включи автосворачивание и автовосстановление, нажми кнопку "сделать снимок" и сразу выбери другое окно, функция автовосстановление сработает, но если ты не выберешь другое окно, то есть окно моей программы останется активным и в свернутом состоянии, 3 подфункция 18 функции не сработает.

Posted: Wed Jun 14, 2006 5:51 pm
by Mario79
Maxxxx32
Не 50, а 255, хотя это тоже мало. Исправлю.
Извиняюсь, не знал, что можно вводить путь длинней, чем отображается на экране.
Насчет mcall 18, 3 буду разбираться.

Posted: Wed Jun 14, 2006 8:56 pm
by Mario79
Maxxxx32
1) Если у тебя исходники ядра от К0530b2, то попробуй переставить строку:
mov [window_minimize],2
сразу после
cmp eax,3 ; ACTIVATE WINDOW
jnz nowindowactivate
2) Если у тебя ядро с SVN то вставь строку:
mov [window_minimize],2
сразу после
sysfn_activate: ; 18.3 = ACTIVATE WINDOW
В принципе должно помочь (если рассуждать логически), но я сам не проверял.

Posted: Wed Jun 14, 2006 10:50 pm
by Maxxxx32
Mario79
Теперь работает, но после сворачивания необходима задержка, равная времени, необходимому для фотканья экрана + 1 секунда. Эту проблему можно решить на уровне приложения.

Posted: Thu Jun 15, 2006 11:50 am
by Mario79
Maxxxx32
Дело в том, что сворачивании и разворачивание, и вообще изменение размеров окна происходит не сразу, а после того, когда ядро, перебрав по кругу все потоки (в том числе и себя) и лишь потом изменяет, когда дойдет до нужного потока.