vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
Mails senden, abrufen und decodieren - ganz easy ;-)  
 vb@rchiv Quick-Search: Suche startenErweiterte Suche starten   Impressum  | Datenschutz  | vb@rchiv CD Vol.6  | Shop Copyright ©2000-2026
 
zurück

 Sie sind aktuell nicht angemeldet.Funktionen: Einloggen  |  Neu registrieren  |  Suchen

VB & Windows API
SetWindowPos mit MDIForm und normaler Form (kein MDI child) 
Autor: jacky ryan
Datum: 24.02.12 20:20

Hallo,

nach mehreren Stunden erfolgloser Google-Sucherei hoffe ich, dass mir einer von euch helfen kann.

Ich habe ein Programm mit einer MDIForm und mehreren MDI-Childs und mehreren "nicht"-MDI-Childs. Wenn ich nun möchte das eine "nicht"-MDI-Child-Form im Vordergrund ist, schaffe ich es nicht, dass die MDIForm im Hintergrund bleibt.

Folgender Code:

MDIForm1.frm:
Private Sub MDIForm_Load()
    Form1.Show
End Sub
Form1.frm (kein MDI-Child):
Option Explicit
 
Private Declare Function SetWindowPos Lib "user32.dll" (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
 
Private Const SWP_NOMOVE = 2
Private Const SWP_NOSIZE = 1
Private Const HWND_FLAGS = SWP_NOMOVE Or SWP_NOSIZE
Private Const HWND_TOP = 0
Private Const HWND_TOPMOST = -1
Private Const HWND_NOTOPMOST = -2
 
Private Sub Command1_Click()
    Call SetWindowPos(Me.hwnd, HWND_TOPMOST, 0, 0, 0, 0, HWND_FLAGS)
End Sub
 
Private Sub Command2_Click()
    Call SetWindowPos(Me.hwnd, HWND_NOTOPMOST, 0, 0, 0, 0, HWND_FLAGS)
End Sub
Wenn ich auf Command1 klicke ist Form1 zunächst im Vordergrund. Ich kann dann wie erwartet das Fenster eines anderen Programms öffnen, Form1 bleibt aber im Vordergrund. Wenn ich nun Form1 anklicke taucht die MDIForm1 aber auch wieder auf! Und genau das will ich verhindern, die MDIForm1 soll im Hintergrund bleiben.

Die MDIForm1 zu minimieren geht nicht, weil der Benutzer eventuell noch mit der MDIForm1 arbeiten will.

Geht das irgendwie?

Vielen Dank für eure Hilfe,
Jacky
0
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: SetWindowPos mit MDIForm und normaler Form (kein MDI child) 
Autor: jacky ryan
Datum: 24.02.12 20:51

Ich habe soeben noch was rausgefunden:

Es reicht auch wenn es 2 normale Forms sind, es hat nix mit der MDI zu tun. Zudem tritt der Effekt nur auf, wenn auf der Form im TOPMOST auf die Titelleiste geklickt wird (üblicherweise zum verschieben). Wenn in die Form selbst geklickt wird passiert nichts! Ein Bug?
0
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: SetWindowPos mit MDIForm und normaler Form (kein MDI child) 
Autor: ModeratorMartoeng (Moderator)
Datum: 27.02.12 18:11

Kein Bug, beabsichtigtes Verhalten von MDIForms.


vbarchiv.dll (Freeware), Tutorials uvm. auf http://www.martoeng.com.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: SetWindowPos mit MDIForm und normaler Form (kein MDI child) 
Autor: jacky ryan
Datum: 27.02.12 22:54

Wie gesagt, an der MDI liegt es gar nicht.
Die Fenster scheinen einen Zusammenhang zu haben, wenn man die Titelzeile anklickt.

Hintergrund:
Ich möchte aus besagtem Programm (MDI+childs+non_childs) über shell() ein anderes, unabhängiges Programm öffnen. Das Fenster des anderen Programms wird üblicherweise maximiert. Nun soll eine Liste mit Namen angezeigt werden, welche man sich herauskopieren und im anderen Programm einfügen kann. Diese Liste kommt momentan vom VB6-Programm. Um nicht jedesmal hin- und herzuklicken wäre es schön, wenn ein kleines Fenster mit der Liste im Vordergrund bleibt. Dummerweise taucht aber der Rest des VB6-Programms auch auf, wenn man sich einen Namen herauskopieren möchte.

Irgendwelche Ideen?
0
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Sie sind nicht angemeldet!
Um auf diesen Beitrag zu antworten oder neue Beiträge schreiben zu können, müssen Sie sich zunächst anmelden.

Einloggen  |  Neu registrieren

Funktionen:  Zum Thema  |  GesamtübersichtSuchen 

nach obenzurück
 
   

Copyright ©2000-2026 vb@rchiv Dieter Otter
Alle Rechte vorbehalten.
Microsoft, Windows und Visual Basic sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Ländern. Weitere auf dieser Homepage aufgeführten Produkt- und Firmennamen können geschützte Marken ihrer jeweiligen Inhaber sein.

Diese Seiten wurden optimiert für eine Bildschirmauflösung von mind. 1280x1024 Pixel