Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
444to448
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
444to448
444to448
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

Paint-Ereignis per API ?

Paint-Ereignis per API ?
25.06.2004 14:56:35
Michael
Hallo zusammen,
ich hab mir eine Klasse geschrieben in der ich per Api Aufrufe eine Box auf eine Userform malen kann. Ich habe also das Handle der Userform und hab mir per Getdc das die HDC-Eigenschaft der Userform geholt und darauf gemalt.
Mein Problem ist nun, dass das Gemalte immer wieder verschwindet, sobald die Userform das Repaint-Ereignis aufruft, sprich sich selbst neu zeichnet. Zum Beispiel wenn die Userform teilweise aus dem sichtbaren Bereich gezogen wird und wieder zurück kommt, so ist der selbt gemalte Teil, der auserhalb des sichtbaren Bereiches war weg.
Also entweder ich schaffe es, dass das Repaint Ereignis meine Sachen jedes mal mitmalt. Oder ich schaff es irgendwie meine Paintfunktion mit dem Repaint Ereignis zu koppeln, so dass es jedes mal wieder neu gemalt wird.
Hat jemand eine Idee ? Ist etwas komplexer vermute ich.... in VB gibt es ja direkt das Repaint Ereignis, in VBA leider nicht :-(
Für eure Hilfe wäre ich wirklich sehr dankbar!
liebe Grüße Michael

9
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Paint-Ereignis per API ?
Udo
Es gibt schon ein repaint- Ereignis.
Nur, was du machst, wird von den Forms in Excel nicht unterstützt.
Du zeichnest nicht auf dem userform selbst, sondern auf dem screen.
Udo
AW: Paint-Ereignis per API ?
Michael
Hm ja es gibt ein Repaint- Ereignis, nur kann man das nicht direkt ansprechen. Also im Klappmenü von der Userform mit den Ereignissen erscheint es nicht. Komm ich irgendwie anders ran ?
Hm und wie mal ich dann direkt auf der Userform? Weil beim verschieben der Userform, verschiebt sich mein gemaltes schon mit ...
Danke nochmal ;-)
AW: Paint-Ereignis per API ?
Udo
Poste mal den Code, dann sehen wir weiter.
Udo
AW: Paint-Ereignis per API ?
Michael
Option Explicit
Private WindowsHDL As Long 'Windowshandel
Private hDC As Long 'Hdc der userform
Private Declare

Function GetDC Lib "user32" (ByVal hWnd As Long) As Long
Private Declare 

Function ReleaseDC Lib "user32" (ByVal hWnd As Long, ByVal hDC As Long)As Long
Private Declare 

Function SelectObject Lib "gdi32" (ByVal hDC As Long, ByVal hObject As Long) As Long
Private Declare 

Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
Private Declare 

Function Rectangle Lib "gdi32" (ByVal hDC As Long, ByVal X1 As Long, ByVal Y1 As Long, ByVal X2 As Long, ByVal Y2 As Long) As Long

Sub test2()  ' 

Sub Test von einem Button auf der Userform aus aufrufen
WindowsHDL = FindWindow(vbNullString, UserForm1.caption)    'Handel der Userfrom holen
hDC = GetDC(WindowsHDL)  'hdc dazu holen
Call SelectObject(hDC, WindowsHDL)
Call Rectangle(hDC, 10, 10, 100, 100)   'Viereck malen
Call ReleaseDC(WindowsHDL, hDC)     'Dc freigeben
End Sub

Hi,
Der Code zeichnet ein Viereck. Wichtig ist, dass du die Sub von der userform aus aufrufst, also die Userform muss schon zu sehen sein.
Anzeige
AW: Paint-Ereignis per API ?
Udo
Das funktioniert bei mir problemlos ohne repaint.
Udo
AW: Paint-Ereignis per API ?
Michael
Hi Udo,
Ja sicher, er malt es perfekt.
Aber mach nun mal folgendes: Verschiebe die Userform so an den Rand des Bildschirms, so dass sie nicht mehr zu sehen ist. Dann zurück... Danach ist das Rechteck weg :-(, weil sich die Userform "neu zeichnet" ohne dem Rechteck. Wenn ich das Ereignis abfangen könnte, so kann ich auch mein Rechteck neu malen.
Das ist das Problem.
Vielleicht kommt dir ja eine Idee ?
Danke Michael
AW: Paint-Ereignis per API ?
Udo
Wann du test2 das erste mal aufrufst, weiß ich nicht, aber dann so:

Private Sub UserForm_Layout()
test2
End Sub

Udo
Anzeige
AW: Paint-Ereignis per API ?
Michael
Ah danke, wusste nicht, dass das Repaint Ereignis in Vba so heißt :-).
Das ist zunächst mal eine Lösung... das einzige dumme daran ist, dass ich mir die Userform an meine Klasse übergebe. In der Klasse definiere ich eine Variable vom Typ Userform mit Events. Also : Private withevents UF as userform. So kann ich alle Ereignisse der Userform von der Klasse aus behandeln... nur das Problem ist, dass es da kein Layout ereignis mehr gibt.. Hmm
Auf jeden Fall danke für deine Hilfe.
Michael
AW: Paint-Ereignis per API ?
Udo
Ja, das kann schon sein, dass in der Klasse nicht alle Ereignisse zur Verfügung stehen.
Ohne den Zusammenhang zu kennen ist aber auch ein Rat zu einem workaround nicht möglich.
Udo
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige