Autor Beitrag
floppy_
Hält's aus hier
Beiträge: 3

WinXP Pro SP2
Delphi 7 Enterprise
BeitragVerfasst: Di 24.10.06 13:21 
Moinsen :)
Ist mein erster Post, hoffe das ist der richtige Bereich hier, aber ich denke schon, passte sonst nirgends...

Also ich möchte, dass eine Form immer OnTop ist. Nach ein wenig suchen im Forum hab ich das auch erfolgreich gelöst, indem ich FormStyle := fsStayOnTop gemacht habe und einen Timer erstellt hab, der mit 1ms Interval Form3.BringToFront macht.
Funktioniert wie gesagt auch, das Problem ist aber, dass die Form immer die "Aufmerksamkeit" hat. Wenn ich also z.B. ein anderes Programm starte und da klicken möchte geht die Maus immer zur Form (die ja ontop ist) und minimiert das neue Programm.

Konkret, wie im Topic: Es soll zwar OnTop sein, aber nicht die Aufmerksamkeit (kA, hat das was mit dem Fokus zu tun?) bekommen. Geht das überhaupt? Wenn ja: wie? ;)
Danny87
ontopic starontopic starontopic starontopic starontopic starofftopic starofftopic starofftopic star
Beiträge: 688

Windows 10 Pro 64bit
Sprachen: HTML, PHP, JavaScript, Delphi || IDE: RAD Studio 10.1 Berlin Starter, WeBuilder
BeitragVerfasst: Di 24.10.06 13:54 
Hi und :welcome: in der EE,

probier mal den Timer auszulassen.
Normalerweise braucht man, wenn das Formular auf fsStayOnTop steht, keinen Timer, der es immer wieder nach vorne bringt.
Das ist meiner Meinung nach auch der Grund, warum das Formular ständig den Fokus hat.
Also: testweise den Timer auslassen/wegmachen und gucken obs geht ;)

Gruss
Daniel
_frank_
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 343
Erhaltene Danke: 1

Win XP
Delphi 3 Prof / Turbo Delphi Explorer
BeitragVerfasst: Di 24.10.06 14:05 
wenn du es immer *ganz* oben willst (bis das nächste andere Programm TopMost verwendet):

ausblenden Delphi-Quelltext
1:
2:
3:
SetWindowPos(Form.Handle, HWND_TOPMOST, 0 , 0, 0, 0, SWP_NOACTIVATE or SWP_NOMOVE or SWP_NOSIZE);
//zum "normalisieren"
SetWindowPos(Form.Handle, HWND_NOTOPMOST, 0, 0, 0, 0, SWP_NOACTIVATE or SWP_NOMOVE or SWP_NOSIZE);


das SWP_NOACTIVATE bewirkt, dass das form nicht aktiviert wird. SWP_NoSize und SWP_NoMove dafür (wie der Name schon sagt, damit die Größe/Position nicht geändert wird und man bei diesen Werten 0 benutzen kann)

aber das mit dem timer halte ich auch nicht für ne gute Idee...wirde das z.B. ins onShow packen...

HTH Frank
Jakob Schöttl
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 929
Erhaltene Danke: 1


Delphi 7 Professional
BeitragVerfasst: Di 24.10.06 14:13 
user profile icon_frank_ hat folgendes geschrieben:
wenn du es immer *ganz* oben willst (bis das nächste andere Programm TopMost verwendet):

ausblenden Delphi-Quelltext
1:
SetWindowPos(Form.Handle, HWND_TOPMOST, 0 , 0, 0, 0, SWP_NOACTIVATE or SWP_NOMOVE or SWP_NOSIZE);					


das SWP_NOACTIVATE bewirkt, dass das form nicht aktiviert wird. SWP_NoSize und SWP_NoMove dafür (wie der Name schon sagt, damit die Größe/Position nicht geändert wird und man bei diesen Werten 0 benutzen kann)

aber das mit dem timer halte ich auch nicht für ne gute Idee...wirde das z.B. ins onShow packen...

HTH Frank


bei mir funktioniert das leider nicht: das form ist zwar immer im vordergrund, aber man kann es aktivieren, die größe verändern und verschieben ?!
_frank_
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 343
Erhaltene Danke: 1

Win XP
Delphi 3 Prof / Turbo Delphi Explorer
BeitragVerfasst: Di 24.10.06 14:46 
sicherlich kannst *DU* es aktivieren, aber der setwindowpos-Befehl tut das nicht (die 4 0en sind große und position).

du willst komplett verhindern, dass man das Form aktivieren, verschieben und Größe ändern kann?
einfachste Möglichkeit wäre
ausblenden Delphi-Quelltext
1:
2:
3:
form.borderstyle:=bsNone; //verschieben und größe ändern verhindern
//und im form.OnActivate sowas wie
form2.setfocus;


HTH Frank
floppy_ Threadstarter
Hält's aus hier
Beiträge: 3

WinXP Pro SP2
Delphi 7 Enterprise
BeitragVerfasst: Di 24.10.06 16:24 
Hab alle Antworten in allen Möglichkeiten ausprobiert, hilft leider nichts.

Und zwar war das ganze dafür gedacht, dass eine Anzeige (z.B. von dem Lied was grad läuft) bei Counter-Strike (das genannte neue Programm was ich öffne ^^) angezeigt wird.
Aber spätestens wenn man schießt geht der Fokus wieder auf die Form und wenn man dann nochmal schießt, wird das Spiel minimiert...

Wahrscheinlich liegt das am Spiel und ist deshalb nicht realisierbar... trotzdem danke für die Hilfe =)
Lurnon
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 33



BeitragVerfasst: Fr 27.10.06 19:50 
Das ist der Cheat-Schutz von Counterstrike. Du hast dein Form wohl im Zentrum des Bildschirms, oder?
Da ich so was "ähnliches", auch mal mit Counterstrike ausprobiert habe, konnte ich feststellen, dass die Maus nicht hinspringt, wenn sich das Fenster nicht zentral sondern in einer Ecke befindet (bei mir unten rechts).
floppy_ Threadstarter
Hält's aus hier
Beiträge: 3

WinXP Pro SP2
Delphi 7 Enterprise
BeitragVerfasst: Sa 28.10.06 02:12 
Erwischt =)