Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "WinAPI";
Текущий архив: 2002.07.29;
Скачать: [xml.tar.bz2];

Вниз

Вывод графики в чужом окне.   Найти похожие ветки 

 
Sheriff   (2002-05-22 13:37) [0]

Помнится нечто похожее уже обсуждалось, только приведенные примеры у меня не работают. Может где-то ошибка. Картинка выводится (BitMap) в чужом окне, а вот потом не получается ее убрать. (W98, D5)
Привожу фрагмент кода:

Alarm1:=TBitMap.Create;
try
Alarm1.LoadFromResourceName(hinstance,"Alarm"+IntToStr(Random(6)+1));
Dc1:=GetWindowDC(GetForegroundWindow);
GetWindowRect(GetForegroundWindow,Rt);
{ SetBKMode(Dc1,TRANSPARENT);}
x:=(Rt.BottomRight.x-Rt.TopLeft.x-Alarm1.Width) div 2;
y:=(Rt.BottomRight.y-Rt.TopLeft.y-Alarm1.Height) div 2;
BitBlt(Dc1,x,y,x+Alarm1.Width,y+Alarm1.Height,Alarm1.Canvas.Handle,0,0,SRCCOPY);
Sleep(3000);
finally
ReleaseDC(0,Dc1);
{InvalidateRect очищает саму форму, но не контролы}
{ InvalidateRect(GetForegroundWindow,nil,true);}
{WM_NCPAINT форма вообще не реагирует}
PostMessage(HWND_BROADCAST,WM_NCPAINT,0,0);
{ SendMessage(GetForegroundWindow,WM_PAINT,0,0);}
Alarm1.Free;
end;


И второй вопрос: как вывести картинку Alarm1 (BitMap) с прозрачным фоном? Заранее спасибо.


 
Song   (2002-05-22 14:58) [1]

А WM_PAINT заремен... Тоже не помогает?


 
Sheriff   (2002-05-22 15:09) [2]

к сожалению, не помогает. :(


 
Sheriff   (2002-05-22 20:11) [3]

Решение вопроса №2 я нашел. Но вопрос 1 остается открытым.
Неужели никто не знает ответ?


 
cdaDmitriy   (2002-05-22 20:49) [4]

вопрос - при проведении ( перекрытии ) и послкдующим убиранием
третьим окном второе перерисовается ?

если да то можно попробывать -- перед рисованием сохрани картинку а после выведи

если получится пишли по почте


 
Sheriff   (2002-05-23 07:05) [5]

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

for i:=0 to Screen.ActiveForm.ControlCount-1 do Screen.ActiveForm.Controls[i].Repaint;

но и это не возымело действие... плз. подскажите хоть куда пялиться...


 
SPeller   (2002-05-23 09:47) [6]

2 Sheriff

А зачем рисовать именно на окне другого приложения? Можно сделать своё окно, расположить его поверх нужного и рисовать. Вычислить размеры подопытного окна я думаю проблем не составит. Поставить хук на него и отлавливать перемещение, изменение размеров и т.д. А вот насчёт перерисовки окон контролов в чужих окнах инструментами Дельфи я не уверен. Я не понимаю, можно ли вообще в чужом окне у некоего контрола вызвать какой-то метод?? Тем более если прога написана на другом языке. Любая программа не может так просто иметь доступ ко всем свойствам всех контролов всех приложений. Здесь я думаю надо пользоваться ВинАПИ. Найти все дочерние окна и каждому отправить WM_PAINT.


 
Sheriff   (2002-05-24 07:01) [7]

похоже WM_PAINT все же работает... и с радостью прорисовывает все, что есть в окне... в том числе и саму картинку. ;-)
Пошел по пути создания окошка с картинкой. Все получилось. Большое спасибо за идею. :-)



Страницы: 1 вся ветка

Форум: "WinAPI";
Текущий архив: 2002.07.29;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.46 MB
Время: 0.006 c
1-95299
Ученик
2002-07-16 16:13
2002.07.29
Определение адреса конструктора


14-95556
.: Joiro :.
2002-06-30 14:58
2002.07.29
Блокировка мозгов.


1-95351
ilg
2002-07-18 13:07
2002.07.29
AnsiLowerCase для Char


7-95579
Сергей Ф
2002-04-27 20:58
2002.07.29
Как определить 95,98,NT,ME,2000 или Win XP стоит на компьютере?


14-95511
Mirkoorio
2002-07-01 18:39
2002.07.29
FAT32 или NTFS?





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский