Form bsToolWin /bsSizeToolWin

Für alles, was in den übrigen Lazarusthemen keinen Platz, aber mit Lazarus zutun hat.
Benutzeravatar
Lincoln Six Echo
Beiträge: 138
Registriert: Di 26. Aug 2014, 16:42
OS, Lazarus, FPC: Win10, Debian
CPU-Target: I7/I9/Q9650/u.a.
Wohnort: Hamburg

Form bsToolWin /bsSizeToolWin

Beitrag von Lincoln Six Echo »

Hallo Leute,

in meiner Anwendung habe ich ein Hauptfenster und diverse ToolWins, also Forms mit BorderStyle bsToolWin und bsSizeToolWin. Diese sind FormStyle = fsStayOnTop.

Öffne ich nun einen Dialog, z.B. die Programmeinstellungen (der Dialog ist dann per ShowModal..) werden alle meine ToolWins HINTER das Hauptfenster verschoben.

Gleiches passiert wenn ein Hilfefenster (HTML-Help) geöffnet wird. Die ToolWins sind dann nicht mehr zu sehen.

Hat hierzu jemand eine Idee oder gar Lösung ?

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

Re: Form bsToolWin /bsSizeToolWin

Beitrag von Michl »

Ja, kann es nachstellen, scheint Windows only (Laz 1.6 und Trunk). Allerdings werden alle Formulare nach dem Schließen des Dialogs bei mir wieder ordentlich dargestellt.

IMHO kannst du dafür einen neuen Bugreport aufmachen.

Code: Alles auswählen

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

Benutzeravatar
Lincoln Six Echo
Beiträge: 138
Registriert: Di 26. Aug 2014, 16:42
OS, Lazarus, FPC: Win10, Debian
CPU-Target: I7/I9/Q9650/u.a.
Wohnort: Hamburg

Re: Form bsToolWin /bsSizeToolWin

Beitrag von Lincoln Six Echo »

Ja so ist das bei mir auch. Ist nur komplett unbrauchbar da die angezeigte Hilfe sich ja auf das ToolWin bezieht. Da steht dann "Klicken Sie auf ..." - nur das Fenster ist eben nicht zu sehen. Ergo kompletter Unsinn.

In anderen Programmen funktioniert das aber so, da werden die ToolWins auch weiter angezeigt obwohl Modale Dialoge im Vordergrund geöffnet sind. So ist das ja auch korrekt.

Dann ist das wohl in Lazarus ein fetter Bug.

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

Re: Form bsToolWin /bsSizeToolWin

Beitrag von Michl »

Lincoln Six Echo hat geschrieben:Dann ist das wohl in Lazarus ein fetter Bug.
Naja, solange niemanden so ein unerwünschtes Verhalten auffällt, wird es wohl auch nicht gefixt. :wink:

Code: Alles auswählen

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

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

Re: Form bsToolWin /bsSizeToolWin

Beitrag von Michl »

Da ich das Verhalten vermutlich richtig einordnen kann (hatte mal aufgrund eines anderen Bugreports die LCL etwas debuggt), hatte ich eben noch etwas probiert um dir bei einem vorläufigen Workaround zu helfen.

Du müsstest den Fokus vom Mainformular weg bekommen, dann sollte das funktionieren. Z.B. kann man ein neues Formular erstellen und anzeigen, bevor der Dialog angezeigt wird. Unschön, geht aber bei mir:

Code: Alles auswählen

procedure TForm1.Button2Click(Sender: TObject);
var
  aForm: TForm;
begin
  aForm := TForm.CreateNew(Nil);
  aForm.SetBounds(Screen.WorkAreaWidth div 2, Screen.WorkAreaHeight div 2, 1, 1);
  aForm.Show;
  ShowMessage('Sowas');
  aForm.Free;
end;

Code: Alles auswählen

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

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

Re: Form bsToolWin /bsSizeToolWin

Beitrag von wp_xyz »

Lincoln Six Echo hat geschrieben:Dann ist das wohl in Lazarus ein fetter Bug.

Vor solchen Aussagen sollte man zumindest unser aller liebste Suchmaschine bemühen, dort findet man ganz weiten oben dieses: https://lazplanet.blogspot.de/2014/01/a ... -form.html

Abgesehen davon hat sich die Situation mit dem Stay-On-Top oder modalen Dialogen aller möglichen Programme mit Windows 10 dramatisch verschlechtert. Heutzutage ist es anscheinend normal, dass man sich zuerst durch den Fensterstapel tabben oder alles minimieren muss, um ein modales Fenster zu finden.

Benutzeravatar
Lincoln Six Echo
Beiträge: 138
Registriert: Di 26. Aug 2014, 16:42
OS, Lazarus, FPC: Win10, Debian
CPU-Target: I7/I9/Q9650/u.a.
Wohnort: Hamburg

Re: Form bsToolWin /bsSizeToolWin

Beitrag von Lincoln Six Echo »

Ja danke, ich hatte vorher ausgiebig hier und anderswo gesucht. Danke für den Link, der ist mir bekannt und löst nicht das Problem das ich angesprochen habe.

Ein SystemStayOnTop ist nicht das was ich angesprochen habe, dann wären die ToolWins ja auch immer ÜBER ALLEN Dialogen. Das ist ja nicht das was korrekt wäre.

In anderen Anwendungen läuft das ja auch unter Win10 korrekt, d.h. die ToolWins sind immer ÜBER der MainForm, wird ein ModalDialog geöffnet liegen diese ÜBER der MainForm aber UNTER dem ModalDialog, so ist das richtig.

