Allgemeine Fragen zur PROFAN Programmierung
Views (Heute): 241004 (2440)
  Suchen
 Zurück zur Übersicht
 AutorThema: Showwindow unter XP
Martin Pohl
Datum:21.07.02 23:00 Antwortenals Email verschicken (martin_pohl@msn.com) 


Moin!

Ich habe einen Dialog mit dem Handle main%. Mit showwindow möchte ich es in den Vordergrund bringen. Deshalb verwende ich am Ende die -1, um es in den Vordergrund zu bringen und es auch da bleibt. Wenn ich dann einen festgelegten Button drücke reagiert das Prog auch. Wenn ich jedoch dann ein anderes Fenster markiere oder auf den Desktop klicke geriet mein Prog wieder in den Hintergrund, obwohl es vorne bleiben soll. Ist das ein Problem mit WinXP oder ist da eine andere Fehlerquelle? - Profan² 5.0


Rolf Koch
Datum:21.07.02 23:37 Antwortenals Email verschicken (webmaster@rokosoft.de) 


Hi versuchs mal so:

mal nicht showwindow, sondern
SetWindowPos main% = x,y - x,y;-1

und gehts?
Rolf


Martin Pohl
Datum:22.07.02 09:34 Antwortenals Email verschicken (martin_pohl@msn.com) 


Nee, das klappt auch nicht. Das soll so gehen:
Der Dialog main% wird mit SetWindowPos aus dem Sichtbereich verschoben und soll trotzdem aktiv bleiben (immer).


Alexander Schoenfeld
Datum:22.07.02 16:59 Antwortenals Email verschicken (alexander.schoenfeld@chronologic.de) 


Das selbe Problem habe ich unter W2K Prof auch...
Leider bisher ohne Lösung...

Mit freundlichem Gruss / kind regards,
Alexander Schoenfeld

Email: alexander.schoenfeld@chronologic.de


Frank Abbing
Datum:22.07.02 17:06 Antwortenals Email verschicken (frankabbing@12move.de) 


Hi,

dazu ist Profan's SetWindowPos zu unflexibel. Das geht nur mit API-Mitteln.
Schreibt diese beiden Zeilen hinter den Windows-Befehl:

DEF NewWindowPos(7) !"USER32","SetWindowPos"
NewWindowPos(%hwnd,-1,0,0,0,0,$13)

Die Fensterposition und -größe ist hierbei egal.
Jetzt läßt sich das Fenster garantiert nicht mehr nach hinten klicken, getestet unter Windows XP...

Gruß, Frank



Martin Pohl
Datum:23.07.02 13:26 Antwortenals Email verschicken (martin_pohl@msn.com) 


Häh? Wo soll ich die Zeilen einfügen? Hier ist ein Teil meines Codes:

proc main
windowstyle 112
windowtitle "VoiceBox 2.0xp alpha"
window @mul(%maxx,3),@mul(%maxy,3)-0,0
usefont "Terminal",14,6,1,0,0
setdialogfont 1
declare status%,status$
let _dlg%=@createdialog(%Hwnd,"VoiceBox v2.0xp alpha",@sub(@div(%maxx,2),123),0,246,70)
let hide%=@createbutton(_dlg%,"-",0,0,24,24)
let record_wave%=@createbutton(_dlg%,"R",48,0,24,24)
let pause_wave%=@createbutton(_dlg%,"II",72,0,24,24)
let stop_wave%=@createbutton(_dlg%,"#",96,0,24,24)
let options%=@createbutton(_dlg%,"::",144,0,24,24)
let quality%=@createdefbutton(_dlg%,"Q",168,0,24,24)
let info%=@createbutton(_dlg%,"i",216,0,24,24)
let status%=@createedit(_dlg%,"VoiceBox v2.0xp alpha gestartet",-1,24,247,15)
@sendmessage(status%,$00CF,1,0)

let _ende% = 0
whilenot _ende%
waitinput
if @equ(%key,2)
let _ende% = 1
elseif @getfocus(hide%) 'DIESER BUTTON SOLL DAS PROGRAMM VERSTECKEN
declare hidden_end%
showwindow(%HWnd,0) 'FENSTER VO DER TASKLEISTE VERSTECKEN
setwindowpos _dlg%=@mul(%maxx,3),@mul(%maxy,3)-246,70;-1
'FENSTER AUS DEM SICHTBEREICH BRINGEN
MessageBox "VoiceBox ist nun versteckt. Mit F11 kommt VoiceBox wieder zum Vorschein","Verstecken",64
let hidden_end%=0
whilenot hidden_end%
waitscan
if @equ(%scankey,122)
showwindow(%HWnd,1) 'FENSTER IN DER TASKLEISTE SICHTBAR MACHEN
main 'DIE GANZE PROZEDUR NOCH MAL VON VORNE
endif
wend
elseif @getfocus(record_wave%)
' Aktion wird nicht verraten
elseif @getfocus(pause_wave%)
' Aktion wird nicht verraten
elseif @getfocus(stop_wave%)
' Aktion wird nicht verraten
elseif @getfocus(options%)
' Aktion wird nicht verraten
elseif @getfocus(quality%)
' Aktion wird nicht verraten
elseif @getfocus(info%)
' Aktion wird nicht verraten
endif
wend
@destroywindow(_dlg%)
endproc main

Bitte sag mir, wo die Zeilen hin sollen. Und gibt es irgendwo eine Referenz zu API?


Jörg Sellmeyer
Datum:23.07.02 14:10 Antwortenals Email verschicken (joerse@gmx.de) 


Hallo Martin,
Die Definition einer neuen Funktion kommt ganz an den Anfang Deines Programms.
Und statt showwindow oder setwindowpos benutzt Du die neue Funktion.
DEF NewWindowPos(7) !"USER32","SetWindowPos"
Window 10,10-100,100
NewWindowPos(%hwnd,-1,0,0,0,0,$13)
waitinput


Frank Abbing
Datum: 23.07.02 15:11 Antwortenals Email verschicken  


Hi,

danke, Jörg.

Hier nochmal die Funktion, etwas variabler:

NewWindowPos(%hwnd,HWND_TOPMOST,0,0,0,0,SWP_NOACTIVATE or SWP_NOMOVE or SWP_NOSIZE)

Gruß, Frank


 Zurück zur Übersicht