 |
Das deutsche QBasic- und FreeBASIC-Forum Für euch erreichbar unter qb-forum.de, fb-forum.de und freebasic-forum.de!
|
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
wolkensteyn

Anmeldungsdatum: 21.07.2008 Beiträge: 4
|
Verfasst am: 25.07.2008, 02:28 Titel: Free-Basic-Fenster wieder in den Vordergrund bringen |
|
|
Heyho,
habe nach der Ausführung eines Shell-Befehls das Problem, dass FreeBasic nach der Ausführung zwar weiter macht, das entsprechende Ausgabefenster aber im Hintergrund bleibt
Gibt es dafür (nachvollziehbare^^) Gründe und weiß jemand, wie man das Problem beheben kann?
Danke im Voraus.
__________
wolkensteyn
P.S. Hab schon Einiges hier im Forum durchgesucht, aber nichts gefunden, was mir weitergeholfen hätte. Hab noch nicht recht den Überblick hier ... |
|
Nach oben |
|
 |
Sebastian Administrator

Anmeldungsdatum: 10.09.2004 Beiträge: 5969 Wohnort: Deutschland
|
|
Nach oben |
|
 |
wolkensteyn

Anmeldungsdatum: 21.07.2008 Beiträge: 4
|
Verfasst am: 25.07.2008, 13:12 Titel: Nicht ganz... |
|
|
@Sebastian: Mhm, nicht ganz. Das mit SHELL gestartete Programm soll schon im Vordergrund laufen. Nur nach dem Beenden soll die FreeBASIC-Anwendung wieder nach vorne. Das tut sie aber nicht immer warum weiß ich nicht...
Eine Lösung wäre mit dem SCREEN-Befehl das Fenster wieder in den Vordergrund zu holen, aber eigentlich müsste das doch von alleine gehen, oder? zumal mit dem SCREEN-Befehl der Bildschirm erst einmal gelöscht wird, man den also vorher mit GET sichern müsste... Das scheint mir eine Lösung zu sein, ist aber nicht sehr elegant. Die Frage wäre, ob man das aktuelle FB-fenster nicht einfacher in den Vordergrund bringen kann...
__________
wolkensteyn |
|
Nach oben |
|
 |
volta
Anmeldungsdatum: 04.05.2005 Beiträge: 1876 Wohnort: D59192
|
Verfasst am: 25.07.2008, 16:50 Titel: |
|
|
Hi,
bisher habe ich auch noch keine Möglichkeit dafür gefunden.
Mit Code: | SetFocus handle
BringWindowToTop handle
UpdateWindow handle
| in allen möglichen Reihenfolgen geht es (unter WinME) nicht. _________________ Warnung an Choleriker:
Dieser Beitrag kann Spuren von Ironie & Sarkasmus enthalten.
Zu Risiken & Nebenwirkungen fragen Sie Ihren Therapeuten oder Psychiater. |
|
Nach oben |
|
 |
Sebastian Administrator

Anmeldungsdatum: 10.09.2004 Beiträge: 5969 Wohnort: Deutschland
|
|
Nach oben |
|
 |
volta
Anmeldungsdatum: 04.05.2005 Beiträge: 1876 Wohnort: D59192
|
Verfasst am: 25.07.2008, 17:55 Titel: |
|
|
Hey,
jaaa funktioniert!
Bei mir (WinME) sprang aber durch
SetWindowPos Handle, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOMOVE + SWP_NOSIZE
das notpad-Fenster in den Hintergrund, behielt aber den Fokus.
Ich habe die Zeile auskommentiert und mal FB die Definitionen überlassen
Code: | ' FreeBASIC-Fenster in den Vordergrund bringen
' Getestet mit FreeBASIC 0.20.0 SVN (Win)
'
' Basiert auf ActiveVB-Tipp Nr. 214 (www.activevb.de)
' Portiert nach FreeBASIC und im Funktionsumfang erweitert
' durch Sebastian - 25.07.2008 - www.freebasic-portal.de
'
' Der Quelltext kann frei verwendet werden.
' Für eventuelle Schäden wird nicht gehaftet.
'
' ==== WinAPI Typendefinitionen ====
#Include Once "windows.bi"
' ==== Eigene Fenster-Nach-Vorne-Sub ====
Declare Sub AbNachVorn ()
' ==== SUB zur Erzeugung des Testbilds ====
Declare Sub Testbild ()
Const Fenstertitel = "Test-o-matic"
Dim As Integer i, PosX, PosY
Randomize Timer
Screen 12
WindowTitle Fenstertitel
Testbild
Shell "start notepad"
sleep 3000
AbNachVorn()
Sleep: End
Sub Testbild ()
Dim As Integer i, PosX, PosY, Radius, Farbe, MaxRadius=30
For i = 1 to 150
PosX = Int(Rnd*639)+1
PosY = Int(Rnd*479)+1
Radius = Int(Rnd*MaxRadius)+1
Farbe = Int(Rnd*15)+1
CIRCLE (PosX,PosY),Radius,Farbe
Next i
End Sub
Sub AbNachVorn ()
Dim As HANDLE Handle
Dim As Integer Result
Dim As WINDOWPLACEMENT WndPlcmt
Handle = FindWindow(0, StrPtr(Fenstertitel))
'SetWindowPos Handle, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOMOVE + SWP_NOSIZE
SetWindowPos Handle, HWND_NOTOPMOST, 0, 0, 0, 0, SWP_NOMOVE + SWP_NOSIZE
SetFocus Handle
With WndPlcmt
.Length = SizeOf(WndPlcmt)
Result = GetWindowPlacement(Handle, @WndPlcmt)
If Result Then
If .showCmd = SW_SHOWMINIMIZED Then
.flags = 0
.showCmd = SW_SHOWNORMAL
Result = SetWindowPlacement(Handle, @WndPlcmt)
Else
SetForegroundWindow(Handle)
Result = BringWindowToTop(Handle)
End If
End If
End With
End Sub |
_________________ Warnung an Choleriker:
Dieser Beitrag kann Spuren von Ironie & Sarkasmus enthalten.
Zu Risiken & Nebenwirkungen fragen Sie Ihren Therapeuten oder Psychiater. |
|
Nach oben |
|
 |
Sebastian Administrator

Anmeldungsdatum: 10.09.2004 Beiträge: 5969 Wohnort: Deutschland
|
|
Nach oben |
|
 |
volta
Anmeldungsdatum: 04.05.2005 Beiträge: 1876 Wohnort: D59192
|
Verfasst am: 25.07.2008, 18:07 Titel: |
|
|
Und mit der auskomentierten Zeile geht es?
Dann würde ich vorher eine WinOsVersions - Abfrage machen.
bzw. erst mal auf XP testen! _________________ Warnung an Choleriker:
Dieser Beitrag kann Spuren von Ironie & Sarkasmus enthalten.
Zu Risiken & Nebenwirkungen fragen Sie Ihren Therapeuten oder Psychiater. |
|
Nach oben |
|
 |
Sebastian Administrator

Anmeldungsdatum: 10.09.2004 Beiträge: 5969 Wohnort: Deutschland
|
|
Nach oben |
|
 |
