AGB  ·  Datenschutz  ·  Impressum  







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

Wie Hauptfenster in Vordergrund bringen?

Ein Thema von iphi · begonnen am 21. Nov 2010 · letzter Beitrag vom 11. Dez 2010
Antwort Antwort
Seite 2 von 3     12 3      
iphi

Registriert seit: 13. Feb 2009
262 Beiträge
 
Delphi 7 Personal
 
#11

AW: Wie Hauptfenster in Vordergrund bringen?

  Alt 21. Nov 2010, 15:36
Zitat:
windows.SetForegroundWindow(handle);
Super, das ist der Trick! In meinem Testcode funktioniert es anstandslos.

In meinem eigentlichen Programm musste ich SetForegroundWindow allerdings im OnActivate ausführen. Im OnCreate erzeugte er eine Access Violation. Kann es sein, dass der einen OnActivate Event ausser der Reihe erzeugt?

Vielen Dank für Eure Hilfe
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#12

AW: Wie Hauptfenster in Vordergrund bringen?

  Alt 21. Nov 2010, 15:50
Es kann sein, dass im OnCreate-Event noch kein Fenster-Handle verfügbar ist.
Schließlich befinden wir uns (gerade bei der MainForm) noch in der Initialisierungsphase der Anwendung.

Dieser Trick ist allerdings auch mit Vorsicht zu genießen, weil es hierbei zu unerwünschten Nebeneffekten kommen kann, die gar nicht erwünscht sind.

Es gibt halt mehrere Lösungsansätze, wobei nicht alle wirklich regelkonform sind und trotzdem augenscheinlich das richtige liefern. Dann muss man auf einmal mit Tricks diese Lösung heilen und schwupps besteht die Anwendung aus mehr Heilungs- als Arbeitscode.

Kleines Beispiel in Word, weil das kommt mir immer wieder unter die Füße:

Zitat von Anwender 08/15:
Weil der Anwender möchte, dass auf der nächsten Seite der folgende Text erscheint, drückt er einfach so lange auf die Enter-Taste, bis er auf der nächsten Seite ist und schreibt weiter.
Alles ist super und der Anwender freut sich ... bis ... ja bis er dann auf einem anderen Drucker drucken möchte, oder das Seitenformat angepasst wird.

Schon fängt man an dieses Dokument zu heilen. Ein paar mal Enter hier und da gedrückt, hier und da ein paar mal Delete und jetzt passt es irgendwie.
Zitat von Anwender Pro:
Weil der Anwender möchte, dass auf der nächsten Seite der folgende Text erscheint, fügt er einen Seitenwechsel ein.
Wesentlich smarter und spart jede Menge Zeit und Ärger.

Man hat es selber in der Hand, ob man Heiler oder Programmierer sein möchte
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
wolfgang_SV

Registriert seit: 9. Nov 2007
Ort: Neumünster
39 Beiträge
 
#13

AW: Wie Hauptfenster in Vordergrund bringen?

  Alt 21. Nov 2010, 16:10
Was heißt eigentlich regelkonform programmieren ?

Ich kann dazu nur sagen, dass es im Windows-System und auch
im Delphi-System so viele Unregelmäßigkeiten und auch regelrechte
Fehler gibt, dass man gar nicht umhin kommt , unkonventionelle Wege zu
beschreiten, die vielleicht nicht regelkonform erscheinen, aber letztendlich zu Ergebnissen führen.
  Mit Zitat antworten Zitat
wolfgang_SV

Registriert seit: 9. Nov 2007
Ort: Neumünster
39 Beiträge
 
#14

AW: Wie Hauptfenster in Vordergrund bringen?

  Alt 21. Nov 2010, 16:30
Zitat:
weil es hierbei zu unerwünschten Nebeneffekten kommen kann, die gar nicht erwünscht sind.
So was nennt man z.B. eine tautologische Aussage..
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#15

AW: Wie Hauptfenster in Vordergrund bringen?

  Alt 21. Nov 2010, 16:46
Was heißt eigentlich regelkonform programmieren ?

Ich kann dazu nur sagen, dass es im Windows-System und auch
im Delphi-System so viele Unregelmäßigkeiten und auch regelrechte
Fehler gibt, dass man gar nicht umhin kommt , unkonventionelle Wege zu
beschreiten, die vielleicht nicht regelkonform erscheinen, aber letztendlich zu Ergebnissen führen.
Viele (nicht alle) unkonventionelle Wege haben ihren Ursprung aber auch vom Nicht-Wissen oder festhalten an "das haben wir immer so gemacht".

In diesem speziellen Fall wird aber ein Designfehler mit unkonventionellen Mitteln geheilt.

Es soll jeder machen wie er möchte, mein Hinweis ist ja nur, dass man sich nicht wundert, wenn man irgendwann mehr Heiler als Programmierer ist.
Wer sich doch wundert ist trotzdem kein Wunder-Heiler

