RSS registrovat login
Navigace: předchozí stranaúvodní strana
Umístění okna do popředí

Na builderu kdosi sháněl informaci, jak okno dostat do popředí před všechny ostatní okna a aby tam zůstalo.

První možnost je nastavit formuláři volbu formStyle na fsStayOnTop. Je to velmi jednoduché, bohužel se ukázalo, že tato volba je spíš jenom takové demo, alespoň na všech windows s kterými jsem pracoval to po chvíli přestane fungovat - stačí se párkrát přepnout mezi různými okny a okno se chová normálně, místo aby zůstávalo na popředí. Chyba nebude jenom v Delphi, protože stejně blbě se chová třeba i winamp a další aplikace.

Další možností je použít nějakou windows funkci. Z jednoho starého projektu jsem vyhrabal následující kód, ten funguje spolehlivě, akorát je potřeba danou funkci volat opakovaně (třeba v timeru), v době kdy jsem to psal jsem nezjistil, jak zjistit, jestli je okno už v popředí nebo je před ním něco jiného. Nicméně volat to třeba jednou za půl vteřiny by mělo stačit.

procedure
PutWindowToTop(windowHandle: integer);
var
fg:HWND; foreignWindow:boolean; i:integer; buf:pchar; s:
string
;
begin
// zajisti aby bylo okno stale na vrchu - fsStayOnTop funguje jenom
// pokud je pouze jedno okno, jinak to blbne
foreignWindow:=true; fg:=GetForegroundWindow; getMem(buf,
200
); GetWindowText(fg,buf,
200
); s:=buf; freeMem(buf,
200
);
for
i:=
0
to
screen.FormCount-
1
do
begin
if
screen.Forms[i].Handle = fg
then
foreignWindow:=false;
end
;
if
foreignWindow
then
begin
SetWindowPos(windowHandle,HWND_TOPMOST,
0
,
0
,
0
,
0
,SWP_SHOWWINDOW
or
SWP_NOSIZE
or
SWP_NOMOVE
or
SWP_NOACTIVATE);
end
;
end
;
procedure
PutWindowToBottom(windowHandle: integer);
begin
SetWindowPos(windowHandle,HWND_BOTTOM,
0
,
0
,
0
,
0
,SWP_SHOWWINDOW
or
SWP_NOSIZE
or
SWP_NOMOVE
or
SWP_NOACTIVATE);
end
;

Syntax higlighted by Syntax highlighter, available at www.4ITDevelopers.net and www.JakNaWin.com

K čemu je ten test na cizí okno (foreignWindow) ? Ta aplikace používala více oken, tak nejspíše aby se to okno necpalo do popředí v případě, že se používá jiné okno naší aplikace - čili pro ostatní aplikace se to chovalo jako kdyby mělo nastaveno stayOnTop, pro naší jako kdyby to nastaveno nemělo. Podle potřeby je možno tento test pochopitelně vyhodit.

Informace ke stavu builder.cz zde


vytvořil Mi.Chal. 18.3. 2007 10:43, naposledy změněnil Mi.Chal. 18.3. 2007 10:43
přečteno: 3157x

Komentáře:
Žádné komentáře dosud nebyly vloženy.

Přidat komentář:
Jméno
E-mail
Web
Titulek
Obsah
thomas sabo rea mbt outlet thomas sabo charms sale louis vuitton taschen kaufen thomas sabo boutique mbt kaufen