Zum Inhalt springen
View in the app

A better way to browse. Learn more.

Fachinformatiker.de

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

Formular Design in VBA

Empfohlene Antworten

Veröffentlicht

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

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

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

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

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

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.

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*

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).

Jo, dann werd ich das mal am Wochenende austesten und dann am Montag meinen (hoffentlichen) Erfolg damit posten!

Gruß&Danke,

Technician

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

<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>

<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>

Hey Technician

Win 2000 wird hier sicherlich das Stichwort sein.

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

<STRONG>Hey Technician

Win 2000 wird hier sicherlich das Stichwort sein.</STRONG>

Wer suchet, der findet!

Hier

http://www.vb-faq.com/Articles/Pharis/transparentform.asp

hab ich ein Beispiel gefunden, geht problemlos unter WinNT und auch unter 98, soviel ich weiß (NT ausprobiert!).

Allerdings wird alles, was auf der Form ist, transparent gemacht - der Code lässt sich aber bei Bedarf sicherlich entsprechend ändern

Gruß

Technician

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

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

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

<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>

Ja Sammler :P

Dann mal ein schönen WE

Archiv

Dieses Thema wurde archiviert und kann nicht mehr beantwortet werden.

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.