Zum Inhalt springen

VisualBasic 6.0 - Form immer im Hintergrund


Technician

Empfohlene Beiträge

Hallo!

Wie kann ich einer Form ein "Attribut" zuweisen, sodass sie immer im Hintergrund ist?

Konkret: Mein Programm, ein Terminplaner, soll direkt auf dem Desktop liegen und muss immer das unterste Programm sein; es soll nämlich so wirken, als wäre es in den Desktopbereich fest integriert.

Irgendwo hab ich den Code hier gefunden

Declare Function SetWindowPos Lib "User32" (ByVal hWnd As Long, ByVal hWndInsertAfter As Long, ByVal x As Long, ByVal y As Long, ByVal cx As Long, ByVal cy As Long, ByVal wFlags As Long) As Long

Public Const HWND_TOP = 0

Public Const HWND_TOPMOST = -1

Public Const HWND_NOTOPMOST = -2

Public Const SWP_NOMOVE = &H2

Public Const SWP_NOSIZE = &H1

Public Const FLAGS = SWP_NOMOVE Or SWP_NOSIZE

Sub StayNotOnTop(the As Form)

SetWinOnTop = SetWindowPos(the.hWnd, HWND_NoTOPMOST, 0, 0, 0, 0, FLAGS)

End Sub

Ich habe den Code in ein bas-Modul eingefügt und eine Form (Form1) erzeugt.

Ins Initialize der Form1 habe ich

StayNotOnTop(Form1)

gestellt.

Der Code macht aber gar nix; Fehler bei Compilieren gibt es nicht, aber er macht eben nix...

Schon mal vielen Dank falls mir da jemand weiterhelfen kann,

Technician

Link zu diesem Kommentar
Auf anderen Seiten teilen

Auf jeden Fall muss zuerst die Form mal sichtbar sein, also z.B. bei Form_Activate einbauen.

Dann sieht es so aus, als ob diese Funktion nur das Fenster nach "Hinten", also hinter alle andere Fenster dieser Applikation (oder aller Programme?) legt. Das ist aber keine feste Eigenschaft der Form sondern nur so was wie bei der Reihenfolge der Controls einer VB-Form. Sobald ein anderes weiter hinten liegt (weil man es minimiert oder ähnliches) weil man das Fenster anklickt, kommt es natürlich wieder nach vorne.

Eine Lösung wäre, dieses Fenster zu einem Control auf dem Screen zu machen. Was gehen könnte ist folgendes: nehme einen Frame auf einer Form und schreibe im Programm:

set Frame.Container = Screen

leider klappt das nicht (gerade probiert). Aber man kann eine Systemfunktion benutzen, heiss irgendwie "SetWindow". Mit der kann man sagen, dass das Framecontrol auf dem Desktop liegt.

kenne ich aber nicht auswendig

Vielleicht eine kleine Hilfe... :confused:

Link zu diesem Kommentar
Auf anderen Seiten teilen

Ich habe ein Beispiel, um eine Form dauerhaft in den Vordergrund zu stellen - und der Code ist dem was ich da unten gepostet habe, ziemlich ähnlich - geht auch auf eine Systemfunktion

SetWindowPos Lib "User32"

drauf. Und es muss irgendein Parameter sein, der entscheidet, ob die Form dauerhaft im Hintergrund positioniert ist...

Aber leider kenn ich mich mit den Systemfunktionen nicht aus :(

Technician

Link zu diesem Kommentar
Auf anderen Seiten teilen

Hi!

Falls irgendjemandem was hilft (um mir zu helfen ;)) - das hier ist der Code für "Form immer in den VORDERgrund".

Dieser Code funktioniert einwandfrei; der Code für "immer in den HINTERgrund" macht allerdings nixxxxx :-(

Private Declare Function SetWindowPos Lib "user32" _

(ByVal hwnd As Long, ByVal hWndInsertAfter As Long, _

ByVal X As Long, ByVal y As Long, ByVal cx As Long, _

ByVal cy As Long, ByVal wFlags As Long) As Long

Sub AlwaysOnTop(F As Form, OnTop As Boolean)

'Sub AlwaysOnTop(F As Form)

'OnTop = True: Fenster immer im Vordergrund

'OnTop = False: Fenster immer im Hintergrund

Dim Switch As Integer

If OnTop Then

Switch = -1 'im Vordergrund

Else

Switch = -2 'nicht im Vordergrund

End If

Call SetWindowPos(F.hwnd, Switch, 0, 0, 0, 0, &H53)

End Sub

Private Sub Command1_Click()

Form2.Show

End Sub

Private Sub Form_Load()

Call AlwaysOnTop(Form1, True)

End Sub

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>Auf jeden Fall muss zuerst die Form mal sichtbar sein, also z.B. bei Form_Activate einbauen.

Dann sieht es so aus, als ob diese Funktion nur das Fenster nach "Hinten", also hinter alle andere Fenster dieser Applikation (oder aller Programme?) legt. Das ist aber keine feste Eigenschaft der Form sondern nur so was wie bei der Reihenfolge der Controls einer VB-Form. Sobald ein anderes weiter hinten liegt (weil man es minimiert oder ähnliches) weil man das Fenster anklickt, kommt es natürlich wieder nach vorne.

</STRONG>

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