Formstyle fsSystemStayOnTop funktioniert nicht immer.
- fliegermichl
- Lazarusforum e. V.
- Beiträge: 1647
- Registriert: Do 9. Jun 2011, 09:42
- OS, Lazarus, FPC: Lazarus Fixes FPC Stable
- CPU-Target: 32/64Bit
- Wohnort: Echzell
Formstyle fsSystemStayOnTop funktioniert nicht immer.
Hallo,
Meine Anwendung soll ein kleines Fensterchen in der Bildschirmecke darstellen, daß unter allen Umständen sichtbar sein soll.
Dazu habe ich FormStyle des Formulares auf fsSystemStayOnTop gesetzt.
Das klappt auch meistens.
Wenn ich aber z.B. VMWare starte und die vm auf Fullscreen setze, verschwindet mein Formular.
Weiss jemand eine Möglichkeit, das gewünschte Verhalten zu erreichen?
Danke und Grüße
Michael
Meine Anwendung soll ein kleines Fensterchen in der Bildschirmecke darstellen, daß unter allen Umständen sichtbar sein soll.
Dazu habe ich FormStyle des Formulares auf fsSystemStayOnTop gesetzt.
Das klappt auch meistens.
Wenn ich aber z.B. VMWare starte und die vm auf Fullscreen setze, verschwindet mein Formular.
Weiss jemand eine Möglichkeit, das gewünschte Verhalten zu erreichen?
Danke und Grüße
Michael
Re: Formstyle fsSystemStayOnTop funktioniert nicht immer.
Wenn mehere Anwendungen die gleichen Fensterparameter verwenden, entscheidet das OS, welches ganz oben ist (vermutlich das zuletzt gestartete). Das ist auch gut so, da der Anwender dies so erwartet.
Wenn es für private Zwecke ist oder es ganz driftige Gründe gäbe, könntest du versuchen einen Timer auf das Formular zu setzen und sowas zu machen:
Evtl. gänge auch im Timerevent das Formular zu minimieren und wieder normal herzustellen oder ähnliches. Müsstest du mal probieren. Wie gesagt, empfehlen für den Enduser würde ich sowas nicht.
Siehe auch: https://stackoverflow.com/questions/146 ... foreground
Wenn es für private Zwecke ist oder es ganz driftige Gründe gäbe, könntest du versuchen einen Timer auf das Formular zu setzen und sowas zu machen:
Code: Alles auswählen
procedure TForm1.Timer1Timer(Sender: TObject);
begin
Activate;
end;
Siehe auch: https://stackoverflow.com/questions/146 ... foreground
Code: Alles auswählen
type
TLiveSelection = (lsMoney, lsChilds, lsTime);
TLive = Array[0..1] of TLiveSelection;
Re: Formstyle fsSystemStayOnTop funktioniert nicht immer.
Ich hoffe, du siehst hierfür Konfiguratiosmöglichkeiten vor. Denn Programme, die sich ungefragt nach vorne schieben, auch wenn ihr Fenster nur klein und in der Bildschirmecke ist, sind extrem nervig.fliegermichl hat geschrieben: Meine Anwendung soll ein kleines Fensterchen in der Bildschirmecke darstellen, daß unter allen Umständen sichtbar sein soll.
Michael
-
- Beiträge: 6918
- Registriert: Do 2. Jan 2014, 17:21
- OS, Lazarus, FPC: Linux (die neusten Trunk)
- CPU-Target: 64Bit
- Wohnort: Schweiz
Re: Formstyle fsSystemStayOnTop funktioniert nicht immer.
Könnte man das nicht in in Trayleiste integrieren ?
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot
Mit Java und C/C++ sehe ich rot
-
- Beiträge: 2121
- Registriert: Di 23. Sep 2014, 17:46
- OS, Lazarus, FPC: Win10 | Linux
- CPU-Target: x86_64
Re: Formstyle fsSystemStayOnTop funktioniert nicht immer.
Das Fenster was immer sichtbar sein muss, muss das sachen darstellen oder auch Inputs nehmen (z.b. Button)
Für reines anzeigen kannst du auch einfach auf das desktop canvas zeichnen
Für reines anzeigen kannst du auch einfach auf das desktop canvas zeichnen
-
- Beiträge: 6918
- Registriert: Do 2. Jan 2014, 17:21
- OS, Lazarus, FPC: Linux (die neusten Trunk)
- CPU-Target: 64Bit
- Wohnort: Schweiz
Re: Formstyle fsSystemStayOnTop funktioniert nicht immer.
Wie geht dies ?Für reines anzeigen kannst du auch einfach auf das desktop canvas zeichnen
Wie kann ich direkt auf den Desktop zeichnen ?
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot
Mit Java und C/C++ sehe ich rot
-
- Beiträge: 2121
- Registriert: Di 23. Sep 2014, 17:46
- OS, Lazarus, FPC: Win10 | Linux
- CPU-Target: x86_64
Re: Formstyle fsSystemStayOnTop funktioniert nicht immer.
Ich weiß nur das es unter Windows geht, unter Linux keine Ahnung, unter mac OS aber auf gar keinen Fall:Mathias hat geschrieben:Wie geht dies ?
Wie kann ich direkt auf den Desktop zeichnen ?
Code: Alles auswählen
With TCanvas.Create do
try
Handle := GetDC(0); // Desktop Handle, getDC müsste LCL version von Windows GetWindowDC sein
// Hier zeichnen
finally
Free;
end;
Kann man nicht auch mit OpenGL auf einen Device Context (DC) zeichnen? Eventuell könnte man damit noch besser arbeiten
-
- Beiträge: 6918
- Registriert: Do 2. Jan 2014, 17:21
- OS, Lazarus, FPC: Linux (die neusten Trunk)
- CPU-Target: 64Bit
- Wohnort: Schweiz
Re: Formstyle fsSystemStayOnTop funktioniert nicht immer.
Kompilieren tut er es, aber eine Ausgabe kann ich nirgends sehen, getestet mit Linux.Ich weiß nur das es unter Windows geht, unter Linux keine Ahnung,
Code: Alles auswählen
uses
LCLIntf;
procedure TForm1.Button1Click(Sender: TObject);
var
c: TCanvas;
begin
c := TCanvas.Create;
c.Handle := getdc(0);
c.Rectangle(10, 10, 400, 400);
c.Free;
end;
Dies mache ich immer TOpenGLControl.Kann man nicht auch mit OpenGL auf einen Device Context (DC) zeichnen? Eventuell könnte man damit noch besser arbeiten
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot
Mit Java und C/C++ sehe ich rot
-
- Beiträge: 2121
- Registriert: Di 23. Sep 2014, 17:46
- OS, Lazarus, FPC: Win10 | Linux
- CPU-Target: x86_64
Re: Formstyle fsSystemStayOnTop funktioniert nicht immer.
Gut, hab es grade nochmal getestet, unter Windows funktioniert es.Mathias hat geschrieben:Kompilieren tut er es, aber eine Ausgabe kann ich nirgends sehen, getestet mit Linux.
Unter windows kann man mit OpenGL afaik auf jeden DC schreiben, zumindest von den eigenen Forms. Mit fremden Forms (z.B. Desktop) hab ich es auch noch nicht ausprobiertMathias hat geschrieben:Dies mache ich immer TOpenGLControl.
-
- Beiträge: 6918
- Registriert: Do 2. Jan 2014, 17:21
- OS, Lazarus, FPC: Linux (die neusten Trunk)
- CPU-Target: 64Bit
- Wohnort: Schweiz
Re: Formstyle fsSystemStayOnTop funktioniert nicht immer.
Dies ist bei OpenGLControl auch der Fall, du kannst Parent fast überall zuordnen.Unter windows kann man mit OpenGL afaik auf jeden DC schreiben, zumindest von den eigenen Forms.
Geht vielleicht mit Linux auch irgendwie.Mit fremden Forms (z.B. Desktop) hab ich es auch noch nicht ausprobiert
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot
Mit Java und C/C++ sehe ich rot
-
- Beiträge: 2121
- Registriert: Di 23. Sep 2014, 17:46
- OS, Lazarus, FPC: Win10 | Linux
- CPU-Target: x86_64
Re: Formstyle fsSystemStayOnTop funktioniert nicht immer.
Dafür kenn ich mich mit den Linux Window managern viel zu wenig aus. Es ist äußerst selten das man auf den Desktop zeichnen will und noch seltener das die Nutzer der Software dies auch wollen (das ist ganz schön nervig wenn einfach der Desktop überzeichnet wird), das ich mir vorstellen könnte das es unter Linux eventuell nur über Umwege geht. Die Windows API erlaubt ja sehr einfach das zugreifen auf Fremde Forms und Controls ich weiß nicht wie weit das unter Linux überhaupt möglich ist.Mathias hat geschrieben:Dies ist bei OpenGLControl auch der Fall, du kannst Parent fast überall zuordnen.Unter windows kann man mit OpenGL afaik auf jeden DC schreiben, zumindest von den eigenen Forms.
Geht vielleicht mit Linux auch irgendwie.Mit fremden Forms (z.B. Desktop) hab ich es auch noch nicht ausprobiert
-
- Beiträge: 6918
- Registriert: Do 2. Jan 2014, 17:21
- OS, Lazarus, FPC: Linux (die neusten Trunk)
- CPU-Target: 64Bit
- Wohnort: Schweiz
Re: Formstyle fsSystemStayOnTop funktioniert nicht immer.
Windows lässt grüssen, dort wird vieles mit Popup zugemüllt.und noch seltener das die Nutzer der Software dies auch wollen (das ist ganz schön nervig wenn einfach der Desktop überzeichnet wird),
Firefox und Thunderbird blenden auch rechts oben kleine Fenster ein. Aber dies könnten auch ganz normale Forms sein.das ich mir vorstellen könnte das es unter Linux eventuell nur über Umwege geht.
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot
Mit Java und C/C++ sehe ich rot