Autor Beitrag
ibh_compucat
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 130

Win 2000, Win 8.1
D6, Ent. XE5 Ent.
BeitragVerfasst: Do 22.04.10 18:22 
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!

ausblenden 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

_________________
Was du nicht begreifst, kannst du nicht verlernen!
DonManfred
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 148
Erhaltene Danke: 2

Windows 7
Delphi XE3 Pro + HTML5Builder
BeitragVerfasst: Fr 23.04.10 11:01 
ausblenden 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);

_________________
Gruss Manfred
Martok
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 3661
Erhaltene Danke: 604

Win 8.1, Win 10 x64
Pascal: Lazarus Snapshot, Delphi 7,2007; PHP, JS: WebStorm
BeitragVerfasst: 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:
ausblenden 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 ;)

_________________
"The phoenix's price isn't inevitable. It's not part of some deep balance built into the universe. It's just the parts of the game where you haven't figured out yet how to cheat."
ibh_compucat Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 130

Win 2000, Win 8.1
D6, Ent. XE5 Ent.
BeitragVerfasst: 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

_________________
Was du nicht begreifst, kannst du nicht verlernen!
DonManfred
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 148
Erhaltene Danke: 2

Windows 7
Delphi XE3 Pro + HTML5Builder
BeitragVerfasst: 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
Einloggen, um Attachments anzusehen!
_________________
Gruss Manfred