Форум: "Основная";
Текущий архив: 2007.01.07;
Скачать: [xml.tar.bz2];
ВнизBitmap.Canvas.CopyRect(MyRect2, Form1.Canvas, MyRect1); Найти похожие ветки
← →
SMAC (2006-11-13 13:08) [0]Ув. господа!
Делаю скрин-шот
Bitmap.Canvas.CopyRect(MyRect2, Form1.Canvas, MyRect1);
Если над приложением есть какое-то любое виндовое окно, что оно тоже попадает в Bitmap. Я правда не совсем понимаю почему - ведь мной указан Form1.Canvas. Можно ли снять скрин-шот только с заданной мной формы?
Спасибо.
← →
ЮЮ © (2006-11-13 13:14) [1]может лучше использовать метод самой формы PaintTo для рисования на Bitmap-е, а не наоборот?
← →
KilkennyCat © (2006-11-13 13:16) [2]> Можно ли снять скрин-шот только с заданной мной формы?
можно. но очень сложно.
← →
SMAC (2006-11-13 13:40) [3]У меня есть прямоугольные рисунки в TImage, они по определенной зависимости перемещаются по TForm. С заданной частотой я снимаю скрин-шоты и сохраняю в файл.
Думаю, что есть несколько вариантов решения этой задачи:
1. Делать как я делаю, только контролировать Application.OnDeActivate
2. Рисовать в TBitmap и сохранять непосредсвенно его (этот способ сложнее, требует зарисовки прежнего положения рисунков и контроля отображения на той же TForm.Canvas или TImage).
3. Делать как я делаю, но сохранять только то, что есть на форме, а не на экране (самый лучший вариант для меня, если конечно он возможен).
← →
antonn © (2006-11-13 21:37) [4]SMAC (13.11.06 13:40) [3]
2. Рисовать в TBitmap и сохранять непосредсвенно его (этот способ сложнее, требует зарисовки прежнего положения рисунков и контроля отображения на той же TForm.Canvas или TImage).
это самый простой способ... и единственно правильный, имхо
← →
antonn © (2006-11-13 21:40) [5]продолжу мысль - создается один битмап, на него копируются изображения из TImage в нужном порядке, битмп сохраняется. Для контроля битмап иногда копируется на канву формы.
← →
Eraser © (2006-11-14 00:55) [6]> [0] SMAC (13.11.06 13:08)
перед тем, как делать скриншот, вызывай SetForegroundWindow для нужного окна.
← →
SMAC (2006-11-14 13:57) [7]Доброго времени суток!
Для antonn:
Думаю, что есть некоторая разница. Bitmap.Canvas.CopyRect я делаю на Form1.Canvas, а в этом случае нужно кидать TImage.Picture.Bitmap на Bitmap. Мне это не понравилось в самом начале (согласен, что и из-за недостатка опыта), поскольку прежнее место рисунка необходимо закрашивать (рисунок на старом месте остается и к нему прибавляется новый (в новом месте)).
Для Eraser:
Как реализовать SetForegroundWindow?
SetForegroundWindow(Form1.Handle);
не работает.
← →
SMAC (2006-11-14 14:05) [8]Узвиняюсь!
Нашел в
http://delphimaster.net/view/2-1163409817/
if GetForegroundWindow = Handle then
<делать>
else
begin
<активизировать нужную форму>
<делать>
end;
У меня вопрос: как сделать главную формой октивной (поверх любых других окон)?
Спасибо
← →
Eraser © (2006-11-14 14:40) [9]> [8] SMAC (14.11.06 14:05)
> У меня вопрос: как сделать главную формой октивной (поверх
> любых других окон)?
нужно из другово окна, которое в данный момент активно, вызвать SetForegroundWindow. Это конечно не гарантирует на 100%, что это окно будет "поверх любых других окон", но поверх большенства будет точно.
← →
SMAC (2006-11-14 15:54) [10]Ха!
А если активно окно не моего приложения? Как я вызову то моё?
:-(
← →
selenux © (2006-11-14 16:41) [11]Активировать окно - есть функция в RX в VCLUtils - ActivateWindow(h: HWND);
Насчет скриншота пробуй просто прямым блитингом BitBlt(см MSDN)
← →
Eraser © (2006-11-14 16:43) [12]> [11] selenux © (14.11.06 16:41)
> Активировать окно - есть функция в RX в VCLUtils - ActivateWindow(h:
> HWND);
безполезно, даже если там используется какой-нибудь хак, какие имеются, то его или уже прикрыли или прикроют.
> Насчет скриншота пробуй просто прямым блитингом BitBlt(см
> MSDN)
CopyRect вызывает SretchBlt, что в данном случае, аналогично BitBlt.
← →
SMAC (2006-11-14 16:54) [13]Да...
У меня до этого появились смутные сомнения, что программно располагать свою форму поверх других - не очень корректно по отношению к коллегам (;-) и в принципе не очень удобно по отношению к пользователям.
По ходу я только могу констатировать факт деактивации формы, приостанавливать выполнение внутренних процессов программы, выводить соответствующее сообщение и потом (после подтверждения со стороны пользователя) и закрытия сообщения фокус ввода автоматически возвращается к моей программе и в принципе возможно нормальное продолжение.
А остальное по ходу - дурной тон.
Вот только вопрос - как подать зрительный сигнал, что процессы в моей программе остановились? Опять - выводить модальное на все приложения окно (как это опять же сделать) или ещё как?
Спасибо за терпение.
← →
Eraser © (2006-11-14 17:14) [14]> [13] SMAC (14.11.06 16:54)
сделать чтобы начала мигать либо иконка в трее, либо на таск-баре.
← →
antonn © (2006-11-14 19:00) [15]SMAC (14.11.06 13:57) [7]
Думаю, что есть некоторая разница. Bitmap.Canvas.CopyRect я делаю на Form1.Canvas, а в этом случае нужно кидать TImage.Picture.Bitmap на Bitmap. Мне это не понравилось в самом начале (согласен, что и из-за недостатка опыта), поскольку прежнее место рисунка необходимо закрашивать (рисунок на старом месте остается и к нему прибавляется новый (в новом месте)).
а закрасить битмап цветом формы сверхсложно?
← →
SMAC (2006-11-15 13:56) [16]Спасибо всем.
Для Eraser (ну и не только):
Как реализовать первое и особенно второе? Заранее благодарен.
← →
RASkov (2006-11-15 19:51) [17]> и особенно второе
FlashWindow(Application.Handle, True);
← →
Eraser © (2006-11-15 20:28) [18]> [16] SMAC (15.11.06 13:56)
ну а первое - с исп. любого компонента, для запуздыривания иконок трей можно, например того, что с BDS в составе.
← →
SMAC (2006-11-16 15:39) [19]Всем спасибо.
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2007.01.07;
Скачать: [xml.tar.bz2];
Память: 0.5 MB
Время: 0.018 c