Entwickler-Ecke

Multimedia / Grafik - Hatch Brush, wie ein schraffiertes Rechteck zeichnen?


ibh_compucat - Do 22.04.10 18:22
Titel: Hatch Brush, wie ein schraffiertes Rechteck zeichnen?
Hallo Freunde,

ich möchte ein (oder mehrere) schraffiertes Rechteck auf einen Canvas zeichnen und kämpfe nun schon seit mehreren Tagen, kann mir jemand helfen?
Der folgende Quelltext erzeugt zwar keine Fehlermeldungen - aber es zeigt sich auch keine Wirkung!


Delphi-Quelltext
1:
2:
3:
4:
      c := clLime;
      hb := CreateHatchBrush(HS_BDIAGONAL, c);
      rectangle(Form3.Canvas.Handle,1500,YPOS + YOffset, Breite-30, YPOS+YOffset+Zeilenabstand);
      SelectObject(Form3.Canvas.Handle, hb);


schöne Grüße ibh_compucat


DonManfred - Fr 23.04.10 11:01


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
// Stil der "Umrandung"
img.canvas.Pen.Color := clBlack;
img.canvas.Pen.Width := 1;
img.canvas.Pen.Style := psSolid;

// Mauerwerk aussen zeichnen (schraffiert)
img.Canvas.Brush.Style := bsBDiagonal;
img.Canvas.Brush.Color := clRed;
img.Canvas.Rectangle( pos_x , pos_y, w, h);


Martok - Fr 23.04.10 13:25

Und um noch den WinApi-Codeschnipsel vom OP zu behandeln:

Man müsste schon erst den Brush Selecten und dann erst zeichnen... Zusammen mit etwas Resourcenverwaltung ergibt das:

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
var c: TColor;
    hb: HBRUSH;
    oldo: HGDIOBJ;
begin
   c := clLime;
   hb := CreateHatchBrush(HS_BDIAGONAL, c);
   oldo:= SelectObject(Canvas.Handle, hb);      // alten Brush merken
   try
     rectangle(Canvas.Handle,1500,YPOS + YOffset, Breite-30, YPOS+YOffset+Zeilenabstand);
   finally
     SelectObject(Canvas.Handle, oldo);         // zurücksetzen
     DeleteObject(hb);                          // aufräumen
   end;
end;


Auch wenn ja der Grund, warum man Delphi nutzt ist, dass man das nicht selbst machen will, und deswegen den Code von user profile iconDonManfred nimmt ;)


ibh_compucat - Fr 23.04.10 13:55

vielen Dank für eure Antworten,

@DonManfred: die Rechtecke wurden an der gewünschten Stelle gezeichnet, aber die Schraffur blieb aus.
@Martok: perfekt, so sollte es sein.

Nochmals vielen Dank an Euch.

ibh_compucat


DonManfred - Fr 23.04.10 15:48

user profile iconibh_compucat hat folgendes geschrieben Zum zitierten Posting springen:
@DonManfred: die Rechtecke wurden an der gewünschten Stelle gezeichnet, aber die Schraffur blieb aus.


Hmm, bei mir klappt es und ich denke ich habe nichts vergessen zu Posten... Ich benutze img ist in meinem Fall ein TImage, vielleicht liegt es daran (hab mit Grafikerstellung unter Delphi nicht sooo viel Erfahrung)...

hc_008