Tijdens een lang proces, wil ik de voortgang doorgeven aan de gebruiker op de manier die bijv. Photoshop doet. een voortschreidend blauw balkje op de statusbar.
Dit lukt, maar de statusbar knippert verschrikkelijk. Ik heb het tot nu toe op twee manieren geprobeerd:
en dan rechtstreeks tekenen op het canvas:
en daarna heb ik nog geprobeerd via een buffer:
Allebei de mogelijkheden knipperen verschrikkelijk, en dat komt omdat delphi eerst zelf de TStatusbar tekent, en daarna pas de OnDraw aanroept van de afzonderlijke panels.
Weet iemand hier een oplossing voor?
Dit lukt, maar de statusbar knippert verschrikkelijk. Ik heb het tot nu toe op twee manieren geprobeerd:
Delphi:
1
| TStatuspanel[0].style:=psOwnerdraw |
en dan rechtstreeks tekenen op het canvas:
Delphi:
1
2
3
4
5
| procedure TForm1.StatusbarDrawPanel(StatusBar: TStatusBar; Panel: TStatusPanel; const Rect: TRect); begin Statusbar.Canvas.[hoop acties] end; |
en daarna heb ik nog geprobeerd via een buffer:
Delphi:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
| procedure TForm1.StatusbarDrawPanel(StatusBar: TStatusBar; Panel: TStatusPanel; const Rect: TRect); var w,h:Integer; TmpBitmap: TBitmap; begin W := Rect.Right - Rect.Left + 1; H := Rect.Bottom-Rect.top+1; Try TmpBitmap:=TBitmap.Create; TmpBitmap.Width:=W; Tmpbitmap.Height:=H; with TmpBitmap.Canvas do begin [hoop acties] end; Statusbar.Canvas.CopyMode:=cmSrcCopy; Statusbar.Canvas.CopyRect(Rect,TmpBitmap.Canvas,Classes.Rect(0,0,W,H)); finally TmpBitmap.Free; end; end; |
Allebei de mogelijkheden knipperen verschrikkelijk, en dat komt omdat delphi eerst zelf de TStatusbar tekent, en daarna pas de OnDraw aanroept van de afzonderlijke panels.
Weet iemand hier een oplossing voor?
[ Voor 1% gewijzigd door jvdmeer op 02-09-2003 21:43 . Reden: lege regels verwijderd ]