Formstyle fsSystemStayOnTop funktioniert nicht immer.

Formstyle fsSystemStayOnTop funktioniert nicht immer.

Beitragvon fliegermichl » 17. Jul 2018, 07:03 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
fliegermichl
 
Beiträge: 193
Registriert: 9. Jun 2011, 08:42

Beitragvon Michl » 17. Jul 2018, 10:31 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:
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; 
Michl
 
Beiträge: 2260
Registriert: 19. Jun 2012, 11:54
OS, Lazarus, FPC: Win7 Laz 1.7 Trunk FPC 3.1.1 Trunk | 
CPU-Target: 32Bit/64bit
Nach oben

Beitragvon wp_xyz » 17. Jul 2018, 11:10 Re: Formstyle fsSystemStayOnTop funktioniert nicht immer.

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.
wp_xyz
 
Beiträge: 2564
Registriert: 8. Apr 2011, 08:01

Beitragvon Mathias » 17. Jul 2018, 12:05 Re: Formstyle fsSystemStayOnTop funktioniert nicht immer.

Könnte man das nicht in in Trayleiste integrieren ?
Mit Lazarus sehe ich gün
Mit Java und C/C++ sehe ich rot
Mathias
 
Beiträge: 4105
Registriert: 2. Jan 2014, 17:21
Wohnort: Schweiz
OS, Lazarus, FPC: Linux (die neusten Trunc) | 
CPU-Target: 64Bit
Nach oben

Beitragvon Warf » 17. Jul 2018, 14:48 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
Warf
 
Beiträge: 910
Registriert: 23. Sep 2014, 16:46
Wohnort: Aachen
OS, Lazarus, FPC: Mac OSX 10.11 | Win 10 | FPC 3.0.0 | L trunk | 
CPU-Target: x86_64, i368, ARM
Nach oben

Beitragvon Mathias » 17. Jul 2018, 17:34 Re: Formstyle fsSystemStayOnTop funktioniert nicht immer.

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 gün
Mit Java und C/C++ sehe ich rot
Mathias
 
Beiträge: 4105
Registriert: 2. Jan 2014, 17:21
Wohnort: Schweiz
OS, Lazarus, FPC: Linux (die neusten Trunc) | 
CPU-Target: 64Bit
Nach oben

Beitragvon Warf » 17. Jul 2018, 18:45 Re: Formstyle fsSystemStayOnTop funktioniert nicht immer.

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
Warf
 
Beiträge: 910
Registriert: 23. Sep 2014, 16:46
Wohnort: Aachen
OS, Lazarus, FPC: Mac OSX 10.11 | Win 10 | FPC 3.0.0 | L trunk | 
CPU-Target: x86_64, i368, ARM
Nach oben

Beitragvon Mathias » 17. Jul 2018, 19:12 Re: Formstyle fsSystemStayOnTop funktioniert nicht immer.

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 gün
Mit Java und C/C++ sehe ich rot
Mathias
 
Beiträge: 4105
Registriert: 2. Jan 2014, 17:21
Wohnort: Schweiz
OS, Lazarus, FPC: Linux (die neusten Trunc) | 
CPU-Target: 64Bit
Nach oben

Beitragvon Warf » 17. Jul 2018, 19:18 Re: Formstyle fsSystemStayOnTop funktioniert nicht immer.

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
Warf
 
Beiträge: 910
Registriert: 23. Sep 2014, 16:46
Wohnort: Aachen
OS, Lazarus, FPC: Mac OSX 10.11 | Win 10 | FPC 3.0.0 | L trunk | 
CPU-Target: x86_64, i368, ARM
Nach oben

Beitragvon Mathias » 17. Jul 2018, 19:24 Re: Formstyle fsSystemStayOnTop funktioniert nicht immer.

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 gün
Mit Java und C/C++ sehe ich rot
Mathias
 
Beiträge: 4105
Registriert: 2. Jan 2014, 17:21
Wohnort: Schweiz
OS, Lazarus, FPC: Linux (die neusten Trunc) | 
CPU-Target: 64Bit
Nach oben

Beitragvon Warf » 17. Jul 2018, 19:32 Re: Formstyle fsSystemStayOnTop funktioniert nicht immer.

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.
Warf
 
Beiträge: 910
Registriert: 23. Sep 2014, 16:46
Wohnort: Aachen
OS, Lazarus, FPC: Mac OSX 10.11 | Win 10 | FPC 3.0.0 | L trunk | 
CPU-Target: x86_64, i368, ARM
Nach oben

Beitragvon Mathias » 17. Jul 2018, 19:36 Re: Formstyle fsSystemStayOnTop funktioniert nicht immer.

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 gün
Mit Java und C/C++ sehe ich rot
Mathias
 
Beiträge: 4105
Registriert: 2. Jan 2014, 17:21
Wohnort: Schweiz
OS, Lazarus, FPC: Linux (die neusten Trunc) | 
CPU-Target: 64Bit
Nach oben

• Themenende •

Zurück zu Windows



Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 0 Gäste

porpoises-institution
accuracy-worried