|
| App. frem i front Fra : Harald |
Dato : 21-04-06 16:49 |
|
Ganske enkelt, hvis programmet er skjult bag andre programmer så skal det
komme frem i front og være aktiv. Jeg har prøvet alverdens kombinationer af
Application.BringToFront, BringWindowToTop(), SetForegroundWindow() og
ShowWindow() men alle resultere bare i at mit program står og blinker i
proceslinien.
/HK
| |
Flozzy (21-04-2006)
| Kommentar Fra : Flozzy |
Dato : 21-04-06 17:49 |
|
"Harald" <nomail@noname.dk> skrev i en meddelelse
news:4448fef5$0$84038$edfadb0f@dtext01.news.tele.dk...
> Ganske enkelt, hvis programmet er skjult bag andre programmer så skal det
> komme frem i front og være aktiv. Jeg har prøvet alverdens kombinationer
> af Application.BringToFront, BringWindowToTop(), SetForegroundWindow() og
> ShowWindow() men alle resultere bare i at mit program står og blinker i
> proceslinien.
>
> /HK
>
Skal programmet være i front permanent, sættes Formens FormStyle til
fsStayOnTop, ellers
if IsIconic(h) then
ShowWindow(h, SW_RESTORE);
SetForegroundWindow(h);
hvor h er handle til dit program.
Mvh. Flozzy
| |
Harald (21-04-2006)
| Kommentar Fra : Harald |
Dato : 21-04-06 18:00 |
|
"Flozzy" <jje@venlig.dk> skrev i en meddelelse
news:44490cfa$0$38637$edfadb0f@dread12.news.tele.dk...
>
> "Harald" <nomail@noname.dk> skrev i en meddelelse
> news:4448fef5$0$84038$edfadb0f@dtext01.news.tele.dk...
>> Ganske enkelt, hvis programmet er skjult bag andre programmer så skal det
>> komme frem i front og være aktiv. Jeg har prøvet alverdens kombinationer
>> af Application.BringToFront, BringWindowToTop(), SetForegroundWindow() og
>> ShowWindow() men alle resultere bare i at mit program står og blinker i
>> proceslinien.
>>
>> /HK
>>
>
> Skal programmet være i front permanent, sættes Formens FormStyle til
> fsStayOnTop, ellers
>
> if IsIconic(h) then
> ShowWindow(h, SW_RESTORE);
> SetForegroundWindow(h);
>
> hvor h er handle til dit program.
Ja det giver samme resultat dvs. programmet bliver hvor det er men blinker i
proceslinien.
/HK
| |
Flozzy (21-04-2006)
| Kommentar Fra : Flozzy |
Dato : 21-04-06 18:52 |
|
Hej igen
> Ja det giver samme resultat dvs. programmet bliver hvor det er men blinker
> i proceslinien.
>
> /HK
Lyder virkelig mærkeligt. Det er jo til at blive vanvittig over. Der er vel
ikke andet for end tjekke Formens Properties og Events (evt. .dpr filen), om
ikke andet så for at se, om det skulle give et clue. Eftersom det blinker
skulle man næsten tro, at der er en Timer med i spillet, eller at der sker
noget "recursivt" et eller andet sted. Nu er jeg da for alvor blevet
nysgerrig.
Mvh. Flozzy
| |
Harald (21-04-2006)
| Kommentar Fra : Harald |
Dato : 21-04-06 19:17 |
|
"Flozzy" <jje@venlig.dk> skrev i en meddelelse
news:44491be3$0$38721$edfadb0f@dread12.news.tele.dk...
> Hej igen
>
>> Ja det giver samme resultat dvs. programmet bliver hvor det er men
>> blinker i proceslinien.
>>
>> /HK
>
> Lyder virkelig mærkeligt. Det er jo til at blive vanvittig over. Der er
> vel ikke andet for end tjekke Formens Properties og Events (evt. .dpr
> filen), om ikke andet så for at se, om det skulle give et clue. Eftersom
> det blinker skulle man næsten tro, at der er en Timer med i spillet, eller
> at der sker noget "recursivt" et eller andet sted. Nu er jeg da for alvor
> blevet nysgerrig.
Jeg tog din kode og smed det ind i en helt ny application, en timer kører
koden efter 5 sek. hvorefter programmet blinker på proceslinien i stedet for
at komme frem i front. Er det et problem at gøre det i en timer?
/HK
| |
Harald (21-04-2006)
| Kommentar Fra : Harald |
Dato : 21-04-06 19:23 |
|
"Flozzy" <jje@venlig.dk> skrev i en meddelelse
news:44491be3$0$38721$edfadb0f@dread12.news.tele.dk...
> Hej igen
>
>> Ja det giver samme resultat dvs. programmet bliver hvor det er men
>> blinker i proceslinien.
>>
>> /HK
>
> Lyder virkelig mærkeligt. Det er jo til at blive vanvittig over. Der er
> vel ikke andet for end tjekke Formens Properties og Events (evt. .dpr
> filen), om ikke andet så for at se, om det skulle give et clue. Eftersom
> det blinker skulle man næsten tro, at der er en Timer med i spillet, eller
> at der sker noget "recursivt" et eller andet sted. Nu er jeg da for alvor
> blevet nysgerrig.
Nå nu fattede jeg hvad du mener med blinker og timer, det at den blinker i
processlinien er noget windows gør, den blinker 4 gange hvorefter den får en
fast farve som ikke er magen til de andre:
Se her: www.kroning.dk/Image.jpg
/HK
| |
Flozzy (22-04-2006)
| Kommentar Fra : Flozzy |
Dato : 22-04-06 02:28 |
|
Hej Harald
> Nå nu fattede jeg hvad du mener med blinker og timer, det at den blinker i
> processlinien er noget windows gør, den blinker 4 gange hvorefter den får
> en fast farve som ikke er magen til de andre:
> Se her: www.kroning.dk/Image.jpg
>
> /HK
OK - tilbage til problemet med at bringe i front. Er det lige specielt
denne App, der har det problem, eller også andre?
Hvad med f.eks. Notepad - kan den tvinges i front med denne kode:
procedure TForm1.Button1Click(Sender: TObject);
begin
WinExec('c:\windows\notepad.exe', SW_SHOWMINIMIZED);
end;
procedure TForm1.Button2Click(Sender: TObject);
var h: THandle;
begin
h := FindWindow('Notepad',nil);
if h <> 0 then
begin
if IsIconic(h) then
ShowWindow(h, SW_RESTORE);
SetForegroundWindow(h);
end;
end;
Mvh. Flozzy
| |
Harald (22-04-2006)
| Kommentar Fra : Harald |
Dato : 22-04-06 19:21 |
|
"Flozzy" <jje@venlig.dk> skrev i en meddelelse
news:444986bf$0$38686$edfadb0f@dread12.news.tele.dk...
> Hej Harald
>
>> Nå nu fattede jeg hvad du mener med blinker og timer, det at den blinker
>> i processlinien er noget windows gør, den blinker 4 gange hvorefter den
>> får en fast farve som ikke er magen til de andre:
>> Se her: www.kroning.dk/Image.jpg
>>
>> /HK
>
> OK - tilbage til problemet med at bringe i front. Er det lige specielt
> denne App, der har det problem, eller også andre?
> Hvad med f.eks. Notepad - kan den tvinges i front med denne kode:
>
> procedure TForm1.Button1Click(Sender: TObject);
> begin
> WinExec('c:\windows\notepad.exe', SW_SHOWMINIMIZED);
> end;
>
> procedure TForm1.Button2Click(Sender: TObject);
> var h: THandle;
> begin
> h := FindWindow('Notepad',nil);
> if h <> 0 then
> begin
> if IsIconic(h) then
> ShowWindow(h, SW_RESTORE);
> SetForegroundWindow(h);
> end;
> end;
Ja det virker fint med notepad.
Det er når jeg går ind i Delphi og kører koden i en helt ny og frisk
application at den bliker hvis jeg hvis have applicationen frem i front,
f.eks. hvis jeg sætter koden ind i en TTimer som aktivere koden efter 10
sekunder.
/HK
| |
Flozzy (23-04-2006)
| Kommentar Fra : Flozzy |
Dato : 23-04-06 03:58 |
|
>> OK - tilbage til problemet med at bringe i front. Er det lige
>> specielt denne App, der har det problem, eller også andre?
>> Hvad med f.eks. Notepad - kan den tvinges i front med denne kode:
>>
>> procedure TForm1.Button1Click(Sender: TObject);
>> begin
>> WinExec('c:\windows\notepad.exe', SW_SHOWMINIMIZED);
>> end;
>>
>> procedure TForm1.Button2Click(Sender: TObject);
>> var h: THandle;
>> begin
>> h := FindWindow('Notepad',nil);
>> if h <> 0 then
>> begin
>> if IsIconic(h) then
>> ShowWindow(h, SW_RESTORE);
>> SetForegroundWindow(h);
>> end;
>> end;
>
> Ja det virker fint med notepad.
> Det er når jeg går ind i Delphi og kører koden i en helt ny og frisk
> application at den bliker hvis jeg hvis have applicationen frem i front,
> f.eks. hvis jeg sætter koden ind i en TTimer som aktivere koden efter 10
> sekunder.
>
> /HK
Hmm - det bliver det ikke mindre mærkeligt af. Jeg har testet flere
muligheder på D4-5-6 på WinXP uden problemer. Jeg går ud fra via din
hjemmeside, at du bruger D7. Den kender jeg ikke, men kunne det tænkes, at
der er specielle opsætninger i Invironment Options? Sker det samme hvis du
kører en Build på programmet, lukker Delphi, og starter exe-filen direkte?
Brians svar fik mig til at tænke på, om der andet "aktivt" i baggrunden, som
kan hindre din App i at stige frem til overfladen.
Mvh. Flozzy
| |
Harald (23-04-2006)
| Kommentar Fra : Harald |
Dato : 23-04-06 07:32 |
|
"Flozzy" <jje@venlig.dk> skrev i en meddelelse
news:444aed6d$0$149$edfadb0f@dread16.news.tele.dk...
>>> OK - tilbage til problemet med at bringe i front. Er det lige
>>> specielt denne App, der har det problem, eller også andre?
>>> Hvad med f.eks. Notepad - kan den tvinges i front med denne kode:
>>>
>>> procedure TForm1.Button1Click(Sender: TObject);
>>> begin
>>> WinExec('c:\windows\notepad.exe', SW_SHOWMINIMIZED);
>>> end;
>>>
>>> procedure TForm1.Button2Click(Sender: TObject);
>>> var h: THandle;
>>> begin
>>> h := FindWindow('Notepad',nil);
>>> if h <> 0 then
>>> begin
>>> if IsIconic(h) then
>>> ShowWindow(h, SW_RESTORE);
>>> SetForegroundWindow(h);
>>> end;
>>> end;
>>
>> Ja det virker fint med notepad.
>> Det er når jeg går ind i Delphi og kører koden i en helt ny og frisk
>> application at den bliker hvis jeg hvis have applicationen frem i front,
>> f.eks. hvis jeg sætter koden ind i en TTimer som aktivere koden efter 10
>> sekunder.
>>
>> /HK
>
> Hmm - det bliver det ikke mindre mærkeligt af. Jeg har testet flere
> muligheder på D4-5-6 på WinXP uden problemer. Jeg går ud fra via din
> hjemmeside, at du bruger D7. Den kender jeg ikke, men kunne det tænkes, at
> der er specielle opsætninger i Invironment Options? Sker det samme hvis du
> kører en Build på programmet, lukker Delphi, og starter exe-filen direkte?
> Brians svar fik mig til at tænke på, om der andet "aktivt" i baggrunden,
> som kan hindre din App i at stige frem til overfladen.
Jeg har prøvet at starte exe filen uden at Delphi kører, jeg har prøvet exe
filen på en anden computer og jeg har nu prøvet at lave det samme på en
Delphi 4 og kørt exe filen på 2 maskiner og det giver samme resultat. Så det
er egentlig lidt mystisk.
/HK
| |
Harald (23-04-2006)
| Kommentar Fra : Harald |
Dato : 23-04-06 07:48 |
|
"Flozzy" <jje@venlig.dk> skrev i en meddelelse
news:444aed6d$0$149$edfadb0f@dread16.news.tele.dk...
>>> OK - tilbage til problemet med at bringe i front. Er det lige
>>> specielt denne App, der har det problem, eller også andre?
>>> Hvad med f.eks. Notepad - kan den tvinges i front med denne kode:
>>>
>>> procedure TForm1.Button1Click(Sender: TObject);
>>> begin
>>> WinExec('c:\windows\notepad.exe', SW_SHOWMINIMIZED);
>>> end;
>>>
>>> procedure TForm1.Button2Click(Sender: TObject);
>>> var h: THandle;
>>> begin
>>> h := FindWindow('Notepad',nil);
>>> if h <> 0 then
>>> begin
>>> if IsIconic(h) then
>>> ShowWindow(h, SW_RESTORE);
>>> SetForegroundWindow(h);
>>> end;
>>> end;
>>
>> Ja det virker fint med notepad.
>> Det er når jeg går ind i Delphi og kører koden i en helt ny og frisk
>> application at den bliker hvis jeg hvis have applicationen frem i front,
>> f.eks. hvis jeg sætter koden ind i en TTimer som aktivere koden efter 10
>> sekunder.
>>
>> /HK
>
> Hmm - det bliver det ikke mindre mærkeligt af. Jeg har testet flere
> muligheder på D4-5-6 på WinXP uden problemer. Jeg går ud fra via din
> hjemmeside, at du bruger D7. Den kender jeg ikke, men kunne det tænkes, at
> der er specielle opsætninger i Invironment Options? Sker det samme hvis du
> kører en Build på programmet, lukker Delphi, og starter exe-filen direkte?
> Brians svar fik mig til at tænke på, om der andet "aktivt" i baggrunden,
> som kan hindre din App i at stige frem til overfladen.
Her er lidt mere mystisk, jeg bruger en justone komponent, en der sikre at
kun et program startes op, og det virker fint så kommer programmet frem i
front. Men hvis jeg tager koden som den er fra komponenten:
PrevInstHandle := FindWindow(nil, AppTitle);
if PrevInstHandle <> 0 then
if IsIconic(PrevInstHandle) then
ShowWindow(PrevInstHandle, SW_RESTORE)
else
BringWindowToTop(PrevInstHandle);
SetForegroundWindow(PrevInstHandle);
og smider ind i et helt nyt program og aktivere koden med en timer efter
f.eks. 5 sek., ja så vil den bare blinke 4 gange på process linien og kommer
ikke i front.
/HK
| |
Harald (23-04-2006)
| Kommentar Fra : Harald |
Dato : 23-04-06 08:30 |
|
"Flozzy" <jje@venlig.dk> skrev i en meddelelse
news:444aed6d$0$149$edfadb0f@dread16.news.tele.dk...
>>> OK - tilbage til problemet med at bringe i front. Er det lige
>>> specielt denne App, der har det problem, eller også andre?
>>> Hvad med f.eks. Notepad - kan den tvinges i front med denne kode:
>>>
>>> procedure TForm1.Button1Click(Sender: TObject);
>>> begin
>>> WinExec('c:\windows\notepad.exe', SW_SHOWMINIMIZED);
>>> end;
>>>
>>> procedure TForm1.Button2Click(Sender: TObject);
>>> var h: THandle;
>>> begin
>>> h := FindWindow('Notepad',nil);
>>> if h <> 0 then
>>> begin
>>> if IsIconic(h) then
>>> ShowWindow(h, SW_RESTORE);
>>> SetForegroundWindow(h);
>>> end;
>>> end;
>>
>> Ja det virker fint med notepad.
>> Det er når jeg går ind i Delphi og kører koden i en helt ny og frisk
>> application at den bliker hvis jeg hvis have applicationen frem i front,
>> f.eks. hvis jeg sætter koden ind i en TTimer som aktivere koden efter 10
>> sekunder.
>>
>> /HK
>
> Hmm - det bliver det ikke mindre mærkeligt af. Jeg har testet flere
> muligheder på D4-5-6 på WinXP uden problemer. Jeg går ud fra via din
> hjemmeside, at du bruger D7. Den kender jeg ikke, men kunne det tænkes, at
> der er specielle opsætninger i Invironment Options? Sker det samme hvis du
> kører en Build på programmet, lukker Delphi, og starter exe-filen direkte?
> Brians svar fik mig til at tænke på, om der andet "aktivt" i baggrunden,
> som kan hindre din App i at stige frem til overfladen.
Problem løst. Med programmet Tweak UI fra MS kan man slå et punkt fra der
hedder "Prevent applications from stealing focus", dette punkt var åbenbart
blevet slået til på alle de 5 computere jeg havde testet på da det tidligere
havde virket på dem alle.
Tak for hjælpen.
/HK
| |
Flozzy (23-04-2006)
| Kommentar Fra : Flozzy |
Dato : 23-04-06 10:12 |
|
Godt det blev løst! Ikke noget at takke for - du løste selv problemet - og
jeg fik lært det også ;0)
Mvh. Flozzy
> Problem løst. Med programmet Tweak UI fra MS kan man slå et punkt fra der
> hedder "Prevent applications from stealing focus", dette punkt var
> åbenbart blevet slået til på alle de 5 computere jeg havde testet på da
> det tidligere havde virket på dem alle.
> Tak for hjælpen.
>
> /HK
>
>
| |
Brian Andersen \(www~ (22-04-2006)
| Kommentar Fra : Brian Andersen \(www~ |
Dato : 22-04-06 08:09 |
|
Blinkeriet skyldes Windows. Jeg tror det er fra Windows 98, at Windows er
begyndt at signalere til brugeren, at en applikation gerne i front ved at
blinke i Tastbar'en. Dette skyldes, at brugeren jo kunne være i gang med at
indtaste i en anden applikation og så er det jo ikke så heldigt, at en anden
applikation pludselig bliver aktiv.
Min computer er reinstalleret og min Delphi CD virker ikke )o:, så jeg kan
desværre ikke prøve og se om jeg kan løse problemet.
/Brian
| |
|
|