Article View: pl.comp.lang.delphi
Article #335052Re: Problem z miganiem aplikacji
From: Arivald
Date: Tue, 07 Feb 2012 08:22
Date: Tue, 07 Feb 2012 08:22
100 lines
4300 bytes
4300 bytes
W dniu 2012-02-07 08:15, konsul41@wp.pl pisze:
> zrobiłem tak
> var Brush : TBRUSH;
> c: TCanvas;
> begin
> c := TCanvas.Create();
> c.Handle := DC;
> c.Brush:=TBrush.Create;
> try
> c.Brush.Color:=:=CreateSolidBrush(TPGKomponentData(FPGKomponentData^).kolor);
>
> c.TextOut(TPGKomponentData(FPGKomponentData^).rozmiar.Left,
> TPGKomponentData(FPGKomponentData^).rozmiar.Top,'Test');
> c.Rectangle(TPGKomponentData(FPGKomponentData^).rozmiar.Left,
> TPGKomponentData(FPGKomponentData^).rozmiar.Top,
> TPGKomponentData(FPGKomponentData^).rozmiar.Width,
> TPGKomponentData(FPGKomponentData^).rozmiar.Height);
> finally
> c.Handle := 0;
> c.Free();
> end;
>
> I nadal nie ma koloru.
> Czy przypadkiem FBackBuffer nie jest czarnobiałe, ponieważ czarny jest
> dobrze malowany, biały także.
> Inne kolory to ta siatka się zmienia.
> http://www.kssoft.cba.pl/kolory.PNG
Możliwe że się gdzieś pomyliłem... Czarno-biała bitmapa jest tworzona
automatycznie z każdym MemoryDC, i może to bruździ...
Po pierwsze AllocateBackBuffer() i ReleaseBackBuffer() powinno być takie:
dodaj zmienną
FOldBbBitmap: HBITMAP;
function TMyPanel.AllocateBackBuffer(refDC: HDC; width, height:
integer): HDC;
begin
Result := CreateCompatibleDC(refDC);
if (width > FBackBufferWidth)
or (height > FBackBufferHeight)
or (FBackBuffer = 0)
then
begin
FBackBufferWidth:= width ;
FBackBufferHeight:= height ;
if FBackBuffer <> 0 then DeleteObject(FBackBuffer);
FBackBuffer := CreateCompatibleBitmap(
Result, FBackBufferWidth, FBackBufferHeight);
end;
FOldBbBitmap := SelectObject(Result, FBackBuffer);
end;
procedure TMyPanel.ReleaseBackBuffer(bbDC: HDC; freeBitmap: boolean =
false);
begin
if FBackBuffer <> 0 then
begin
SelectObject(bbDC, FOldBbBitmap);
FOldBbBitmap := 0;
DeleteDC(bbDC);
FOldBbBitmap := 0;
if freeBitmap then
begin
DeleteObject(FBackBuffer);
FBackBuffer := 0;
end;
end;
end;
przetestuj czy pomoże.
A potem spróbuj takiej zmiany: w WMPaint zamień
ReleaseBackBuffer(bbDC, false);
na
ReleaseBackBuffer(bbDC, True);
To spowoduje że bitmapa bufora będzie odtwarzana przy każdym paincie,
efektywnie wyłączając optymalizację.
A przy okazji, osobiście ja rzadko używam do tego WinAPI bezpośrednio.
Za durzo z tym kłopotów. Najczęściej tworzę bufor jako Graphics.TBitmap,
z HandleType := bmDDB (aka Device Dependent Bitmap).
Wtedy VCL sam dba o utworzenie Canvasa i powiązanego z nim Memory DC, i
nie trzeba się ręcznie bawić. DC takiej bitmapy pobierasz poprzez:
bitmap.Canvas.Handle
Tyle że z pluginami z DLL to raczej nie będzie dobrze działać...
--
Arivald
Technical Details
Message-ID:
<jgqn30$kn1$1@news.dialog.net.pl>Path:
mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!news.icm.edu.pl!newsfeed.pionier.net.pl!news.dialog.net.pl!not-for-mailReferences:
<4f2d0c44$0$1229$65785112@news.neostrada.pl> <jgjc7n$558$1@news.dialog.net.pl> <4f2f80c2$0$1223$65785112@news.neostrada.pl> <jgo0ef$b6v$1@news.dialog.net.pl> <4f2f8a9f$0$1217$65785112@news.neostrada.pl> <4f2fb47e$0$1220$65785112@news.neostrada.pl> <jgoh5e$j3k$1@news.dialog.net.pl> <4f2fde49$0$1230$65785112@news.neostrada.pl> <jgoof1$mj4$1@news.dialog.net.pl> <4f2fea02$0$1260$65785112@news.neostrada.pl> <4f2fea47$0$26695$65785112@news.neostrada.pl> <jgoqc3$ndt$1@news.dialog.net.pl> <4f30cf7d$0$26695$65785112@news.neostrada.pl>Show Full Headers
Complete Article Headers
Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!news.icm.edu.pl!newsfeed.pionier.net.pl!news.dialog.net.pl!not-for-mail From: Arivald <NOSPAMarivald@interia.pl> Newsgroups: pl.comp.lang.delphi Subject: Re: Problem z miganiem aplikacji Date: Tue, 07 Feb 2012 09:22:10 +0100 Organization: Dialog Net Lines: 100 Message-ID: <jgqn30$kn1$1@news.dialog.net.pl> References: <4f2d0c44$0$1229$65785112@news.neostrada.pl> <jgjc7n$558$1@news.dialog.net.pl> <4f2f80c2$0$1223$65785112@news.neostrada.pl> <jgo0ef$b6v$1@news.dialog.net.pl> <4f2f8a9f$0$1217$65785112@news.neostrada.pl> <4f2fb47e$0$1220$65785112@news.neostrada.pl> <jgoh5e$j3k$1@news.dialog.net.pl> <4f2fde49$0$1230$65785112@news.neostrada.pl> <jgoof1$mj4$1@news.dialog.net.pl> <4f2fea02$0$1260$65785112@news.neostrada.pl> <4f2fea47$0$26695$65785112@news.neostrada.pl> <jgoqc3$ndt$1@news.dialog.net.pl> <4f30cf7d$0$26695$65785112@news.neostrada.pl> NNTP-Posting-Host: dynamic-78-8-128-226.ssp.dialog.net.pl Mime-Version: 1.0 X-Trace: news.dialog.net.pl 1328603040 21217 78.8.128.226 (7 Feb 2012 08:24:00 GMT) X-Complaints-To: abuse@dialog.net.pl NNTP-Posting-Date: Tue, 7 Feb 2012 08:24:00 +0000 (UTC) User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:11.0) Gecko/20120202 Thunderbird/11.0 In-Reply-To: <4f30cf7d$0$26695$65785112@news.neostrada.pl> X-Antivirus: avast! (VPS 120206-1, 2012-02-06), Outbound message X-Antivirus-Status: Clean Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit