Ru-Board.club
← Вернуться в раздел «Прикладное программирование»

» Графика в Delphi

Автор: Wiz
Дата сообщения: 29.05.2002 15:05
как заставить перерисовываться изображение находящееся в PaintBox.Canvas при "наезжании" на него другого окна?

зы использование той же самой процедуры рисования в событии onPaint не помогает
Автор: greys
Дата сообщения: 29.05.2002 18:57
Wiz
Можно сделать Canvas.refresh, и тогда изображение обновится. Только я не совсем понял про "наезжание" другого окна. Если оно наехало, то под ним и так ничего не видно. А если оно отодвинулось, а картинка не обновилась - то и refresh поможет. Или ты постоянно рисуешь в картинке что-то?
Автор: Wiz
Дата сообщения: 29.05.2002 19:03
Canvas.Refresh не помогает...

Цитата:
Или ты постоянно рисуешь в картинке что-то?

да.. рисуется змейка, она движется и её то и надо восстанавливать если ей на хвост наедет окно..

Добавлено
можно как-то использовать свойство ClipRect... только вот как?
Автор: greys
Дата сообщения: 30.05.2002 13:33
Wiz
ClipRect нужен, если ты сам окно рисуешь внутри картинки. А если это обычное стандартное окно, то после него само должно все восстанавливаться.

А что за окно такое наезжающее? Как последнее дело, можно в нем поставит обработчик на все его события (или там перемещения, мышения, кликанья, и т.д.) и в этом обработчике делать для твоей картинки в другой форме рефреш.

Что именно за задача у тебя, напиши поподробнее, про змейку и движения?
Автор: UncoNNecteD
Дата сообщения: 30.05.2002 17:05
А может просто не надо забывать про App-n.ProcessMessages ?
Автор: IntenT
Дата сообщения: 30.05.2002 23:37
Wiz
Скорее всего ты не то запихнул в onPaint.
Как змейку рисуешь? Добавляя голову и вытирая хвост?

Добавлено
СОбытие onPaint возникает когда надо перерисовать окно. ClipRect здесь ни при чем. При высвобождении части окна, которая закрывалась другим окном возникает onPaint. Это факт.. А что в твоем обработчике - это уже ты сам пишешь. И ответственность лежит на твоем коде, а не на невызове обработчика.
Автор: elvisti
Дата сообщения: 24.08.2002 01:12
UncoNNecteD

Цитата:
А может просто не надо забывать про App-n.ProcessMessages ?

Это слишком медленно...
Автор: Babrow
Дата сообщения: 02.10.2002 17:44
Wiz
Процедуру рисования картинки нужно положить в PaintBox.OnPaint - обязательно должно работать
Автор: avr555
Дата сообщения: 09.10.2002 12:27
Я в таких случаях переопределяю метод Paint.
Должно помочь.
Автор: Felix
Дата сообщения: 10.10.2002 16:34
elvisti или All
Не в курсе, сколько по времени (мс) занимает ProcessMessages
Автор: Wowik
Дата сообщения: 11.10.2002 01:11

Цитата:
Не в курсе, сколько по времени (мс) занимает ProcessMessages

если так критично, делай через потоки...
Автор: pbromiks
Дата сообщения: 23.12.2002 22:01
Извините за глупый и может неуместный вопрос...
Скажите. А как скопировать изображение окна Windows и засунуть его например в TImage?
Плз....
Автор: xn0bys
Дата сообщения: 24.12.2002 15:37
pbromiks

Взять Handle окна, затем BitBlt.


Добавлено
точнее HDC
Автор: merlkerry
Дата сообщения: 24.12.2002 16:15

Цитата:
как заставить перерисовываться изображение находящееся в PaintBox.Canvas при "наезжании" на него другого окна?


вызвать InvalidateRgn или InvalidateRect
Автор: UncoNNecteD
Дата сообщения: 24.12.2002 20:49
elvisti
Wiz
DirectX вам поможет...
Автор: pbromiks
Дата сообщения: 25.12.2002 08:14
xn0bys
А подробнее никак?
Мне надо скопировать то, что находится на экране в данный момент и засунуть в TImage. как граббер.
Плз. подскажите...
Автор: merlkerry
Дата сообщения: 25.12.2002 08:38
xn0bys
Что не получаеться ???
Сначала получашь handle окна - например через FindWindowEx.
Потем по имеющемуся handle получаешь hdc - дай бог памяти - как функция называется ... гляну в SDK - подправлю мессаг ...
Автор: pbromiks
Дата сообщения: 25.12.2002 09:12
merlkerry
Ну хоть пример какой..... Приблизительно...
Автор: xn0bys
Дата сообщения: 25.12.2002 13:23
merlkerry
pbromiks


