Zum Inhalt springen

Formular Design in VBA


Gast BeowulfOF

Empfohlene Beiträge

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

Link zu diesem Kommentar
Auf anderen Seiten teilen

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

Link zu diesem Kommentar
Auf anderen Seiten teilen

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

Link zu diesem Kommentar
Auf anderen Seiten teilen

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.

Link zu diesem Kommentar
Auf anderen Seiten teilen

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*

Link zu diesem Kommentar
Auf anderen Seiten teilen

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

Link zu diesem Kommentar
Auf anderen Seiten teilen

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

Link zu diesem Kommentar
Auf anderen Seiten teilen

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

Link zu diesem Kommentar
Auf anderen Seiten teilen

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

Link zu diesem Kommentar
Auf anderen Seiten teilen

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

Link zu diesem Kommentar
Auf anderen Seiten teilen

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

Link zu diesem Kommentar
Auf anderen Seiten teilen

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