Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Fenster im Vordergrund halten (https://www.delphipraxis.net/105978-fenster-im-vordergrund-halten.html)

Xzeer 3. Jan 2008 10:44


Fenster im Vordergrund halten
 
Hallo,

Ich habe mir einen Einstellungsdialog gebastellt, wo der Benutzer unteranderem die Funktion wählen kann, dass das Programm immer im Vordergrund ist. Ich speicher die Einstellung in einer INI-Datei.

Delphi-Quellcode:
//Procedure in Form1
procedure TForm1.Vordergrund(s: string);
begin
  if s='up' then
  SetWindowPos(Self.Handle ,HWND_TOPMOST,0,0,0,0,SWP_NOACTIVATE or SWP_NOMOVE or SWP_NOSIZE);
  if s='down' then
  SetWindowPos(Self.Handle ,HWND_NOTOPMOST,0,0,0,0,SWP_NOACTIVATE or SWP_NOMOVE or SWP_NOSIZE);
end;

//Procedure in Form2
if checkbox3.Checked=true then
  begin
    ini02.WriteString('einstellungen','imvor','true'); //einstellung speichen
    Form1.Vordergrund('up'); //einstellungs sezten
  end
  else
  begin
    ini02.WriteString('einstellungen','imvor','false'); //einstellung speichen
    Form1.Vordergrund('down'); //einstellung setzten
  end;
Das funktioniert auch perfekt. Jetzt möchte ich aber auch, dass das Programm nach einem erneuten starten direkt wieder im Vordergrund ist. Also habe ich im OnCreate von Form1 geschrieben:

Delphi-Quellcode:
if ini01.ReadString('einstellungen','imvor','false')='true' then
  Form1.Vordergrund('up');
Aber beim starten ist Form1 nicht im Vordergrund. Wo ist denn da mein Denkfehler?

DeddyH 3. Jan 2008 10:47

Re: Fenster im Vordergrund halten
 
1. Wieso benutzt Du nicht ReadBool/WriteBool, anstatt mit Strings herumzuhantieren?
2. Du schreibst in ini02 und liest aus ini01. Stimmt das so?

Xzeer 3. Jan 2008 10:59

Re: Fenster im Vordergrund halten
 
zu1) mhh weiß auch nicht, dass hab ich mir mal so angewöhnt.... geht doch auch, oder nicht?

zu2) ja das stimmt so, jedes form hat seine eigene INI-Variable

Luckie 3. Jan 2008 11:06

Re: Fenster im Vordergrund halten
 
Ich würde es noch einfacher machen:
Delphi-Quellcode:
procedure TForm1.Vordergrund(WindowPos: Integer);
begin
  SetWindowPos(Self.Handle, WindowPos, 0, 0, 0, 0, SWP_NOACTIVATE or SWP_NOMOVE or SWP_NOSIZE);
end;
Aufruf mit:
Delphi-Quellcode:
Vordegrund(HWND_TOPMOST);
Und dann entsprechend mit Read- / WriteInteger lesen bzw. schreiben.

DeddyH 3. Jan 2008 11:07

Re: Fenster im Vordergrund halten
 
Zeig mal die komplette Create-Methode von Form1. Außerdem finde ich den String-Parameter etwas verfehlt ;)

Xzeer 3. Jan 2008 11:17

Re: Fenster im Vordergrund halten
 
Ok, dann baue ich das nochmal ein bisschen um :-)

Um die Fensterposition dann wieder normal zu machen, müsste ich doch dann schreiben:

Delphi-Quellcode:
Vordergrund(HWND_NOTOPMOST);
Oder?

Matze 3. Jan 2008 11:21

Re: Fenster im Vordergrund halten
 
Jupp, aber sowas könntest du dir durch Ausprobieren auch selbst beantworten. ;)

Xzeer 3. Jan 2008 11:35

Re: Fenster im Vordergrund halten
 
ahhhh, ich hab den fehler gefunden. Ich wollte die Form im OnCreate in den Vordergrund setzten, aber das geht natürlich nicht, denn die Form ist doch an dem Punkt noch gar nicht aufgebaut.

Naja danke für eure Hilfe, jetzt ist meine Procedure immerhin schön suber programmiert ;-)


Alle Zeitangaben in WEZ +1. Es ist jetzt 14:18 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