Zum Inhalt springen

Formular Design in VBA


Empfohlene Beiträge

Geschrieben

Beowulf grüßt,

Durch die VB-Pro habe ich erfahren, das man z.B. auch runde Fenster erstellen kann, und das man aus all diesen funktionen der Win API auch eine ocx erstellen könnte...

1. Hat jemand so eine ocx, und kann er sie mir geben, bzw erklären, wie man sowas macht?

2. Kennt jemand gute Tutorials, wo man sowas lernen könnte?

gehabt euch wohl, und möge der Wind mir zahlreiche Antworten senden...

Beowulf

Geschrieben

Hallöchen..

versuch mal dieses hier...

Ist aus der AktiveVB und demonstriert ein ovales Formular

Zu weiteren Info´s www.activeVB.de

Viel Spass

Option Explicit

Private Declare Function CreateEllipticRgn Lib "gdi32" _

(ByVal X1 As Long, ByVal Y1 As Long, ByVal X2 As _

Long, ByVal Y2 As Long) As Long

Private Declare Function SetWindowRgn Lib "user32" (ByVal _

hwnd As Long, ByVal hRgn As Long, ByVal bRedraw _

As Long) As Long

Private Declare Function ReleaseCapture Lib "user32" () _

As Long

Private Declare Function SendMessage Lib "user32"Alias _

"SendMessageA" (ByVal hwnd As Long, ByVal wMsg As _

Long, ByVal wParam As Long, lParam As Any) As Long

Private Const HTCAPTION = 2

Private Const WM_NCLBUTTONDOWN = &HA1

Private Sub Form_Load()

Me.Picture = LoadPicture(App.Path & "\Back.gif")

Call CreateReg

End Sub

Private Sub Command1_Click()

Unload Me

End Sub

Private Sub Form_MouseDown(Button As Integer, Shift As Integer, _

x As Single, y As Single)

If y / Screen.TwipsPerPixelY < 25 Then

Call ReleaseCapture

Call SendMessage(Me.hwnd, WM_NCLBUTTONDOWN, HTCAPTION, 0&)

End If

End Sub

Private Sub CreateReg()

Dim x&, y&, dx&, dy&, Result&

With Me

dx = .Width / Screen.TwipsPerPixelX

dy = .Height / Screen.TwipsPerPixelY

Result = CreateEllipticRgn(y + 1, x + 1, dx - 1, dy - 1)

Call SetWindowRgn(.hwnd, Result, 1&)

End With

End Sub

Geschrieben

Danke, aber kann ich auch Fenster mithilfe von BMP´s erstellen? Also das ich ein BMP nehme und dem Fenster sage, sieh so aus!??

Geschrieben

Klaro, folgende Funktion setzt eine Farbe (bAlpha) durchsichtig. Unter der Funktion SetLayeredWindowAttributes

kann man eine RGB(.....) durchsichtig setzen. (Im Beispiel hellgrün) Also setzt dein BMP auf die Form, und die Form selber setzt du auf eine andere Farbe. Die noch sichtbaren Stücke der Form werden durchsichtig (Mit der Funktion abstimmen) Viel Spass

Option Explicit

' Fenstereigenschaft setzen

Private Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" _

(ByVal hwnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long

' Fenstereigenschaft auslesen

Private Declare Function GetWindowLong Lib "user32" Alias "GetWindowLongA" _

(ByVal hwnd As Long, ByVal nIndex As Long) As Long

' Attribut für Layered Window setzen

Private Declare Function SetLayeredWindowAttributes Lib "user32" _

(ByVal hwnd As Long, ByVal crKey As Long, ByVal bAlpha As Byte, _

ByVal dwFlags As Long) As Boolean

Private Const gwl_ExStyle = -20

Private Const ws_Ex_Layered = &H80000

Private Const lwa_Alpha = 2

Private Const lwa_ColorKey = 1

' Windows-Version ermitteln

Private Declare Function GetVersionEx Lib "kernel32" Alias "GetVersionExA" (lpVersionInformation As OSVERSIONINFO) As Long

Private Type OSVERSIONINFO

dwOSVersionInfoSize As Long

dwMajorVersion As Long

dwMinorVersion As Long

dwBuildNumber As Long

dwPlatformId As Long

szCSDVersion As String * 128

End Type

Private Sub Form_Load()

If Not CheckWinVersion Then

MsgBox "Leider eine zu alte Windows-Version!"

End

End If

Call SetWindowLong(hwnd, gwl_ExStyle, GetWindowLong(hwnd, gwl_ExStyle) Or ws_Ex_Layered)

Call SetLayeredWindowAttributes(hwnd, RGB(0, 255, 0), 0, lwa_ColorKey)

End Sub

Private Function CheckWinVersion() As Boolean

Dim lResult As Long

Dim OSInfo As OSVERSIONINFO

CheckWinVersion = False

' Windows-Version ermitteln

OSInfo.dwOSVersionInfoSize = Len(OSInfo)

lResult = GetVersionEx(OSInfo)

If lResult <> 0 Then

' API-Aufruf war fehlerfrei: Rückgabestruktur untersuchen

If OSInfo.dwPlatformId = 1 Then

' Windows 95/98/ME

MsgBox CStr(OSInfo.dwMajorVersion) & "." & CStr(OSInfo.dwMinorVersion)

If (OSInfo.dwMajorVersion >= 4 And OSInfo.dwMinorVersion > 90) Or _

(OSInfo.dwMajorVersion >= 5) Then

' Windows ME

CheckWinVersion = True

End If

ElseIf OSInfo.dwPlatformId = 2 Then

' Windows NT/2000

If OSInfo.dwMajorVersion >= 5 Then

' Windows 2000

CheckWinVersion = True

End If

End If

End If

End Function

Geschrieben

Hi!

Eine Bitmap ist ja immer rechteckig (oder quadratisch ;)) – was mache ich dann, wenn ich z.B. ein unregelmäßig geformtes Fenster möchte? Geht das mit dem Code auch (ich denke nämlich, das geht damit nicht?!)