Zitat:
weil es hierbei zu unerwünschten Nebeneffekten kommen kann, die gar nicht erwünscht sind.
So was nennt man z.B. eine tautologische Aussage..
und es fällt auf
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.624 Beiträge
 
Delphi 12 Athens
 
#16

AW: Wie Hauptfenster in Vordergrund bringen?

  Alt 21. Nov 2010, 17:19
[OT] Ich wünsche mir mehr Wunschdenken, damit die unerwünschten Nebeneffekte nicht erwünscht sind, sondern verwünscht werden, verwünscht nochmal [/OT]
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
iphi

Registriert seit: 13. Feb 2009
262 Beiträge
 
Delphi 7 Personal
 
#17

AW: Wie Hauptfenster in Vordergrund bringen?

  Alt 11. Dez 2010, 11:37
Jetzt habe ich noch ein gleichartiges Problem:

Ich habe jetzt ZWEI Message-Boxen hintereinander im OnCreate Event Handler.
Die erste erscheint wie sie soll im Vordergrund. Die zweite verschwindet allerdings im Hintergrund.
Das Hauptfenster erscheit dann Dank Eurer Hilfe wieder im Vordergrund.

Wie kann ich bewerkstelligen, dass die zweite Messagebox auch im Vordergrund sichtbar wird?

Hier mein Testcode:

Delphi-Quellcode:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs;

type
  TForm1 = class(TForm)
    procedure FormCreate(Sender: TObject);
    procedure FormShow(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
begin
With Application do
  begin
   NormalizeTopMosts;
   MessageBox('Hello', 'IMPORTANT NOTICE!', MB_OKCANCEL);
   RestoreTopMosts;
  end;
With Application do
  begin
   NormalizeTopMosts;
   MessageBox('2nd. try', '2nd. IMPORTANT NOTICE!', MB_OKCANCEL);
   RestoreTopMosts;
  end;
end;

procedure TForm1.FormShow(Sender: TObject);
begin
windows.SetForegroundWindow(handle);
end;

end.
  Mit Zitat antworten Zitat
Benutzerbild von s.h.a.r.k
s.h.a.r.k

Registriert seit: 26. Mai 2004
3.159 Beiträge
 
#18

AW: Wie Hauptfenster in Vordergrund bringen?

  Alt 11. Dez 2010, 11:43
Hm, an der Stelle bin ich dann eher der Meinung, dass man die zwei Message-Boxen nacheinander einblenden sollte. Oder man nutzt eine andere Möglichkeit, dem Benutzer etwas mitzuteilen. Stell dir mal vor, du öffnest ein Programm und da poppt eine Box nach der anderen auf, die eine blinkt mehr als die andere -- unästhetisch.
»Remember, the future maintainer is the person you should be writing code for, not the compiler.« (Nick Hodges)
  Mit Zitat antworten Zitat
iphi

Registriert seit: 13. Feb 2009
262 Beiträge
 
Delphi 7 Personal
 
#19

AW: Wie Hauptfenster in Vordergrund bringen?

  Alt 11. Dez 2010, 13:34
Zitat:
Hm, an der Stelle bin ich dann eher der Meinung, dass man die zwei Message-Boxen nacheinander einblenden sollte.
Das tue ich ja auch. Erst geht die eine auf, und wenn die geschlossen wird, dann geht die andere auf, allerdings leider im Hintergrund. Und zu diesem Zeitpunkt gibts noch nicht mal eine Ikone auf der Taskbar, d.h. der Nutzer bekommt davon nichts mit.

Es muss doch irgendwie möglich sein, zwei MessageBoxes nacheinander so auf den Bildschirm zu bringen, dass man sie auch sieht!???
  Mit Zitat antworten Zitat
samso

Registriert seit: 29. Mär 2009
439 Beiträge
 
#20

AW: Wie Hauptfenster in Vordergrund bringen?

  Alt 11. Dez 2010, 15:03
Ich meine, dass es sich hier um ein spezielles Fehlerverhalten von Delphi 6 handelt. Bei Delphi 2007 ist das Verhalten wieder anders. Deshalb würde ich diesen workaround mit Vorsicht genießen.
Ich würde da mal folgenden Ansatz in die Diskussion werfen:
Delphi-Quellcode:
procedure TForm1.FormCreate(Sender: TObject);
begin
  {$if RTLVersion<18}
  windows.SetForegroundWindow(Application.handle);
  {$ifend}
  Application.MessageBox('Hello', 'IMPORTANT NOTICE!', MB_OKCANCEL);
  Application.MessageBox('2nd. try', '2nd. IMPORTANT NOTICE!', MB_OKCANCEL);
end;
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 3     12 3      


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 16:45 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