AGB  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein GUI-Design mit VCL / FireMonkey / Common Controls Form wirklich oben halten, Alternative zu FormStyle fsStayOnTop

Form wirklich oben halten, Alternative zu FormStyle fsStayOnTop

Ein Thema von LTE5 · begonnen am 13. Nov 2017 · letzter Beitrag vom 16. Nov 2017
Antwort Antwort
Seite 2 von 3     12 3   
LTE5

Registriert seit: 13. Nov 2017
51 Beiträge
 
Delphi 10.2 Tokyo Starter
 
#11

AW: Form wirklich oben halten, Alternative zu FormStyle fsStayOnTop

  Alt 14. Nov 2017, 00:18
Vielleicht liegt mein Problem woanders. Aber wenn mein Systembereichfenster den Fokus hat, dein Code ausgeführt wurde, es also oben bleiben sollte, und ich mit ALT-TAB raustabbe und wieder rein, ist der Effekt oben zu bleiben weg.
  Mit Zitat antworten Zitat
Benutzerbild von Dalai
Dalai

Registriert seit: 9. Apr 2006
1.127 Beiträge
 
Delphi 5 Professional
 
#12

AW: Form wirklich oben halten, Alternative zu FormStyle fsStayOnTop

  Alt 14. Nov 2017, 00:35
Spielt es eine Rolle, zu welcher anderen Anwendung du mit Alt+Tab wechselst? Ist diese Anwendung ebenfalls TOPMOST? Wie sieht's in einer Testanwendung aus?

Grüße
Dalai
  Mit Zitat antworten Zitat
LTE5

Registriert seit: 13. Nov 2017
51 Beiträge
 
Delphi 10.2 Tokyo Starter
 
#13

AW: Form wirklich oben halten, Alternative zu FormStyle fsStayOnTop

  Alt 14. Nov 2017, 00:37
Meine Testanwendung hat nur einen Button, der eine bool'sche Variable umsetzt (bIsTop := not bIsTop) die im FormCreate False ist und anschließend SetWindowAlwaysOnTop(Form1, bIsTop);.
Zum testen tabbe ich rüber zu Chrome.
  Mit Zitat antworten Zitat
Benutzerbild von Dalai
Dalai

Registriert seit: 9. Apr 2006
1.127 Beiträge
 
Delphi 5 Professional
 
#14

AW: Form wirklich oben halten, Alternative zu FormStyle fsStayOnTop

  Alt 14. Nov 2017, 01:00
Wann setzt du das TOPMOST genau?

Grüße
Dalai
  Mit Zitat antworten Zitat
LTE5

Registriert seit: 13. Nov 2017
51 Beiträge
 
Delphi 10.2 Tokyo Starter
 
#15

AW: Form wirklich oben halten, Alternative zu FormStyle fsStayOnTop

  Alt 14. Nov 2017, 01:09
Im ButtonClick rufe ich deine Prozedur auf.
  Mit Zitat antworten Zitat
Benutzerbild von Dalai
Dalai

Registriert seit: 9. Apr 2006
1.127 Beiträge
 
Delphi 5 Professional
 
#16

AW: Form wirklich oben halten, Alternative zu FormStyle fsStayOnTop

  Alt 14. Nov 2017, 01:20
Mmh, ich sehe nicht, warum das nicht gehen sollte. Wird die Prozedur denn auch aufgerufen, hält der Debugger also an einem in dieser Prozedur gesetzten Breakpoint?

Grüße
Dalai
  Mit Zitat antworten Zitat
Benutzerbild von EWeiss
EWeiss

Registriert seit: 16. Okt 2010
4.292 Beiträge
 
Delphi 2010 Architect
 
#17

AW: Form wirklich oben halten, Alternative zu FormStyle fsStayOnTop

  Alt 14. Nov 2017, 09:21
Dein Problem ist einfach erklärt.
Du versuchst dein Window immer ganz oben zu halten und erwartest das alle Programme sich an deine Vorgaben halten.

Nun das geht nun mal nicht denn die versuchen ebenfalls ihr Fenster oben zu halten.
Fakt ist nun mal das so wie ich schon schrieb HWND_TOPMOST die höchste ZOrder unter Windows ist höher geht nun mal nicht.
Und da andere Anwendungen diese ebenfalls für sich in Anspruch nehmen wird deine Anwendung nach hinten geschoben sobald die zuletzt gestartete Anwendung ebenfalls TOPMOST verwendet und da kannst du nix machen..
In dem fall zählt die Reihenfolge der zuletzt aktivierten Anwendung.