volta
Anmeldungsdatum: 04.05.2005 Beiträge: 1876 Wohnort: D59192
|
Verfasst am: 25.07.2008, 18:33 Titel: |
|
|
Wer kann das mal unter XP testen?
Code: | ' FreeBASIC-Fenster in den Vordergrund bringen
' Getestet mit FreeBASIC 0.20.0 SVN (Win)
'
' Basiert auf ActiveVB-Tipp Nr. 214 (www.activevb.de)
' Portiert nach FreeBASIC und im Funktionsumfang erweitert
' durch Sebastian - 25.07.2008 - www.freebasic-portal.de
' Getestet mit FreeBASIC 0.18.5 (WinME) -Volta
'
' Der Quelltext kann frei verwendet werden.
' Für eventuelle Schäden wird nicht gehaftet.
'
' ==== WinAPI Typendefinitionen ====
#Include Once "windows.bi"
' ==== Eigene Fenster-Nach-Vorne-Sub ====
Declare Sub AbNachVorn (Fenstername As String)
' ==== SUB zur Erzeugung des Testbilds ====
Declare Sub Testbild ()
Const Fenstertitel = "Test-o-matic"
Dim As Integer i, PosX, PosY
Randomize Timer
Screen 18,32
WindowTitle Fenstertitel
Testbild
Shell "start notepad"
Sleep 3000
AbNachVorn(Fenstertitel)
Sleep: End
Sub Testbild ()
Dim As Integer i, PosX, PosY, Radius, Farbe, MaxRadius=30
For i = 1 To 150
PosX = Int(Rnd*639)+1
PosY = Int(Rnd*479)+1
Radius = Int(Rnd*MaxRadius)+1
Farbe = Int(Rnd*15)+1
Circle (PosX,PosY),Radius,Farbe
Next i
End Sub
Function GetOSplatform () As UInteger
Dim OSV As OSVERSIONINFO
OSV.dwOSVersionInfoSize = SizeOf(OSV)'Laenge des UDT angeben
If GetVersionEx( @OSV ) Then 'Funktion aufrufen
Return OSV.dwPlatformId 'Rueckgabewert
'0 = ???
'1 = Win 95 | 98 | ME
'2 = NT | W2k| XP | Vista
End If
Function = 0
End Function
Sub AbNachVorn (Fenstername As String)
Dim As HANDLE Handle = FindWindow(0, Fenstername)
Dim As WINDOWPLACEMENT WndPlcmt
If GetOSplatform >=2 Then
SetWindowPos Handle, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOMOVE + SWP_NOSIZE
SetWindowPos Handle, HWND_NOTOPMOST, 0, 0, 0, 0, SWP_NOMOVE + SWP_NOSIZE
End if
With WndPlcmt
.Length = SizeOf(WndPlcmt)
If GetWindowPlacement(Handle, @WndPlcmt) Then
If .showCmd = SW_SHOWMINIMIZED Then
.flags = 0
.showCmd = SW_SHOWNORMAL
SetWindowPlacement(Handle, @WndPlcmt)
Else
SetForegroundWindow(Handle)
BringWindowToTop(Handle)
SetFocus Handle
End If
End If
End With
End Sub |
_________________ Warnung an Choleriker:
Dieser Beitrag kann Spuren von Ironie & Sarkasmus enthalten.
Zu Risiken & Nebenwirkungen fragen Sie Ihren Therapeuten oder Psychiater. |
|
Nach oben |
|
 |
nemored

Anmeldungsdatum: 22.02.2007 Beiträge: 4703 Wohnort: ~/
|
Verfasst am: 26.07.2008, 01:22 Titel: |
|
|
Wenn ich schon grade mal XP anhabe ...
Mit Nicht-auskommentierter Zeile springt das FB-Fenster wieder in den Vordergrund, bekommt aber keinen Fokus. Mit auskommentierter Zeile passiert bei mir dasselbe wie bei Sebastian. _________________ Deine Chance beträgt 1:1000. Also musst du folgendes tun: Vergiss die 1000 und konzentriere dich auf die 1. |
|
Nach oben |
|
 |
|
|
Du kannst keine Beiträge in dieses Forum schreiben. Du kannst auf Beiträge in diesem Forum nicht antworten. Du kannst deine Beiträge in diesem Forum nicht bearbeiten. Du kannst deine Beiträge in diesem Forum nicht löschen. Du kannst an Umfragen in diesem Forum nicht mitmachen.
|
|