Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Bitmap.Canvas.CopyRect(MyRect2, Form1.Canvas, MyRect1);


SMAC ©   (2006-11-13 13:08:00) 

Ув. господа!

Делаю скрин-шот
Bitmap.Canvas.CopyRect(MyRect2, Form1.Canvas, MyRect1);

Если над приложением есть какое-то любое виндовое окно, что оно тоже попадает в Bitmap. Я правда не совсем понимаю почему - ведь мной указан Form1.Canvas. Можно ли снять скрин-шот только с заданной мной формы?

Спасибо.


SMAC   (2006-11-16 15:39:00) [1]

Всем спасибо.


Eraser   (2006-11-15 20:28:00) [2]

> [16] SMAC   (15.11.06 13:56)

ну а первое - с исп. любого компонента, для запуздыривания иконок трей можно, например того, что с BDS в составе.


RASkov   (2006-11-15 19:51:00) [3]

> и особенно второе

FlashWindow(Application.Handle, True);


SMAC   (2006-11-15 13:56:00) [4]

Спасибо всем.

Для Eraser(ну и не только):

Как реализовать первое и особенно второе? Заранее благодарен.


antonn   (2006-11-14 19:00:00) [5]

SMAC   (14.11.06 13:57) [7]
Думаю, что есть некоторая разница. Bitmap.Canvas.CopyRect я делаю на Form1.Canvas, а в этом случае нужно кидать TImage.Picture.Bitmap на Bitmap. Мне это не понравилось в самом начале (согласен, что и из-за недостатка опыта), поскольку прежнее место рисунка необходимо закрашивать (рисунок на старом месте остается и к нему прибавляется новый (в новом месте)).

а закрасить битмап цветом формы сверхсложно?


Eraser   (2006-11-14 17:14:00) [6]

> [13] SMAC   (14.11.06 16:54)

сделать чтобы начала мигать либо иконка в трее, либо на таск-баре.


SMAC   (2006-11-14 16:54:00) [7]

Да...

У меня до этого появились смутные сомнения, что программно располагать свою форму поверх других - не очень корректно по отношению к коллегам (;-) и в принципе не очень удобно по отношению к пользователям.

По ходу я только могу констатировать факт деактивации формы, приостанавливать выполнение внутренних процессов программы, выводить соответствующее сообщение и потом (после подтверждения со стороны пользователя) и закрытия сообщения фокус ввода автоматически возвращается к моей программе и в принципе возможно нормальное продолжение.

А остальное по ходу - дурной тон.

Вот только вопрос - как подать зрительный сигнал, что процессы в моей программе остановились? Опять - выводить модальное на все приложения окно (как это опять же сделать) или ещё как?

Спасибо за терпение.


Eraser   (2006-11-14 16:43:00) [8]

> [11] selenux ©   (14.11.06 16:41)


> Активировать окно - есть функция в RX в VCLUtils - ActivateWindow(h:
> HWND);

безполезно, даже если там используется какой-нибудь хак, какие имеются, то его или уже прикрыли или прикроют.

> Насчет скриншота пробуй просто прямым блитингом BitBlt(см
> MSDN)

CopyRect вызывает SretchBlt, что в данном случае, аналогично BitBlt.


selenux   (2006-11-14 16:41:00) [9]

Активировать окно - есть функция в RX в VCLUtils - ActivateWindow(h: HWND);

Насчет скриншота пробуй просто прямым блитингом BitBlt(см MSDN)


SMAC   (2006-11-14 15:54:00) [10]

Ха!

А если активно окно не моего приложения? Как я вызову то моё?

:-(


Eraser   (2006-11-14 14:40:00) [11]

> [8] SMAC   (14.11.06 14:05)


> У меня вопрос: как сделать главную формой октивной (поверх
> любых других окон)?

нужно из другово окна, которое в данный момент активно, вызвать SetForegroundWindow. Это конечно не гарантирует на 100%, что это окно будет "поверх любых других окон", но поверх большенства будет точно.


SMAC   (2006-11-14 14:05:00) [12]

Узвиняюсь!

Нашел в
http://www.delphimaster.ru/cgi-bin/forum.pl?n=18&id=1163409817

if GetForegroundWindow = Handle then

else
begin


end;

У меня вопрос: как сделать главную формой октивной (поверх любых других окон)?

Спасибо


SMAC   (2006-11-14 13:57:00) [13]

Доброго времени суток!

Для antonn:
Думаю, что есть некоторая разница. Bitmap.Canvas.CopyRect я делаю на Form1.Canvas, а в этом случае нужно кидать TImage.Picture.Bitmap на Bitmap. Мне это не понравилось в самом начале (согласен, что и из-за недостатка опыта), поскольку прежнее место рисунка необходимо закрашивать (рисунок на старом месте остается и к нему прибавляется новый (в новом месте)).

Для Eraser:
Как реализовать SetForegroundWindow?
SetForegroundWindow(Form1.Handle);

не работает.


Eraser   (2006-11-14 00:55:00) [14]

> [0] SMAC   (13.11.06 13:08)

перед тем, как делать скриншот, вызывай SetForegroundWindow для нужного окна.


antonn   (2006-11-13 21:40:00) [15]

продолжу мысль - создается один битмап, на него копируются изображения из TImage в нужном порядке, битмп сохраняется. Для контроля битмап иногда копируется на канву формы.


antonn   (2006-11-13 21:37:00) [16]

SMAC   (13.11.06 13:40) [3]
2. Рисовать в TBitmap и сохранять непосредсвенно его (этот способ сложнее, требует зарисовки прежнего положения рисунков и контроля отображения на той же TForm.Canvas или TImage).

это самый простой способ... и единственно правильный, имхо


SMAC   (2006-11-13 13:40:00) [17]

У меня есть прямоугольные рисунки в TImage, они по определенной зависимости перемещаются по TForm. С заданной частотой я снимаю скрин-шоты и сохраняю в файл.
Думаю, что есть несколько вариантов решения этой задачи:

1. Делать как я делаю, только контролировать Application.OnDeActivate
2. Рисовать в TBitmap и сохранять непосредсвенно его (этот способ сложнее, требует зарисовки прежнего положения рисунков и контроля отображения на той же TForm.Canvas или TImage).
3. Делать как я делаю, но сохранять только то, что есть на форме, а не на экране (самый лучший вариант для меня, если конечно он возможен).


KilkennyCat   (2006-11-13 13:16:00) [18]

> Можно ли снять скрин-шот только с заданной мной формы?


можно. но очень сложно.


ЮЮ   (2006-11-13 13:14:00) [19]

может лучше использовать метод самой формы PaintTo для рисования на Bitmap-е, а не наоборот?


Наверх

Титульная страница Поиск, карта сайта Написать письмо