Toon posts:

[Delphi] UpdateRect van TPaintBox?

Pagina: 1
Acties:

Verwijderd

Topicstarter
Hi all,

op de OnPaint van een TPaintBox wordt niet gemeld welk gedeelte van de PaintBox moet worden hertekend:
code:
1
2
3
procedure PaintBox1Paint(Sender: TObject);
begin
end;

Echter, datgene wat ik teken is dusdanig complex van aard dat het aardig zou zijn als ik dat wel zou kunnen weten .. ik ken de functie GetUpdateRect nog van de Borland Pascal voor Windows tijd, ik heb het idee dat ik hier iets mee moet kunnen, maar echter, na lang en veel gekloot heeft dit totaal geen resultaat opgeleverd...

Weet iemand hoe ik kan uitzoeken welk gedeelte van de TPaintBox ik moet hertekenen bij een OnPaint event?

Marc

Verwijderd

Topicstarter
Okeej! :+ Toch nog zelf uitgevonden :)
Voor degene die ooit zoekt en in dit topic terecht komt, hierbij de oplossing. Knip en plak er maar uit wat je nodig hebt. Het programma doet weinig zinnigs zoals caption zetten en je scherm vrij willekeurig inkleuren. Maar je kan wel zien welk stuk scherm opnieuw getekend moet worden! :)
code:
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
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
unit vsim_se_main;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  StdCtrls, ExtCtrls, Menus, ComCtrls, ToolWin;

type
  TfmMain = class(TForm)
    pbScenario: TPaintBox;
  public
    procedure OnWindowPaint(var Message: TMessage); message WM_PAINT;
  end;

var
  fmMain: TfmMain;

implementation

{$R *.DFM}

procedure TfmMain.OnWindowPaint(var Message: TMessage);

function Rect2String(r: TRect): string;
begin
  Result:=
      IntToStr(r.Left)+','+IntToStr(r.Top)+' '+
      IntToStr(r.Right)+','+IntToStr(r.Bottom);
end;

var
  r, s: TRect;
  p: PRect;
begin
  if GetUpdateRect(fmMain.Handle, r, false)=FALSE then
    Caption:='Nothing to draw! You shoulnd''t see this!'
  else
    begin
    // update caption
    s.Left   := r.Left   + HorzScrollBar.Position;
    s.Right  := r.Right  + HorzScrollBar.Position;
    s.Top    := r.Top    + VertScrollBar.Position;
    s.Bottom := r.Bottom + VertScrollBar.Position;
    Caption:='Drawing: '+
      Rect2String(r)+' '+
      'translated to paintbox: '+
      Rect2String(s);

    // paint something
    pbScenario.Canvas.Brush.Style:=bsSolid;
    case Random(3) of
      0: pbScenario.Canvas.Brush.Color:=clRed;
      1: pbScenario.Canvas.Brush.Color:=clBlue;
      2: pbScenario.Canvas.Brush.Color:=clGreen;
    end;
    pbScenario.Canvas.Pen.Style:=psClear;
    pbScenario.Canvas.FillRect(s);

    // validate rect
    New(p);
    p^:=ClientRect;
    ValidateRect(fmMain.Handle, p);
    Dispose(p);
    end;
end;

end.

Marc