Formstyle fsSystemStayOnTop funktioniert nicht immer.

Antworten
Benutzeravatar
fliegermichl
Lazarusforum e. V.
Beiträge: 1430
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.

Beitrag von fliegermichl »

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

Michl
Beiträge: 2505
Registriert: Di 19. Jun 2012, 12:54

Re: Formstyle fsSystemStayOnTop funktioniert nicht immer.

Beitrag von Michl »

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:

Code: Alles auswählen

procedure TForm1.Timer1Timer(Sender: TObject);
begin
  Activate;
end;

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/1463417/what-is-the-right-way-to-bring-a-windows-forms-application-to-the-foreground

Code: Alles auswählen

type
  TLiveSelection = (lsMoney, lsChilds, lsTime);
  TLive = Array[0..1] of TLiveSelection; 

wp_xyz
Beiträge: 4869
Registriert: Fr 8. Apr 2011, 09:01

Re: Formstyle fsSystemStayOnTop funktioniert nicht immer.

Beitrag von wp_xyz »

fliegermichl hat geschrieben:Meine Anwendung soll ein kleines Fensterchen in der Bildschirmecke darstellen, daß unter allen Umständen sichtbar sein soll.
Michael

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.

Mathias
Beiträge: 6160
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.

Beitrag von Mathias »

Könnte man das nicht in in Trayleiste integrieren ?
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

Warf
Beiträge: 1908
Registriert: Di 23. Sep 2014, 17:46
OS, Lazarus, FPC: Win10 | Linux
CPU-Target: x86_64

Re: Formstyle fsSystemStayOnTop funktioniert nicht immer.

Beitrag von Warf »

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

Mathias
Beiträge: 6160
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.

Beitrag von Mathias »

Für reines anzeigen kannst du auch einfach auf das desktop canvas zeichnen
Wie geht dies ?
Wie kann ich direkt auf den Desktop zeichnen ?
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

Warf
Beiträge: 1908
Registriert: Di 23. Sep 2014, 17:46
OS, Lazarus, FPC: Win10 | Linux
CPU-Target: x86_64

Re: Formstyle fsSystemStayOnTop funktioniert nicht immer.

Beitrag von Warf »

Mathias hat geschrieben:Wie geht dies ?
Wie kann ich direkt auf den Desktop zeichnen ?

Ich weiß nur das es unter Windows geht, unter Linux keine Ahnung, unter mac OS aber auf gar keinen Fall:

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;


Jedesmal wenn an der stelle auf die man gezeichnet hat sich was ändert wird das areal neugezeichnet, man muss also in einem timer oder so zeichnen. (Ein TCanvas hat auch ein OnChange event, vielleicht kann man das verwenden, hab es noch nicht ausprobiert)

Kann man nicht auch mit OpenGL auf einen Device Context (DC) zeichnen? Eventuell könnte man damit noch besser arbeiten

Mathias
Beiträge: 6160
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.

Beitrag von Mathias »

Ich weiß nur das es unter Windows geht, unter Linux keine Ahnung,

Kompilieren tut er es, aber eine Ausgabe kann ich nirgends sehen, getestet mit Linux.

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


Kann man nicht auch mit OpenGL auf einen Device Context (DC) zeichnen? Eventuell könnte man damit noch besser arbeiten
Dies mache ich immer TOpenGLControl.
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

Warf
Beiträge: 1908
Registriert: Di 23. Sep 2014, 17:46
OS, Lazarus, FPC: Win10 | Linux
CPU-Target: x86_64

Re: Formstyle fsSystemStayOnTop funktioniert nicht immer.

Beitrag von Warf »

Mathias hat geschrieben:Kompilieren tut er es, aber eine Ausgabe kann ich nirgends sehen, getestet mit Linux.

Gut, hab es grade nochmal getestet, unter Windows funktioniert es.
Mathias hat geschrieben:Dies mache ich immer TOpenGLControl.

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 ausprobiert

Mathias
Beiträge: 6160
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.

Beitrag von Mathias »

Unter windows kann man mit OpenGL afaik auf jeden DC schreiben, zumindest von den eigenen Forms.
Dies ist bei OpenGLControl auch der Fall, du kannst Parent fast überall zuordnen.

Mit fremden Forms (z.B. Desktop) hab ich es auch noch nicht ausprobiert
Geht vielleicht mit Linux auch irgendwie.
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

Warf
Beiträge: 1908
Registriert: Di 23. Sep 2014, 17:46
OS, Lazarus, FPC: Win10 | Linux
CPU-Target: x86_64

Re: Formstyle fsSystemStayOnTop funktioniert nicht immer.

Beitrag von Warf »

Mathias hat geschrieben:
Unter windows kann man mit OpenGL afaik auf jeden DC schreiben, zumindest von den eigenen Forms.
Dies ist bei OpenGLControl auch der Fall, du kannst Parent fast überall zuordnen.

Mit fremden Forms (z.B. Desktop) hab ich es auch noch nicht ausprobiert
Geht vielleicht mit Linux auch irgendwie.


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
Beiträge: 6160
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.

Beitrag von Mathias »

und noch seltener das die Nutzer der Software dies auch wollen (das ist ganz schön nervig wenn einfach der Desktop überzeichnet wird),
Windows lässt grüssen, dort wird vieles mit Popup zugemüllt.

das ich mir vorstellen könnte das es unter Linux eventuell nur über Umwege geht.
Firefox und Thunderbird blenden auch rechts oben kleine Fenster ein. Aber dies könnten auch ganz normale Forms sein.
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

Antworten