AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein GUI-Design mit VCL / FireMonkey / Common Controls (Dynamisch erzeugte) Form immer im Vordergrund dargestellen
Thema durchsuchen
Ansicht
Themen-Optionen

(Dynamisch erzeugte) Form immer im Vordergrund dargestellen

Ein Thema von Viktorii · begonnen am 2. Feb 2011 · letzter Beitrag vom 7. Feb 2011
Antwort Antwort
Seite 1 von 2  1 2      
Viktorii

Registriert seit: 19. Jul 2007
358 Beiträge
 
#1

(Dynamisch erzeugte) Form immer im Vordergrund dargestellen

  Alt 2. Feb 2011, 14:16
Moin.

Wie kann ich erreichen, das eine (dynamisch erzeugte) Form immer im Vordergrund dargestellt wird?

Mit diesem Code wird die Form nicht mehr im Vordergrund dargestellt wenn ich den Fokus auf einen andere Applikation setze:

Delphi-Quellcode:
    
FPasswordForm := TPasswordForm.Create(self);
FPasswordForm.FormStyle := fsStayOnTop;
ret := FPasswordForm.ShowModal;
Wer weiß Rat?

Vielen Dank
  Mit Zitat antworten Zitat
Benutzerbild von GPRSNerd
GPRSNerd

Registriert seit: 30. Dez 2004
Ort: Ruhrpott
239 Beiträge
 
Delphi 10.4 Sydney
 
#2

AW: (Dynamisch erzeugte) Form immer im Vordergrund dargestellen

  Alt 2. Feb 2011, 14:26
Hi,

hier ein bisschen Code um diese StayOnTop-Feature ein und auszuschalten.

Delphi-Quellcode:
procedure TForm_Main.spbStayOnTopClick(Sender: TObject);
begin
  if spbStayOnTop.Down then
  begin
    SetWindowPos(Handle,
                 HWND_TOPMOST,
                 Left, Top, Width, Height,
                 SWP_NOACTIVATE or SWP_NOMOVE or SWP_NOSIZE);
  end
  else
  begin
    SetWindowPos(Handle,
                 HWND_NOTOPMOST,
                 Left, Top, Width, Height,
                 SWP_NOACTIVATE or SWP_NOMOVE or SWP_NOSIZE);
  end;
end;
Stefan
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.542 Beiträge
 
Delphi 11 Alexandria
 
#3

AW: (Dynamisch erzeugte) Form immer im Vordergrund dargestellen

  Alt 2. Feb 2011, 14:30
Oder etwas kürzer:
Delphi-Quellcode:
procedure TForm_Main.spbStayOnTopClick(Sender: TObject);
const IsDown: array[Boolean] of Cardinal = (HWND_NOTOPMOST, HWND_TOPMOST);
begin
  SetWindowPos(Handle,
               IsDown[spbStayOnTop.Down],
               Left, Top, Width, Height,
               SWP_NOACTIVATE or SWP_NOMOVE or SWP_NOSIZE);
end;
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Viktorii

Registriert seit: 19. Jul 2007
358 Beiträge
 
#4

AW: (Dynamisch erzeugte) Form immer im Vordergrund dargestellen

  Alt 2. Feb 2011, 14:34
Das funktioniert leider nicht

So hab ich es versucht:
Delphi-Quellcode:
    FPasswordForm := TPasswordForm.Create(self);
    SetWindowPos(FPasswordForm.Handle,HWND_TOPMOST,Left, Top, Width, Height,SWP_NOACTIVATE or SWP_NOMOVE or SWP_NOSIZE);
    ret := FPasswordForm.ShowModal;
Was (interessanterweise) teilweise funktioniert, ist der code den ich unter #1 gepostet habe und wenn ich in der Form folgendes mache:

Delphi-Quellcode:
procedure TPasswordForm.FormActivate(Sender: TObject);
begin
  Position := poScreenCenter;