Ohne Hack oder ständiger Überprüfung über Timer oder der gleichen wird das nicht gehen.

Wenn ich mein Video starte mit
Delphi-Quellcode:
    SetWindowPos(gP.MainHandle, HWND_TOPMOST, 0, 0, 0, 0,
      SWP_NOMOVE or SWP_NOSIZE or SWP_FRAMECHANGED or SWP_SHOWWINDOW);
Dann wirst du es schwer haben anderer Windows drüber zu setzen.
Nun das hat aber damit zu tun weil es im Vollbild läuft und du an kein anderes Programm herankommst ohne Aufwand
So das du dieses drüber setzen könntest.


gruss

Geändert von EWeiss (14. Nov 2017 um 09:29 Uhr)
  Mit Zitat antworten Zitat
LTE5

Registriert seit: 13. Nov 2017
51 Beiträge
 
Delphi 10.2 Tokyo Starter
 
#18

AW: Form wirklich oben halten, Alternative zu FormStyle fsStayOnTop

  Alt 14. Nov 2017, 09:47
Danke für die Erklärung. Das mit der Z-Order hat mich schlauer gemacht.
Ich werde später am Tag mal mit SetWindowPos SWP_NOACTIVATE or SWP_NOMOVE or SWP_NOSIZE und zusätzlich SWP_FRAMECHANGED or SWP_SHOWWINDOW austesten.
Einen Timer möchte ich eigentlich nicht verwenden. Aber vielleicht ist das ja sogar des Problems lösung. SetWindowPos in einem SetWindowPos. Da wird wenigstens kein Fokus gesetzt.
Ich habe gestern schon TabStop von einer Hand voll Komponenten auf False gesetzt. Das hat schon einmal ein wenig geholfen. Nur leidet darunter leider die Nutzerfreundlichkeit und Barrierefreiheit.
  Mit Zitat antworten Zitat
Benutzerbild von Dalai
Dalai

Registriert seit: 9. Apr 2006
1.127 Beiträge
 
Delphi 5 Professional
 
#19

AW: Form wirklich oben halten, Alternative zu FormStyle fsStayOnTop

  Alt 14. Nov 2017, 15:54
Nun das geht nun mal nicht denn die versuchen ebenfalls ihr Fenster oben zu halten.
Das ist zwar richtig. Allerdings habe ich meine Zweifel daran, dass das Fenster von Chrome dieses Attribut gesetzt hat. Zwar kenne ich Chrome nicht, aber es würde mich sehr wundern, wenn der das standardmäßig tut.

Daher meine Frage, ob denn die Prozedur überhaupt gerufen wird. Wäre nicht das erste Mal, dass die Verknüpfung des Events zur Prozedur fehlt (ist mir auch schon mehrfach passiert).

Grüße
Dalai
  Mit Zitat antworten Zitat
TigerLilly

Registriert seit: 24. Mai 2017
Ort: Wien, Österreich
177 Beiträge
 
Delphi 10.2 Tokyo Enterprise
 
#20

AW: Form wirklich oben halten, Alternative zu FormStyle fsStayOnTop

  Alt 15. Nov 2017, 09:21
Wenn es dich interessiert: Die GExperts haben ein DebugView, das genau das macht, was du möchtest.

Den Quellcode dazu findest du hier:
https://sourceforge.net/p/gexperts/c...ebugWindow.pas

Diese Zeilen sind, was du suchst:

Code:
procedure TfmDebug.SetStayOnTop(OnTop: Boolean);
begin
  FStayOnTop := OnTop;
  if OnTop then
    SetWindowPos(Self.Handle, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOMOVE + SWP_NOSIZE)
  else
    SetWindowPos(Self.Handle, HWND_NOTOPMOST, 0, 0, 0, 0, SWP_NOMOVE + SWP_NOSIZE);
end;
Siehe auch hier:
https://blogs.msdn.microsoft.com/old...21-10/?p=33263
https://msdn.microsoft.com/en-us/lib...(v=vs.85).aspx
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:22 Uhr.
Powered by vBulletin® Copyright ©2000 - 2017, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2017 by Daniel R. Wolf