Dann müsste ich ja eine Farbe aus dem Bitmap als Transparent markieren...

Technician

Geschrieben

Das sind ja gleich mehrere Dinge aufeinmal... ;)

Bmp durchsichtig geht sowieso nicht... Wenn dann schon gif.

Habe eine imgbox mal schnell auf eine frm gelegt und siehe da, das gif war nur sichtbar... frm habe ich eine andere Farbe gegeben was mit der Funktion s.o. transparent gemacht werden könnte. Aber verschiedene Formen der frm und durchsichtig inklusive bmp/gif... try and error.

Geschrieben

Hi siggy,

mit "Bitmap" meinte ich allgemein eine gespeicherte Grafik.

Wenn ich jetzt z.B. ein transparentes Gif habe, sagen wir mal einen blauen Pfeil und das "Drumherum" ist auf Transparent eingestellt.

Ich mach eine Form, Farbe hellgrün und stelle das Hellgrün als transparente Farbe ein. Dann lege ich das Gif mit dem Pfeil drauf - hab ich dann eine Form in Pfeil-Form?!

Wenn ja - dann könnte man da ganz tolle Sachen mit machen!

Technician

*die-gerade-an-einem-futuristischen-Terminplaner-programmiert*

Geschrieben

Jo zack, hab ich zwar zusammenhängend (noch) nicht ausprobiert, so ist es aber zu verstehen. Blauer Pfeil, grüne frm. Obacht, es darf wirklich kein grün im Pfeil vorkommen. Durch RGB(bAlpha) kannst du allerdings die Farbe verändern. Gleiches dann folglich in der frm.backcolor = rgb(balpha).

Geschrieben

ja, mach das mal...

Nebenbei mal erwähnt, ich habs gerade ausprobiert mit einem blauen Pfeil... funzt !!!

Um wiklich nur noch einen Pfeil zu sehen, muss man die frm.borderstyle=0 setzen (<kein> ). Allerdings kann man die Form dann nicht mehr beliebig verschieben.

Und nun ist wieder Code gefragt um diesen "pfeil" auf der Oberfläche doch noch zu hin und her zu schaukeln...

Viel Glück bin mal auf deine Erfolge gespannt (Vieleicht Beispiel Code)

Gruß Siggy

Geschrieben

<BLOCKQUOTE><font size="1" face="Verdana, Arial, Helvetica, sans-serif">Zitat:</font><HR>Original erstellt von siggy:

<STRONG>ja, mach das mal...

Nebenbei mal erwähnt, ich habs gerade ausprobiert mit einem blauen Pfeil... funzt !!!

Um wiklich nur noch einen Pfeil zu sehen, muss man die frm.borderstyle=0 setzen (<kein> ). Allerdings kann man die Form dann nicht mehr beliebig verschieben.

Und nun ist wieder Code gefragt um diesen "pfeil" auf der Oberfläche doch noch zu hin und her zu schaukeln...

Viel Glück bin mal auf deine Erfolge gespannt (Vieleicht Beispiel Code)

Gruß Siggy</STRONG>

Geschrieben

<BLOCKQUOTE><font size="1" face="Verdana, Arial, Helvetica, sans-serif">Zitat:</font><HR>Original erstellt von siggy:

<STRONG>ja, mach das mal...

Nebenbei mal erwähnt, ich habs gerade ausprobiert mit einem blauen Pfeil... funzt !!!

Um wiklich nur noch einen Pfeil zu sehen, muss man die frm.borderstyle=0 setzen (<kein> ). Allerdings kann man die Form dann nicht mehr beliebig verschieben.

Und nun ist wieder Code gefragt um diesen "pfeil" auf der Oberfläche doch noch zu hin und her zu schaukeln...

Viel Glück bin mal auf deine Erfolge gespannt (Vieleicht Beispiel Code)

Gruß Siggy</STRONG>

Geschrieben

Hey Technician,

funzt ohne Probleme. Bis auf die MSGBOX :)

Unten im Code hat der gute Programmierer schon den geänderten Source für einstellbare Tranzparenz (nicht die ganze frm) in weiser Voraussicht mitgeliefert. Einfach auskommentieren...

THX

CU

Geschrieben

Hi!

Ich hab jetzt einen Code gefunden zum Form-in-den-Hintergrund-Stellen!

Hab den Code aber leider jetzt gerade nicht da, aber kann ihn dir bei Bedarf an Dienstag zukommen lassen (müsste es dann aber noch heute wissen, ob du das gebrauchen kannst!)

Das Seltsame war: für In-den-Vordergrund kann man eine einfache Funktion schreiben, für in-den-Hintergrund braucht man einen Timer (beim Anklicken der Form kommt sie sonst nämlich wieder in den Vordergrund!)

Aber es funktioniert! (Hab's zum Testen meines Programms natürlich dann wieder ausgeschaltet, weil das beim Testen furchtbar nervt, wenn ich immer die Form suchen muss ;))

Gruß,

Technician

Geschrieben

<BLOCKQUOTE><font size="1" face="Verdana, Arial, Helvetica, sans-serif">Zitat:</font><HR>Original erstellt von siggy:

<STRONG>Ja, so kann man es natürlich auch machen :)

Gerne nehm ich den Code. Kann man ja immer mal gebrauchen

Also bis Dienstag dann...

Gruß Siggy</STRONG>

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...