Dreiecke zeichnen

18/12/2013 - 10:41 von Ahmed Martens | Report spam
Hallo Leute,

ich weiß, ich hatte schon einmal eine àhnliche Frage gestellt, aber die
Lösung bringt mich nicht weiter. Daher noch einmal:

Ich möchte das SGrid-OCX von vbAccellerator verwenden, welches eine
OwnerDraw-Eigenschaft besitzt.


In dem Event wird in der Demo jetzt eine Rechteck mit folgender Funktion
gezeichnet:

<Code>
' Draw the colour box
lCol = cell.ItemData
hBr = CreateSolidBrush(lCol) '<- hier müsste ein Dreieck
FillRect lHDC, tR, hBr ' gezeichnet werden!
DeleteObject hBr
<\Code>

Nun möchte ich anstelle eines Vierecks ein Dreieck zeichnen, wie es in
Excel verwendet wird.

Mit Hilfe von Olaf habe ich folgende Funtion, die auch schön Dreiecke in
einer Picturebox zeichnen kann. Genau so ein Dreieck benötige ich für
die obige Funktion.

<Code>
Private Sub DrawItAt(x, y, Color, Optional ByVal Size& = 10)
Dim i, j
For i = 1 To Size: For j = i To Size
Picture1.PSet (Int(x + Size - i), Int(y + Size - j)), Color
Next j, i
End Sub
<\Code>

Hat irgendjemand eine Idee wie ich das bewerkstelligen kann.
Mir würde es ja auch helfen, wenn ich erst den Umweg über eine
Picturebox gehe, damit ich dort das Dreieck herauskopiere.

Vielen Dank im Voraus.

Gruß Ahmed
Antworten bitte nur in der Newsgroup.
Win7 Prof. 64bit / MS-Office 2010 Prof. 32bit
 

Lesen sie die antworten

#1 Martin KoWi
18/12/2013 - 15:09 | Warnen spam
Am 18.12.2013 10:41, schrieb Ahmed Martens:

Ich möchte das SGrid-OCX von vbAccellerator verwenden, welches eine
OwnerDraw-Eigenschaft besitzt.



ich bin nicht sicher ganz was du meinst -
kannst du nicht einfach dein Dreieck zur ImageList hinzufügen?

In dem Event wird in der Demo jetzt eine Rechteck mit folgender Funktion
gezeichnet:

<Code>
' Draw the colour box
lCol = cell.ItemData
hBr = CreateSolidBrush(lCol) '<- hier müsste ein Dreieck
FillRect lHDC, tR, hBr ' gezeichnet werden!
DeleteObject hBr
<\Code>

Nun möchte ich anstelle eines Vierecks ein Dreieck zeichnen, wie es in
Excel verwendet wird.



Aber falls du es aus irgendwelchen Gründen wirklich OwnerDrawn brauchst,
dann kann ich dir schon einen Anhaltspunkt geben.

Statt der Zeilen CreateSolidBrush + FillRect machst du dann ca. sowas:

' tR ist wohl dein Rect
xC = tR.Left + (tR.Right - tR.Left) \ 2
yC = tR.Top + (tR.Bottom - tR.Top) \ 2

hPen = CreatePen(PS_SOLID, 1, lCol)
hPenOld = SelectObject(hdc, hPen)

MoveToEx hdc, xC - 2, yC - 1, tJ
LineTo hdc, xC + 3, yC - 1
MoveToEx hdc, xC - 1, yC, tJ
LineTo hdc, xC + 2, yC
MoveToEx hdc, xC, yC - 1, tJ
LineTo hdc, xC, yC + 2

SelectObject hdc, hPenOld
DeleteObject hPen

Das ist natürlich nur ein mini-Bsp das du anpassen musst.
Aber wenn mal die Grundstruktur am Laufen ist, kann man ja leicht
"herumspielen".
Die MoveTo/LineTo sind ja ziemlich selbsterklàrend.

gruß, martin

Ähnliche fragen