|
|
Fehler in %WM_INITDIALOG
#2876 - 25.02.2010 17:06
|
Ändern
|
Antworten
|
Zitieren
|
|
|
Beim Programmstart wird ein Dialogfenster mit mehreren Controls aufgemacht. ich möchte hierbei eine Funktion aufrufen, die mich eine Datei suchen läßt und den Pfad in eine Textbox einträgt. Ich rufe diese Funktion auf in CASE %WM_INITDIALOG. Dabei erhalte ich den Fehler: lsIniEdit.exe hat ein Problem festgestellt und muss beendet werden.
Wenn ich jedoch vor den Aufruf der Funktion eine MSGBOX "..." setze, erhalte ich KEINEN Fehler.
hier ist der betreffende Codeabschnitt:
CALLBACK FUNCTION ShowIniEditProc() LOCAL strTemp AS STRING ON ERROR GOTO Error_ShowIniEditProc SELECT CASE AS LONG CB.MSG CASE %WM_INITDIALOG ' Initialization handler 'MSGBOX "Die Ini-Datei wird benötigt" CALL SuchDatei(hDlg, %IDC_txtIniFilePath, "INI-Datei", strTemp)
.... oder gibt es eine Stelle die für den Aufruf besser geeignet ist?
Vielen Dank im voraus Lembit
Extras:
|
Josef Kirschbaum
|
|
Moderator
|
|
|
|
|
Registriert: 15.12.2002
|
|
Beiträge: 344
|
|
Wohnort: Emmering
|
|
|
Nachdem Sie keinen vollständigen kompilierbaren Quellcode zur Verfügung stellen, läßt sich das beschriebene Problem hier nicht nachvollziehen und deshalb auch nicht näher nach einer genauen Ursache untersuchen.
Ich persönlich würde eine (möglicherweise umfangreiche) Dateisuche nicht als Teil der Behandlung der Nachricht WM_INITDIALOG durchführen. Ich hätte einfach kein gutes Gefühl dabei, wenn ich dadurch die Erzeugung eines Dialogfensters mit all den damit verbundenen unsichtbaren Vorgängen unterbrechen würde.
Jedoch wo steht geschrieben, dass es grundsätzlich nicht erlaubt ist? Bei der Suche auf den Seiten von Microsoft (MSDN) habe ich immer wieder die folgende oder ähnliche Formulierungen zu WM_INITDIALOG gefunden:
..... Dialog box procedures typically use this message to initialize controls and carry out any other initialization tasks that affect the appearance of the dialog box.
Weder im Internet, noch in meinen dicken Büchern (Petzold etc.) habe ich eine entsprechende Warnung oder eine Auflistung von Dingen gefunden, die man bei der Behandlung dieser Nachricht auf keinen Fall machen darf. Allerdings habe ich meine Suche bereits nach gut zwei Stunden aufgegeben.
Aber was spricht dagegen, wenn Sie die Dateisuche einfach an unproblematischer Stelle schon innerhalb der Funktion PBMAIN durchführen und zwar noch vor der Zeile DIALOG SHOW .... (falls DDT-Stil)? Und warum dann nicht schon vor CONTROL ADD TEXTBOX/LABEL ....? Dadurch könnten Sie den gefundenen Pfad bereits beim Anlegen des zugehörigen Textfeldes berücksichtigen.
Editiert von Josef Kirschbaum (27.02.2010 13:42)
Extras:
|
|
|
|
Vielen Dank für die Mühe und die ausführliche Antwort. Da ich Ihnen nicht zumuten wollte, durch 1500 Zeilen Code zu waten und auch das Forum nicht damit verstopfen wollte, hatte ich nur den nötigen Ausschnitt zitiert. Das hat aber auch gereicht, um eine Lösung zu bekommen. Ich habe die Dateisuche jetzt vor DIALOG SHOW gesetzt und das Ergebnis per global string in den Initialization handler gebracht. In den Bereich CONTROL ADD TEXTBOX möchte ich es aus Übersichtlichkeitsgründen nicht setzen.
Nochmals besten Dank und ein schönes Wochenende Lembit
Extras:
|