AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein GUI-Design mit VCL / FireMonkey / Common Controls Delphi Nach MessageDlg Meldung "Programm funktioniert nicht mehr"
Thema durchsuchen
Ansicht
Themen-Optionen

Nach MessageDlg Meldung "Programm funktioniert nicht mehr"

Ein Thema von s.h.a.r.k · begonnen am 28. Apr 2010 · letzter Beitrag vom 10. Jun 2010
Antwort Antwort
Benutzerbild von s.h.a.r.k
s.h.a.r.k

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

Nach MessageDlg Meldung "Programm funktioniert nicht me

  Alt 28. Apr 2010, 11:20
Hallo zusammen,

ich habe gerade ein sehr seltsames Problem und weiß nicht genau wieso das überhaupt der Fall ist Ich habe einen Thread, der den kompletten Startup erledigt, sodass ein SplashScreen immer zugreifbar bleibt. Aus dem Thread mache ich einmal ein SendMessage an eine Instanz einer Klasse, in im MainThread erzeugt wurde und ein Handle bereit stellt. So sieht der Aufruf auf, d.h. dass der "Workerthread" ja wartet, bis eine Antwort kommt.

Delphi-Quellcode:
if (SendMessage(FApplicationController.Handle, WM_STARTUP_MESSAGE, Integer(smDatabaseSetup), Integer(True)) <> 0) then
  raise EGeneralException.Create('Datenkbank-Setup wurde abgebrochen.', Self)
In der gerufenen Instanz erzeuge ich dann eine GUI, lasse darin einige Dinge erledigen und will danach ein MessageDlg anzeigen lassen, dass alles geklappt hat. Dabei nutze ich keinerlei Threads. Hier die Kurzfassung des Codes:

Delphi-Quellcode:
DBSetupController.DeleteAll();
DBSetupController.CreateAll();
DBSetupController.Import();

// Meldung, dass alles erfolgreich abgelaufen ist
MessageDlg('Datenbank-Setup wurde erfolgreich ausgeführt.', mtInformation, [mbOk], 0);
Es läuft alles perfekt, bis hin zum MessageDlg. Dort hängt sich scheinbar das Programm auf und Windows meldet freudig Programm X funktioniert nicht mehr (Hier noch ein Beispielbild, wie das ganze aussieht). Lasse ich den MessageDlg heraus, so funktioniert alles

Habe ich irgendwas falsch gemacht? Wird die GUI evtl. im Kontaxt des Workerthreads aufgerufen? (was ich aber nicht glaube) Oder woran kann es liegen?

// Edit

Gibt es evtl. irgendwelche Timeouts die es zu beachten gilt?

// Edit 2

Selbst wenn ich den Call mit Synchronize aufrufe klappt es nicht und das Programm schmiert ab:

Delphi-Quellcode:
procedure CallDBSetup();
begin
  if (SendMessage(FApplicationController.Handle, WM_STARTUP_MESSAGE, Integer(smDatabaseSetup), Integer(True)) <> 0) then
    raise EGeneralException.Create('Datenkbank-Setup wurde abgebrochen.', Self)
end;

{ ... }

Synchronize(CallDBSetup);
// Edit 3

Das Ganze passiert aber auch nur, wenn ich die Anwendung aus der IDE heraus starte. "Standalone" klappt alles wunderbar
»Remember, the future maintainer is the person you should be writing code for, not the compiler.« (Nick Hodges)
  Mit Zitat antworten Zitat
Benutzerbild von sirius
sirius

Registriert seit: 3. Jan 2007
Ort: Dresden
3.443 Beiträge
 
Delphi 7 Enterprise
 
#2

Re: Nach MessageDlg Meldung "Programm funktioniert nich

  Alt 5. Mai 2010, 16:09
Versuche mal Messagebox zu verwenden.
Dieser Beitrag ist für Jugendliche unter 18 Jahren nicht geeignet.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu
Online

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.063 Beiträge
 
Delphi 12 Athens
 
#3

Re: Nach MessageDlg Meldung "Programm funktioniert nich

  Alt 5. Mai 2010, 16:14
Ich hab es nie ausprobiert, aber es könnte sein, daß bei SendMessage wirklich sowas passiert, allerdingt, selbst wenn es im WorkerThread ausgeführt wird, so würde zumindestens solange der Hauptthread angehalten.

Probier einfach mal PostMessage, wenn da der Fehler auch auftritt, dann liegt es nicht an der Message.
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.
  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
 
#4

Re: Nach MessageDlg Meldung "Programm funktioniert nich

  Alt 5. Mai 2010, 20:17
Zitat von sirius:
Versuche mal Messagebox zu verwenden.
Wo liegt denn der Unterschied zwischen MessageDlg und MessageBox?
»Remember, the future maintainer is the person you should be writing code for, not the compiler.« (Nick Hodges)
  Mit Zitat antworten Zitat
daywalker9

Registriert seit: 1. Jan 2010
Ort: Leer
594 Beiträge
 
Delphi XE3 Professional
 
#5

Re: Nach MessageDlg Meldung "Programm funktioniert nich

  Alt 5. Mai 2010, 20:20
MessageBox ist ein API Aufruf von Windows - MessageDlg hingegen wird von Delphi selber aufgebaut (Form, Buttons etc...)
Lars
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#6

Re: Nach MessageDlg Meldung "Programm funktioniert nich

  Alt 7. Mai 2010, 19:05
Der MessageDLG ist aus der VCL und diese ist nicht threadsafe. Deswegen nimm eine MessageBox.
Michael
Ein Teil meines Codes würde euch verunsichern.
  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
 
#7

Re: Nach MessageDlg Meldung "Programm funktioniert nich

  Alt 8. Mai 2010, 14:14
Das Wort threadsafe wollte ich hört habe es in der Hilfe zu MessageBox nicht gefunden gehabt.
»Remember, the future maintainer is the person you should be writing code for, not the compiler.« (Nick Hodges)
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu
Online

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.063 Beiträge
 
Delphi 12 Athens
 
#8

Re: Nach MessageDlg Meldung "Programm funktioniert nich

  Alt 8. Mai 2010, 14:26
Zitat von s.h.a.r.k:
habe es in der Hilfe zu MessageBox nicht gefunden gehabt.
Strg+Mausklick auf MessageBox und dann immer weiter ... da merkt man schnell, was sich darin so alles versteckt.
In der OH steht halt nicht Alles und vorallem nichts über die Innereien.
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.
  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
 
#9

AW: Nach MessageDlg Meldung "Programm funktioniert nicht mehr"

  Alt 10. Jun 2010, 01:20
Wollte hiermit nur noch bestätigen, dass MessageBox einwandfrei geklappt hat.
»Remember, the future maintainer is the person you should be writing code for, not the compiler.« (Nick Hodges)
  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 20:51 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