Auch ändert sich der Schatten nicht wenn das jeweilige ToolWin angeklickt wird, anders als bei Lazarus. Hier ändert sich der Schatten von wenig auf stark wenn ein ToolWin (bsSizeToolWin + fsStayOnTop) angeklickt wird.

Es liegt also nicht am OS. Auch das Einbinden von "windows" in der uses-Sektion und Aufruf der Windows-API bringt keine Änderung.

Benutzeravatar
Lincoln Six Echo
Beiträge: 138
Registriert: Di 26. Aug 2014, 16:42
OS, Lazarus, FPC: Win10, Debian
CPU-Target: I7/I9/Q9650/u.a.
Wohnort: Hamburg

Re: Form bsToolWin /bsSizeToolWin

Beitrag von Lincoln Six Echo »

Und danke an Michl für den schnellen Lösungsvorschlag. Bringt aber leider auch nichts, die ToolWins verschwinden nach wie vor hinter der MainForm.

Benutzeravatar
Lincoln Six Echo
Beiträge: 138
Registriert: Di 26. Aug 2014, 16:42
OS, Lazarus, FPC: Win10, Debian
CPU-Target: I7/I9/Q9650/u.a.
Wohnort: Hamburg

Re: Form bsToolWin /bsSizeToolWin

Beitrag von Lincoln Six Echo »

Für alle die das interessiert, probiert mal das aus:

ToolWin := TForm.CreateParented(MainForm.Handle);

Dann bleibt das ToolWin da wo es hingehört, sieht aber ziemlich hässlich aus (Win7-64) und lässt sich nicht auf weiteren Monitor verschieben.

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

Re: Form bsToolWin /bsSizeToolWin

Beitrag von Michl »

Lincoln Six Echo hat geschrieben:Und danke an Michl für den schnellen Lösungsvorschlag. Bringt aber leider auch nichts, die ToolWins verschwinden nach wie vor hinter der MainForm.
Kannst du mal ein Minimalbeispiel hochladen (ohne Executable und Kompilate). Bei mir funktioniert der oben geschriebene Workaround bei Windows 7 und 10 (32 und 64bit).

Oder probiere doch mal das angehangene Testprojekt.
Dateianhänge
TestFormHinterHauptform.zip
(2.5 KiB) 75-mal heruntergeladen

Code: Alles auswählen

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

Benutzeravatar
Lincoln Six Echo
Beiträge: 138
Registriert: Di 26. Aug 2014, 16:42
OS, Lazarus, FPC: Win10, Debian
CPU-Target: I7/I9/Q9650/u.a.
Wohnort: Hamburg

Re: Form bsToolWin /bsSizeToolWin

Beitrag von Lincoln Six Echo »

var
MainForm : TMainForm;


procedure TMainForm.FormCreate(Sender: TObject);
begin
...
ToolWin := TToolWinForm.Create(Application);
TToolWin.Show;
...
end;

procedure TMainForm.Button1Click(sender : TObject);
begin
ShowMessage('?'); // Alle ToolWins verschwinden hinter der MainForm
end;

Benutzeravatar
Lincoln Six Echo
Beiträge: 138
Registriert: Di 26. Aug 2014, 16:42
OS, Lazarus, FPC: Win10, Debian
CPU-Target: I7/I9/Q9650/u.a.
Wohnort: Hamburg

Re: Form bsToolWin /bsSizeToolWin

Beitrag von Lincoln Six Echo »

Sorry, sollte lauten

ToolWin.Show;


Das TToolWin ist in einer anderen Unit die natürlich auch eingebunden ist.

Benutzeravatar
Lincoln Six Echo
Beiträge: 138
Registriert: Di 26. Aug 2014, 16:42
OS, Lazarus, FPC: Win10, Debian
CPU-Target: I7/I9/Q9650/u.a.
Wohnort: Hamburg

Re: Form bsToolWin /bsSizeToolWin

Beitrag von Lincoln Six Echo »

Bei Programmen wie z.B. das LazPaint sieht man ganz deutlich das Problem. Öffnet man einen der Modal-Dialoge verschwinden alle ToolWins.

Bei Programmen die nicht mit Lazarus gebaut wurden ist das anders, da bleiben sie wo sie hingehören.

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

Re: Form bsToolWin /bsSizeToolWin

Beitrag von Michl »

Funktioniert der Workaround (das Testprojekt von mir) bei dir nicht?

Code: Alles auswählen

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

Benutzeravatar
Lincoln Six Echo
Beiträge: 138
Registriert: Di 26. Aug 2014, 16:42
OS, Lazarus, FPC: Win10, Debian
CPU-Target: I7/I9/Q9650/u.a.
Wohnort: Hamburg

Re: Form bsToolWin /bsSizeToolWin

Beitrag von Lincoln Six Echo »

Nein. Das Programm verhält sich genau so wie bereits beschrieben. Das "aForm" ist ganz kurz zu sehen, ansonsten wie beschrieben. Alle ToolWins verschwinden hinter der MainForm.

Ich arbeite allerdings mit drei Monitoren am PC. Das sollte aber keine Rolle spielen, in anderen Programmen funktioniert es ja.

Habe das gerade auch mal unter Win XP 32bit getestet, da tritt der Fehler genauso auf, hat also nichts mit Win7/10/.. zu tun.

Antworten