end;
Wenn ich allerdings folgendes hinzufüge bzw. den Fokus zu Laufzeit mit der Maus auf das Edit setzte, bleibt das Fenster nicht mehr im Vordergrund

Delphi-Quellcode:
procedure TPasswordForm.FormShow(Sender: TObject);
begin
  EditPassword.SetFocus;
end;

Geändert von Viktorii ( 2. Feb 2011 um 14:40 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.542 Beiträge
 
Delphi 11 Alexandria
 
#5

AW: (Dynamisch erzeugte) Form immer im Vordergrund dargestellen

  Alt 2. Feb 2011, 14:38
Pack doch mal den SetWindowPos-Aufruf mit ins FormActive des Passwortforms, das sollte helfen.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Benutzerbild von GPRSNerd
GPRSNerd

Registriert seit: 30. Dez 2004
Ort: Ruhrpott
239 Beiträge
 
Delphi 10.4 Sydney
 
#6

AW: (Dynamisch erzeugte) Form immer im Vordergrund dargestellen

  Alt 2. Feb 2011, 14:50
Oder etwas kürzer:
Delphi-Quellcode:
procedure TForm_Main.spbStayOnTopClick(Sender: TObject);
const IsDown: array[Boolean] of Cardinal = (HWND_NOTOPMOST, HWND_TOPMOST);
begin
  SetWindowPos(Handle,
               IsDown[spbStayOnTop.Down],
               Left, Top, Width, Height,
               SWP_NOACTIVATE or SWP_NOMOVE or SWP_NOSIZE);
end;
Coole Vereinfachung!
Stefan
  Mit Zitat antworten Zitat
Viktorii

Registriert seit: 19. Jul 2007
358 Beiträge
 
#7

AW: (Dynamisch erzeugte) Form immer im Vordergrund dargestellen

  Alt 2. Feb 2011, 14:51
Hilft leider auch nicht.

Habe das in FormShow, FormActivate und FormCreate versucht.
  Mit Zitat antworten Zitat
Benutzerbild von GPRSNerd
GPRSNerd

Registriert seit: 30. Dez 2004
Ort: Ruhrpott
239 Beiträge
 
Delphi 10.4 Sydney
 
#8

AW: (Dynamisch erzeugte) Form immer im Vordergrund dargestellen

  Alt 2. Feb 2011, 14:53
Das funktioniert leider nicht

So hab ich es versucht:
Delphi-Quellcode:
    FPasswordForm := TPasswordForm.Create(self);
    SetWindowPos(FPasswordForm.Handle,HWND_TOPMOST,Left, Top, Width, Height,SWP_NOACTIVATE or SWP_NOMOVE or SWP_NOSIZE);
    ret := FPasswordForm.ShowModal;
Du hast wahrscheinlich nicht bemerkt, dass die Properties Left, Top, Width, Height natürlich auch von FPasswordForm sein müssen! So, wie du es aufgerufen hast, übergibst du die Properties von deiner Parentform.
Stefan
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.542 Beiträge
 
Delphi 11 Alexandria
 
#9

AW: (Dynamisch erzeugte) Form immer im Vordergrund dargestellen

  Alt 2. Feb 2011, 14:53
Komisch, ich habe das eben ausprobiert, bei mir geht das

[edit] @GPRSNerd: Solange SWP_NOMOVE und SWP_NOSIZE gesetzt sind, ist es vollkommen wurscht, wie die Koordinaten belegt sind, da sie schlicht ignoriert werden. [/edit]
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Viktorii

Registriert seit: 19. Jul 2007
358 Beiträge
 
#10

AW: (Dynamisch erzeugte) Form immer im Vordergrund dargestellen

  Alt 2. Feb 2011, 14:58
@DeddyH: Ich werde mal ein Minimal Beispiel machen und das posten. Wird aber wahrscheinlich erst morgen früh was werden
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 20:47 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