Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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
15-1166291552
ProgRAMmer Dimonych
2006-12-16 20:52
2007.01.07
Снова от меня ламерский вопрос (по PHP на этот раз)


15-1166041376
Petr V. Abramov
2006-12-13 23:22
2007.01.07
а как будет "откат" по-английски? :)


1-1163766797
DVM
2006-11-17 15:33
2007.01.07
Вопрос по Handle TWinControl


2-1166388580
Kostafey
2006-12-17 23:49
2007.01.07
Delphi-аналог окна udl


15-1166066015
Slider007
2006-12-14 06:13
2007.01.07
С днем рождения ! 14 декабря





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский