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

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

Как побороть мерцание?


Dankin ©   (2003-07-01 03:28:00) 

Люди, подскажите как побороть мерцание.

В программе при нажатии на кнопку весь экран
копируется битмап и помещается в ТИмадж на
форме которая только после этого становится
видимой. Все это дело мерцает как при появлении
формы так и при ее изчезновении.
Вообщем на функциональность не влияет, но
нервирут дай боже. Помогите решить проблему.


Думкин   (2003-07-02 05:05:00) [1]

В точности твою траблу не знаю - потому как инфы нет. Но попробую разобраться в 17-й строке.
При отрисовке не пользуй GetDC.
Делай в такой обертке:

procedure TMyForm.WMPaint;
var
ps : TPaintStruct;
DC : HDC;
begin
inherited;
DC := BeginPaint(Handle, ps);
.....
( Handle, ps)

В точности твою траблу не знаю - потому как инфы нет. Но попробую разобраться в 17-й строке.
При отрисовке не пользуй GetDC.
Делай в такой обертке:

procedure TMyForm.WMPaint;
var
ps : TPaintStruct;
DC : HDC;
begin
inherited;
DC := BeginPaint(Handle, ps);
.....
EndPaint(Handle, ps)
end;


В 99,999% случаев все тормоза снимаются. Так кстати и предложено папами и мамами. %-)


Dankin   (2003-07-02 02:17:00) [2]

Нужен, чтобы можно было узнать цвет любой точки на экране. Без формы с картинкой впринципи знаю как, кто-то подсказал getpixel(getDC(0),mouse.cursorpos.x,mouse.cursorpos.y); но при этом способе возникает вопрос как подавить активность десктопа на нажатия мышки, и почемуто если долго водить мышой по экрану через какоето время прога начинает тормозить, причем не по детски.
Впринцепи мерцание удается подавить использовав
image.parent.doblebuffer:=true;
но эта фенька срабатывает только при первом запуске функции, если грубо говоря, пользователь активизировал процесс еще раз то программа опять начинат тормозить. Может кто знает как побороть это?


Леприкон   (2003-07-01 07:44:00) [3]

procedure TForm1.Button1Click(Sender: TObject);
var DC:HDC;

procedure TForm1.Button1Click(Sender: TObject);
var DC:HDC;
Canv:TCanvas;
begin
DC:=GetDC(0);
Canv:=TCanvas.Create;
Canv.Handle:=DC;

BitBlt(Form2.Image1.Canvas.Handle,
0,
0,
Form2.Image1.ClientWidth,
Form2.Image1.ClientHeight,Canv.Handle,
0,
0,
srccopy);

Canv.Destroy;
ReleaseDC(Handle,DC);
Form2.Show;
end;

//*******************
procedure TForm2.FormCreate(Sender: TObject);
begin
DoubleBuffered:=true;
end;

А зачем тебе нужен битмап?


Наверх

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