Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.07.03;
Скачать: CL | DM;

Вниз

Почему так долго?   Найти похожие ветки 

 
CrowD ©   (2003-03-21 11:50) [0]

Привет, All!

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

P.S.
поле adoqMap_map.AsString может достигать размера 65535
но его обработка идет до переброски буфера на форму

Спасибо.


procedure TForm1.FormPaint(Sender: TObject);
var
X,Y,i : Integer;
t : String;
begin
Form1.Caption := "size: "+adoqMap_size.AsString;
Y:=Y0;
while (Y*22 < Form1.Height)and(Y<adoqMap_size.AsInteger) do begin
X:=X0;
while (X*32 < Form1.Width)and(X<adoqMap_size.AsInteger) do begin
t := copy(adoqMap_map.AsString,adoqMap_size.AsInteger*Y+X,1);
BitBlt(Buffer.Canvas.Handle,X*31,Y*22,46,23, BMMask.Canvas.Handle,0,0,SrcPaint);
BitBlt(Buffer.Canvas.Handle,X*31,Y*22,46,23, BM[i].Canvas.Handle,0,0,SrcAnd);
inc(X);
t := copy(adoqMap_map.AsString,adoqMap_size.AsInteger*Y+X,1);
BitBlt(Buffer.Canvas.Handle,X*31,Y*22+11,46,23, BMMask.Canvas.Handle,0,0,SrcPaint);
BitBlt(Buffer.Canvas.Handle,X*31,Y*22+11,46,23, BM[i].Canvas.Handle,0,0,SrcAnd);
inc(X);
end;
inc(Y);
end;
//StretchBlt(Form1.Canvas.Handle,0,0,Form1.Width,Form1.Height,Buffer.Canvas.Handle,0,0,Round(Form1.Width*Zooming),Round(Form1.Height*Zooming),SrcCopy);
BitBlt(Form1.Canvas.Handle,0,0,Form1.Width,Form1.Height,Buffer.Canvas.Handle,0,0,SrcCopy);
end;


 
CrowD ©   (2003-03-21 14:16) [1]

я тут немного поэксперементировал, проблема свелась к тому что Form1.Canvas при вызове FormPaint, зачемто очищается, как то это погасить можно?

Спасибо.


 
Mihey   (2003-03-21 21:59) [2]

Гм, на канву формы рисунок можно вывести всего один раз, а затем его можно просто перерисовывать функцией Invalidate - как раз в OnPaint.



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

Текущий архив: 2003.07.03;
Скачать: CL | DM;

Наверх




Память: 0.47 MB
Время: 0.016 c
4-7760
Василий Петрович
2003-05-03 11:20
2003.07.03
Бегущая строка


1-7489
-=MAN=-
2003-06-21 04:49
2003.07.03
Как сделать чтобы программа не уничтожалась из памяти


14-7690
Alikm
2003-06-17 11:01
2003.07.03
Как сделать, чтобы прога на панели задач не висела?


14-7655
Zergling
2003-06-16 09:37
2003.07.03
Как удалить сие важные для системы WIN2000 файлы?


14-7658
INTAARI
2003-06-16 18:42
2003.07.03
Где можно взять WinSocket 2.0 и DCOM