Autor |
Beitrag |
JRegier
      
Beiträge: 1268
Win XP Home, Prof, 2003 Server
D6 Enterprise
|
Verfasst: Mi 13.07.05 09:04
Hallo, ich hatte einen nicht erfolgreichen Start mit meinem Projekt (hatte dauernd Fehlermeldungen Interner Fehler THR 406)
jetzt habe ich alles neu aufgebaut und habe gedacht ich stoße wieder auf das Problem weil Programm hängen blieb aber es war
was ganz anderes:
Nämlich das ShowMessage Dialog wurde aufgerufen und war aber Hinter einem Dialog und somit blieb das Programm wieder
hängen weil ich ja auf den OK Button des ShowMessage Dialoges nicht klicken kann!
Das Dialog ist ein StayOnTop Dialog! Als ich also zwei Dialoge hintereinander mit StayOnTop hatte wurde das ShowMessage Dialog
nicht angezeigt!
Wie kann man sichergehen das ein ShowMessage Dialog StayOnTop über alle ist BringToFront gibts ja nicht!
Oder muß ich eine andere MessageBox nehmen?
Ein BringToBack gibts ja nicht, oder? um andere Dialoge nach hinten zu setzen?
|
|
jaenicke
      
Beiträge: 19312
Erhaltene Danke: 1747
W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Mi 13.07.05 09:11
Wie wärs mit CreateMessageDialog?
Der Grundgedanke ist, den Dialog nicht direkt anzeigen zu lassen, sondern stattdessen das Dialogfenster erstellen zu lassen und das Formular zurückzubekommen. Mit diesem Formular kann man dann alles machen, also neue Komponenten hinzufügen oder es eben auch StayOnTop setzen...
Hier wird zum Beispiel darüber diskutiert:
www.delphipraxis.net...grueckgabewerte.html
|
|
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: Mi 13.07.05 14:58
Was passiert, wenn du bei einer Messagebox den Flad MB_SYS(TEM)MODAL angibst?
|
|
jaenicke
      
Beiträge: 19312
Erhaltene Danke: 1747
W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Mi 13.07.05 17:22
Also das sagt doch nur, dass es modal fürs ganze System ist, aber das hat doch nix mit TopMost zu tun, oder? Sicher bin ich mir da allerdings nicht, ich probiers mal aus...
|
|
JRegier 
      
Beiträge: 1268
Win XP Home, Prof, 2003 Server
D6 Enterprise
|
Verfasst: Mi 13.07.05 17:50
jaenicke hat folgendes geschrieben: | Also das sagt doch nur, dass es modal fürs ganze System ist, aber das hat doch nix mit TopMost zu tun, oder? Sicher bin ich mir da allerdings nicht, ich probiers mal aus... |
Na ja habe das jetzt so gemacht, ich habe das Modale Dialog versteckt und die Message angezeigt und danach wieder das Dialog abgezeigt:
Delphi-Quelltext 1: 2: 3:
| Hide; ShowMessage('Sie haben die Mausposition verändert, starten Sie Windows neu, damit die Änderungen wirksam werden!'); Show; |
So ganz schön ist es aber nicht!
|
|
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: Mi 13.07.05 18:21
Also, wenn cih das so mache:
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9:
| procedure TForm1.Button1Click(Sender: TObject); begin Messagebox(Handle, 'Test', 'jdgfjh', 0); end;
procedure TForm1.FormCreate(Sender: TObject); begin FormStyle := fsStayOnTop; end; |
Dann erscheint auch die Messagebox vor dem Fenster. Gebe ich bei der Messagebox als Handle 0 an, erscheint sie nicht mehr vor dem Fenster. Die ShowMessage erscheint übrigens auch vor dem Fenster. Ich weiß nicht, was du da machst.
|
|
JRegier 
      
Beiträge: 1268
Win XP Home, Prof, 2003 Server
D6 Enterprise
|
Verfasst: Mi 13.07.05 19:00
Also ich rufe die ShowMessage Procedure nicht direkt im Dialog auf, ich habe eine Unit mit nur Proceduren wo ich die in eine Procedure gestellt
habe könnte es daran liegen? Also ich habe das mit dem Handle immer auf 0 gesetzt!
|
|
JRegier 
      
Beiträge: 1268
Win XP Home, Prof, 2003 Server
D6 Enterprise
|
Verfasst: Mi 13.07.05 19:02
Also ich rufe die ShowMessage Procedure nicht direkt im Dialog auf, ich habe eine Unit mit nur Proceduren wo ich die in eine Procedure gestellt
habe könnte es daran liegen?
Ah das mit der MessageBox mit Handle wäre ne lösung! Weil das so auch in Java geht! Allerding sind die Begriffe da alle was anders!
|
|
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: Mi 13.07.05 19:04
Eigentlich nicht, ob es nun eine extra Unit ist oder nicht, letztendlich landet es ja auch in der Exe. Und wie gesagt, du musst schon ein Handle angeben, damit Windows weiß zu welchem Fenster die Messagebox gehört.
|
|
JRegier 
      
Beiträge: 1268
Win XP Home, Prof, 2003 Server
D6 Enterprise
|
Verfasst: Mi 13.07.05 19:39
Luckie hat folgendes geschrieben: | Eigentlich nicht, ob es nun eine extra Unit ist oder nicht, letztendlich landet es ja auch in der Exe. Und wie gesagt, du musst schon ein Handle angeben, damit Windows weiß zu welchem Fenster die Messagebox gehört. |
Aber bei der ShowMessage kannst du doch kein Handle angeben!
|
|
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: Mi 13.07.05 20:01
Nö, das übernimmt die VCL.
|
|