Ellipse in/auf Image zeichnen

Hi!

Weiss jemand wie ich die Hintergrundfarbe, Strichart, -stärke und -farbe ändern kann?
Wieso wird die Ellipse nicht genau bei den Mauskoordinaten gezeichnet?

Vielen Dank schonmal für eure Hilfe!

MfG, Andi


Private Declare Function Ellipse Lib "gdi32.dll" (ByVal hDC As Long, ByVal X1 As Long, ByVal Y1 As Long, ByVal X2 As Long, ByVal Y2 As Long) As Long
Private Declare Function GetDC Lib "user32" (ByVal hWnd As Long) As Long
Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long

Dim DrawFlag As Boolean

Dim e\_X1 As Integer
Dim e\_X2 As Integer
Dim e\_Y1 As Integer
Dim e\_Y2 As Integer

Private Sub Image1\_MouseDown(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)
 DrawFlag = True
 e\_X1 = X
 e\_Y1 = Y
End Sub

Private Sub Image1\_MouseMove(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)
 If DrawFlag = True Then
 Me.Repaint
 e\_X2 = X
 e\_Y2 = Y

 Dim hWnd As Long
 Dim hDC As Long

 hWnd = FindWindow(vbNullString, Me.Caption)
 hDC = GetDC(hWnd)

 Ellipse hDC, e\_X1, e\_Y1, e\_X2, e\_Y2
 End If
End Sub

Private Sub Image1\_MouseUp(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)
 If DrawFlag = True Then
 DrawFlag = False
 End If
End Sub

[MOD] Pre-Tag eingefügt.

Hallo,

Weiss jemand wie ich die Hintergrundfarbe, Strichart, -stärke
und -farbe ändern kann?

Hintergrundfarbe: .BackColor
Strichart: .DrawStyle
Strichstärke: .DrawWidth
Strichfarbe: .ForeColor

Für ein Image ist das aber alles nicht verfügbar. Hast Du einen Grund, ausgerechnet auf ein Image malen zu wollen? Das ist dafür nämlich nicht da. Wenn Du das mit einem Picture machst/machen kannst hast Du es leichter.

Warum malst Du mit der API? Hast Du’s so eilig, oder hast Du .Circle nicht gefunden? Die API würde ich dafür nur nehmen, wenn .Circle zu langsam ist, weil der Computer eine Animation berechnen soll.

Gruß, Rainer

Hi Rainer!

Danke für deine Antwort. Ich arbeite in Excel/VBA, da hab ich all diese Befehle wie .DrawStyle und Circle leider nicht zur Verfügung…

Mfg, Andi


[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Hi Andi,

Danke für deine Antwort. Ich arbeite in Excel/VBA …

ahhh, sorry, das habe ich Deinem Code nicht angesehen, ich dachte, es ginge um VB. Die Strichart wird aber IMO für das Obekt eingestellt, auf das gezeichnet wird, nicht in der Funktion, die zeichnet.

Ich vermute (nicht wissen, nur vermuten. :smile:) Daß Du gestrichelte Linien mit Ellipse so nicht bekommen wirst. Alternativvorschlag, schreib Dir eine Prozedur, die die Ellipse selbst berechnet und setze die Pixel mit ‚SetPixel‘ selbst, wo Du sie hin haben willst, dann kannst du auch gepunktete, gestrichelte … Linien malen, wie Du willst. Wenn Du schon mit der API arbeitest, kannst Du auch jeden Punkt einzeln setzen, das geht ebenfalls schnell.

Gruß, Rainer

Du musst halt einen entsprechenden Pen für die Kontur und eine entsprechende Brush für die Füllung erzeugen.

(Typischerweise: CreateSolidBrush, CreateHatchBrush, CreateDIBPatternBrush für die Brush, CreatePen für den Pen)

Am besten schaust du mal in die API-Referenz …

Das Problem mit solchen selbstgezeichneten Objekten ist, dass du mittels Subclassing die Ereignisse abfangen müsstest, die ein Neuzeichnen erfordern (z.B. das Resize des Basisformulars). In VBA ist das schwer bis gar nicht möglich.

Gruß aus dem Norden
Reinhard Kraasch

(http://www.dbwiki.de - das Datenbank-Wiki)

OT API Referenz

Am besten schaust du mal in die API-Referenz …

Hallo Namensvetter,
was genau meinst du damit? Ist die bei VB6 (ich habe nur Excel-Vba) o.ä. dabei?
Danke und Gruß
Reinhard

API guide downlad
Hallo Reinhard,

was genau meinst du damit? Ist die bei VB6 (ich habe nur
Excel-Vba) o.ä. dabei?

nein, kann man aus dem Netz laden, ist ein eigenes, sehr kleines Programm. Alles mit Beispiel erklärt … :smile:

http://www.soft-ware.net/hobby/programmierung/refere…

Gruß, Rainer

Ich meinte nartürlich die Original-Microsoft-Doku:

http://msdn2.microsoft.com/en-us/library/aa383749.aspx

Wenn man als VB-Programmierer denn (noch) mit der API arbeiten will oder muss, sollte man sich das Buch „Visual Basic Programmers Guide to the WIN32 API“ von Dan Appleman holen: http://www.amazon.de/Applemans-Visual-Programmers-Au…

Gruß aus dem Norden
Reinhard Kraasch

(http://www.dbwiki.de - das Datenbank-Wiki)

Aha, so ist das. Dankeschön :smile: o.w.T.
Ähem, was suchst du hier?
o.w.T. soll bedeuten „ohne weiteren Text“, also nix Neues im Westen quasi :smile:))