Andere Formen

Sliver

Erfahrenes Mitglied
Grüße,
ich wollte mal Fragen ob es möglich ist die Form abzurunden oder total zu verändern. Z.B. so wie im Designmodus vom Media Player.

*edit*
Nochwas: Wie macht man einzelne Bereiche oder die ganze Form unsichtbar wenn der Mauszeiger nicht drauf ist und wenn er drauf ist sichtbar? Es sollte so wirken das vom Sichtbaren langsam ins Unsichtbar wechselt und umgekehrt (*hat das wort doch noch im kopf gefunden* :) es soll verblassen).


mfg
Sliver
 
Zuletzt bearbeitet:

Dario Linsky

Erfahrenes Mitglied
ersteres ist möglich, und auch eigentlich gar nicht mal so schwer. mit der api-funktion CreateRoundRectRgn kannst du z.b. ein abgerundetes rechteck erstellen. und das kannst du dann mit der api-funktion SetWindowRgn kannst du dein formular dann zu diesem rechteck formen. :)

zu dem zweiten: ab windows 2000 gibt's einen alpha-effekt, mit dem man fenster (und ich glaub auch einzelne steuerelemente) halbtransparent machen kann. die api-funktion dazu kenn ich zwar nicht, aber ich weiss, dass es geht.
dazu müsstest du einfach die mausposition abfragen und prüfen, ob der cursor innerhalb des controls liegt. und je nachdem eben in einer schleife deinen fading-effekt aufbauen.
 

Sliver

Erfahrenes Mitglied
Danke erstmal

Aber kannst du mir genau sagen wie das geht? Ich bekomme ständig nur Fehlermeldungen und wenn ich eine Zahl vorne für Int einsetzte kommt hinten am Slash ne Fehlermeldung. :confused:
 

Sliver

Erfahrenes Mitglied
Blauer Kreis: Zahlen
Grüner Kreis: Slash-Fehlermeldung
 

Anhänge

  • formpro.jpg
    formpro.jpg
    47,8 KB · Aufrufe: 138
Zuletzt bearbeitet:

Dario Linsky

Erfahrenes Mitglied
ist doch klar. du kannst ja auch nicht die c-syntax in visual basic benutzen. :)
so ziemlich das ganze windows-api ist in c (und teilweise auch c++) geschrieben. deswegen sind die api-funktionen auch fast überall als prototypen in c definiert.

du musst erstmal die funktionen in dein programm importieren, damit du damit überhaupt arbeiten kannst. die genaue deklaration von den beiden funktionen kenn ich jetzt nicht auswendig, müsste aber etwa so aussehen:
Code:
Private Declare Function CreateRoundRectRng Lib "gdi32" (nLeftRect As Long, nTopRect As Long, nRightRect As Long, nBottomRect As Long, nWidthEllipse As Long, nHeightEllipse As Long) As HRGN
Private Declare Function SetWindowRgn Lib "user32" (hWnd As HWND, hRgn As HRGN, hRedraw As Boolean) As Long

und dann kannst du mit diesen funktionen in deinem programm arbeiten.

kann aber gut sein, dass du HRGN und HWND erst als eigenen typ definieren musst oder dass die funktionen anders deklariert werden müssen. es gibt zusammen mit visual basic einen api-viewer, der dir zu einer bestimmten api-funktion sofort die deklaration liefert, die du kopieren kannst.
 

Sliver

Erfahrenes Mitglied
Wo muss ich jetzt genau die Zahlen einsetzen? (bei dem "n" doch oder?)

Oder kannst du mir nicht ein kleines Beispiel Program zeigen? (Wenn es nicht viel arbeit ist und wenn doch dann informier mich :))
 

Dario Linsky

Erfahrenes Mitglied
wie schon gesagt: ich bin nicht sicher, ob die deklaration so richtig ist. such dir das lieber aus dem api-viewer zusammen und kopier das in dein programm.

danach kannst du einfach mit dem folgenden code rumexperimentieren. vorher setzt du aber die scalemode-eigenschaft des formulars auf pixel.
Code:
Dim myRect As HRGN

myRect = CreateRoundRectRgn(0, 0, Form1.ScaleWidth, Form1.ScaleHeight, 40, 40)
SetWindowRgn Form1.Handle, myRect, True
ohne gewähr...
 

Sliver

Erfahrenes Mitglied
Danke vielmals, jetzt hast du's geschafft! %) Mein Hirn ist hin. :)

api-viewer: Wo?
scalemode-eigenschaft: :confused:
api: was soll das eigentlich heißen und was ist das? :confused:

*sollte sich vielleicht erstmal hinauen* :rolleyes:
 

Daniel Toplak

Erfahrenes Mitglied
Zunächt mal API = Application-Programming-Interface. Also eine Programmierschnittstelle. In dem Fall zu Windows (WinAPI). Die WinAPI umfasst ca 1000 Funktionen (mehr oder weniger, keine Ahnung). Damit kannst du weit aus mehr machen als mit den normalen Mitteln von VB. Wie asphyxia das richtig gesagt hat sind die in C/C++ programmiert und in den jeweiligen DLL's zusammengefasst. Diese Funktionen musst du nun aus den DLL's in dein Programm implementieren. Der Aufruf erfolgt meistens auch etwas anders als bei den "normalen" VB-Funktionen, denn da braucht man Struckturen und so Art Pseudozeiger die dann an die Funktionen übergeben werden.
Solltest du in VB noch nicht so Fit sein, wirst du es anfangs etwas schwer haben mit den API-Funktionen, aber wenn du das Prinzip mal verstanden hast, dann wirst du feststellen, das VB in Verbindung mit WinAPI eine sehr mächtige Sprache ist und es werden sich neue Welten auftun *g*.
Ich hab mir trotzdem mal Mühe gemacht und ein kleines Beispiel erstellt. Es wird ein Fenster angezeigt, das eliptisch ist und beim Verlassen des Mauszeigers halbtransparent wird, beim Eintretten des Mauszeigers in das Fenster wird es wieder durchsichtig. Dieser Blendingeffekt wird noch etwas fließend übergehen, damit es schön aussieht.
Spiel einfach mal damit ein wenig rum. Solltest du Fragen haben, dann poste einfach wieder hier rein.

Hier kannst du dir ein super-tolles Tool runterladen, das mittlerweile unerlässlich für mich geworden ist, wenn es um VB und API geht. Es ist kostenlos und stellt den API-Viewer von VisualStudio völlig in den Schatten. http://www.allapi.net

Gruss Homer
 

Anhänge

  • oval_transparent.zip
    2,2 KB · Aufrufe: 42