Technician Geschrieben 26. Oktober 2001 Teilen Geschrieben 26. Oktober 2001 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 Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
siggy Geschrieben 26. Oktober 2001 Teilen Geschrieben 26. Oktober 2001 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: Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Technician Geschrieben 26. Oktober 2001 Autor Teilen Geschrieben 26. Oktober 2001 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 Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Technician Geschrieben 29. Oktober 2001 Autor Teilen Geschrieben 29. Oktober 2001 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 Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Technician Geschrieben 30. Oktober 2001 Autor Teilen Geschrieben 30. Oktober 2001 <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> Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Empfohlene Beiträge
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.