Я делаю так:

var
DC :HDC;
WND :HWND;
temp :tbitmap;
begin
DC:=GetDC(WND); // для десктопа WND=0

Temp:=TBitmap.Create;
Temp.Width:=Width; // сдесь ставиш чё те надо
Temp.Height:=Height;

DC:=GetDC(WND);

BitBlt(Temp.Canvas.Handle, //можно и без Temp, подставляй свой Image;
0,
0,
Width,
Height,
DC,
Left, // сдесь координаты откуда (вообще <F1>)
Top,
SRCCOPY);
...
Изврат над Temp
...
Temp.free;
ReleaseDC(WND,DC);
end;

Надеюсь сообразишь #
Автор: merlkerry
Дата сообщения: 25.12.2002 13:55
xn0bys Что сказать - неплохой код.
pbromiks - извини у меня реки не дошли нарисовать что-то подобное ...
Автор: xn0bys
Дата сообщения: 25.12.2002 14:46
merlkerry

Стараемся
Автор: pbromiks
Дата сообщения: 25.12.2002 20:04
Огромное спасибо всем. Завтра попробую.
Автор: moonrise
Дата сообщения: 04.01.2003 13:40
Кину для начала сюда вопрос - не поможет придется новый топик создавать...

Как преобразовать картинку к 256 цветам greyScale причем так, что бы можно было задавать цвет в этой палитре... к примеру Image1.Camvas.Pixels[i,j] := 1 (от 0 до 255).
Автор: avr555
Дата сообщения: 04.01.2003 18:48
Есть библиотека компонет FastDIB. По-моему она это все позволяет.
Автор: moonrise
Дата сообщения: 04.01.2003 22:32
avr555

Цитата:
Есть библиотека компонет FastDIB

Спасиб. Можноо ссылку на него или на страницу разработчика?


Добавлено
http://gfody.com - вроде как страница разработчиков, но она недоступна. файлик в котором 1 dll и 7 pas'ов скачал... только что с ними делать? компаненты подключать я научился, а тут.. научите что ли.
Автор: Pinocchio
Дата сообщения: 05.01.2003 09:47
Хочется немного обобщить:
1) OnPaint это не показ картинки, а создание.
2) Грабить окна надо грабилками, а канвас грабить неприлично - выехал за экран и облажался.
3) Преобразования картинок делают многочисленные PLUGINS эффекты PhotoShop и PhotoImpact (последний приемлемее).
4) Создание битмапов собственными алгоритмами требует неприличных действий - например физического исправления ссылки на канвас и требования прорисовки (работает на все 100%).

5) Динамика прорисовок очень просто стимулируется таймером и WNDPROC.
Автор: moonrise
Дата сообщения: 05.01.2003 10:51
Pinocchio
з-й пункт это ко мне? мне делфевыми средствами надо..
Автор: merlkerry
Дата сообщения: 06.01.2003 11:13
moonrise По моему Pinocchio посто не просек, что тут люди стараються шкодить, а не юзать чужие проги ...
Автор: moonrise
Дата сообщения: 06.01.2003 19:54
merlkerry
Угу... А вопрос то до сих пор без ответа
Автор: xn0bys
Дата сообщения: 08.01.2003 09:37
moonrise
попробуй:
var i:Tcolor;
i:=image1.canvas.pixels[x,y];
i:=(((i and $ff0000) div 65536)+((i and $00ff00) div 256)+(i and $0000ff)) div 3;
image1.canvas.pixels[x,y]:=i*65536+i*256+i;
Это получится Grayscale 256 color ну и т.д.
(Сам не проверял, но теоретически?)

Страницы: 12

Предыдущая тема: Excel


Форум Ru-Board.club — поднят 15-09-2016 числа. Цель - сохранить наследие старого Ru-Board, истории становления российского интернета. Сделано для людей.