Form bsToolWin /bsSizeToolWin
- 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
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 ?
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 ?
Re: Form bsToolWin /bsSizeToolWin
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.
IMHO kannst du dafür einen neuen Bugreport aufmachen.
Code: Alles auswählen
type
TLiveSelection = (lsMoney, lsChilds, lsTime);
TLive = Array[0..1] of TLiveSelection;
- 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
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.
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.
Re: Form bsToolWin /bsSizeToolWin
Naja, solange niemanden so ein unerwünschtes Verhalten auffällt, wird es wohl auch nicht gefixt.Lincoln Six Echo hat geschrieben:Dann ist das wohl in Lazarus ein fetter Bug.

Code: Alles auswählen
type
TLiveSelection = (lsMoney, lsChilds, lsTime);
TLive = Array[0..1] of TLiveSelection;
Re: Form bsToolWin /bsSizeToolWin
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:
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;
Re: Form bsToolWin /bsSizeToolWin
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.htmlLincoln Six Echo hat geschrieben:Dann ist das wohl in Lazarus ein fetter Bug.
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.
- 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
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.
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.
- 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
Und danke an Michl für den schnellen Lösungsvorschlag. Bringt aber leider auch nichts, die ToolWins verschwinden nach wie vor hinter der MainForm.
- 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
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.
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.
Re: Form bsToolWin /bsSizeToolWin
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).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.
Oder probiere doch mal das angehangene Testprojekt.
- Dateianhänge
-
TestFormHinterHauptform.zip
- (2.5 KiB) 86-mal heruntergeladen
Code: Alles auswählen
type
TLiveSelection = (lsMoney, lsChilds, lsTime);
TLive = Array[0..1] of TLiveSelection;
- 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
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;
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;
- 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
Sorry, sollte lauten
ToolWin.Show;
Das TToolWin ist in einer anderen Unit die natürlich auch eingebunden ist.
ToolWin.Show;
Das TToolWin ist in einer anderen Unit die natürlich auch eingebunden ist.
- 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
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.
Bei Programmen die nicht mit Lazarus gebaut wurden ist das anders, da bleiben sie wo sie hingehören.
Re: Form bsToolWin /bsSizeToolWin
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;
- 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
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.
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.