![]() |
Fenser ON TOP aber nicht über taskbar?
Hi,
wie lasse ich mein Fenser immer im Vordergrung sein ohne das es über meiner Taskleiste ist und wie mache ich das wieder rückgängig? normal mache ich es mit folgender Funktion:
Delphi-Quellcode:
mfg
SetWindowPos(Handle, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOSIZE or SWP_NOMOVE);
gandime |
Re: Fenser ON TOP aber nicht über taskbar?
Hallo,
schau dir das mal an:
Delphi-Quellcode:
So kannst du zur Laufzeit auf AppBars reagieren.
unit DemoFrm;
interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, ComCtrls; type TDemoForm = class(TForm) StatusBar: TStatusBar; procedure FormCreate(Sender: TObject); private procedure UpdateConstraints; procedure WMSettingChange(var Msg: TMessage); message WM_SETTINGCHANGE; end; var DemoForm: TDemoForm; implementation {$R *.dfm} procedure TDemoForm.UpdateConstraints; begin with Constraints, Screen do begin MaxHeight := WorkAreaHeight; MaxWidth := WorkAreaWidth; end; end; procedure TDemoForm.FormCreate(Sender: TObject); begin UpdateConstraints; end; procedure TDemoForm.WMSettingChange(var Msg: TMessage); begin UpdateConstraints; end; end. Grüße vom marabu Nachtrag: Ich sehe du hast eine neue Delphi-Version, da kannst du auch einfach mit TApplicationEvents.OnSettingChange arbeiten. |
Re: Fenser ON TOP aber nicht über taskbar?
ich habe es jetzt erstmal mit application.OnSettingChange ausprobiert aber das funktioniert nicht, da die Procedure nicht ausgelöst wird oder hab ich nen Fehler gemacht?
Delphi-Quellcode:
edit: das funktioniert genau so wenig mit deinem anderen Beispiel!
procedure TForm1.FormCreate(Sender: TObject);
begin application.OnSettingChange:=UpdateConstraints; end; procedure TForm1.UpdateConstraints(Sender: TObject;Flag:integer;const Section:string;var result:integer); begin with Constraints, Screen do begin MaxHeight := WorkAreaHeight; MaxWidth := WorkAreaWidth; end; end; |
Re: Fenser ON TOP aber nicht über taskbar?
Hallo,
der von mir gezeigte Beispielcode wurde von mir getestet und funktioniert. Er reagiert beispielsweise auf die Umstellung der Taskleisteneigenschaft "Taskleiste automatisch ausblenden". Wird die Form dann maximiert, so wird der von der Taskleiste belegte Bereich ausgespart. Der Unterschied zu dem von dir gezeigten Code ist, dass dein Code die Verhältnisse beim Start nicht auswertet, sondern erst bei einer später auftretenden Änderung. Freundliche Grüße |
Re: Fenser ON TOP aber nicht über taskbar?
Liste der Anhänge anzeigen (Anzahl: 1)
achso wir beide meinen verschiedene Dinge ich versuche das zu verhindern:
|
Re: Fenser ON TOP aber nicht über taskbar?
Größenänderungen über den Rahmen der Form oder Verschiebungen behandelst du im Ereignis OnCanResize().
|
Re: Fenser ON TOP aber nicht über taskbar?
ich möchte die größe verändern können und es verschieben können es soll blos hinter der Taskleiste sein
|
Re: Fenser ON TOP aber nicht über taskbar?
Hallo,
wenn du ein VCL-Fenster im Vordergrund haben möchtest, dann kannst du einfach seinen FormStyle auf fsStayOnTop setzen. Es passiert dann in etwa das gleiche wie bei deinem Aufruf von SetWindowPos(). Selbst wenn du deine Taskleiste so konfiguriert hast, dass sie immer im Vordergrund sein soll, wird aber dein Fenster davor liegen, sobald du es aktivierst. Ein TopMost-Fenster liegt vor allen NonTopMost-Fenstern, aber wenn es mehrere TopMost-Fenster gibt, dann haben auch diese Fenster eine Z-Ordnung. Microsoft meint dazu im PSDK mehr oder weniger deutlich, dass die Z-Ordnung vom Benutzer gesteuert werden soll. Warum soll dein Programm die Kontrolle übernehmen? Überhaupt nicht anrüchig ist das natürlich, wenn dein Programm selbst ein AppBar ist. Nochmal im Klartext: Solange dein TopMost-Fenster aktiv ist, wird es vor der Taskleiste gezeichnet. Mein Code-Beispiel hilft da eigentlich überhaupt nicht. Die VCL wertet die Nachricht WM_SETTINGCHANGE selbst aus und die Constraints spielen nur bei nicht maximiertem Fenster eine Rolle. Freundliche Grüße |
Re: Fenser ON TOP aber nicht über taskbar?
hmm ok danke dann muss ich mich woh damit abfinden
trotzdem danke |
Alle Zeitangaben in WEZ +1. Es ist jetzt 12:41 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz