Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2007.01.07;
Скачать: CL | DM;

Вниз

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;
Скачать: CL | DM;

Наверх




Память: 0.51 MB
Время: 0.047 c
15-1166515691
vidiv
2006-12-19 11:08
2007.01.07
реклама в бесплатном хостинге


15-1166395163
Nic (from home)
2006-12-18 01:39
2007.01.07
Ряды и дифференциальные уравнения


5-1146230892
AlexanderMS
2006-04-28 17:28
2007.01.07
"Перехват" события OnExit


15-1166436664
Dekan
2006-12-18 13:11
2007.01.07
Socks 5 server


6-1155234489
anton773
2006-08-10 22:28
2007.01.07
idhttp загрузка файла