AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Fenser ON TOP aber nicht über taskbar?

Ein Thema von gandime · begonnen am 17. Aug 2007 · letzter Beitrag vom 18. Aug 2007
Antwort Antwort
gandime
(Gast)

n/a Beiträge
 
#1

Fenser ON TOP aber nicht über taskbar?

  Alt 17. Aug 2007, 19:33
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:

SetWindowPos(Handle, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOSIZE or SWP_NOMOVE); mfg
gandime
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#2

Re: Fenser ON TOP aber nicht über taskbar?

  Alt 17. Aug 2007, 20:37
Hallo,

schau dir das mal an:

Delphi-Quellcode:
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.
So kannst du zur Laufzeit auf AppBars reagieren.

Grüße vom marabu

Nachtrag: Ich sehe du hast eine neue Delphi-Version, da kannst du auch einfach mit TApplicationEvents.OnSettingChange arbeiten.
  Mit Zitat antworten Zitat
gandime
(Gast)

n/a Beiträge
 
#3

Re: Fenser ON TOP aber nicht über taskbar?

  Alt 18. Aug 2007, 09:02
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:
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;
edit: das funktioniert genau so wenig mit deinem anderen Beispiel!
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#4

Re: Fenser ON TOP aber nicht über taskbar?

  Alt 18. Aug 2007, 09:34
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
  Mit Zitat antworten Zitat
gandime
(Gast)

n/a Beiträge
 
#5

Re: Fenser ON TOP aber nicht über taskbar?

  Alt 18. Aug 2007, 09:40
achso wir beide meinen verschiedene Dinge ich versuche das zu verhindern:
Miniaturansicht angehängter Grafiken
das_125.jpg  
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#6

Re: Fenser ON TOP aber nicht über taskbar?

  Alt 18. Aug 2007, 09:57
Größenänderungen über den Rahmen der Form oder Verschiebungen behandelst du im Ereignis OnCanResize().
  Mit Zitat antworten Zitat
gandime
(Gast)

n/a Beiträge
 
#7

Re: Fenser ON TOP aber nicht über taskbar?

  Alt 18. Aug 2007, 10:01
ich möchte die größe verändern können und es verschieben können es soll blos hinter der Taskleiste sein
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#8

Re: Fenser ON TOP aber nicht über taskbar?

  Alt 18. Aug 2007, 18:47
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
  Mit Zitat antworten Zitat
gandime
(Gast)

n/a Beiträge
 
#9

Re: Fenser ON TOP aber nicht über taskbar?

  Alt 18. Aug 2007, 19:04
hmm ok danke dann muss ich mich woh damit abfinden
trotzdem danke
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 13:52 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz