Modalen Dialog schließen
-
Ist nicht mein erster modaler Dialog, aber das Prob ist neu. Kann den Fehler nicht finden, auch der Debugger will mir nichts verraten - zumindest seh ich es nicht.
In einer SDI-Form mit TImage und ua. einigen ComboBoxen öffne ich meinen Dialog (bsDialog, fsStayOnTop, Visible auf false) mit
NewDlg->ShowModal();
Im Dialog befinden sich ua. zwei Button mit ModalResult mrCancel und mrOK.
Klar, der Dialog schließt sich. Dann bekomm ich die Meldung: " Ein deaktiviertes oder unsichtbares Fenster kann nicht den Focus erhalten!"
Na und? Dann erhält es eben (automatisch) keinen Focus - was aber IMHO nicht üblich wäre. Aber die Ursache der Meldung versteh ich nicht.
-Nebenbei, den Dialog mit Show() anzeigen und auf Hide() setzen (bei sonst unveränderten Bedingungen) macht keine Probs.
Ich weiß, auf die Entfernung wird es schwierig. Was sagen eure Spürnasen? Was könnte ich übersehen haben?
-
Vieles. Aber mit SDI war wohl MDI gemeint, oder?
Passiert das denn auch bei einem neuen MDI-Projekt?
-
@WebFritzi
Man kann ein MDI Fenster nicht mit ShowModal() öffnen@Gormez
Hast du in deinem Quelcode irgendwo SetFocus() Befel stehen? Wenn ja, such an der Stelle[ Dieser Beitrag wurde am 10.04.2003 um 07:52 Uhr von Xqgene editiert. ]
-
Hi Freaks! Kurz und schmerzhaft, chirurgisch präzise, ihr seid super.
Oh ja/oh doch
, es ist eine SDI-Form.
@Xqgene, Volltreffer, Edit1->SetFocus(); . Das stand in der FileNewClick beim Dialogaufruf (mit new). Beim Schließen sollte dieser Coder nicht relevant sein (geschlossen wird im Dialog, nicht in der HauptForm). Sieht für mich wie ein Optimierungsfehler aus.
Macht nix, die TabOrder stimmt, ich brauch die Anweisung nicht.
Problem gelöst, ich dank euch sehr.
-
Ein deaktiviertes oder unsichtbares Fenster kann nicht den Focus erhalten!
Naja, bei dieser Fehlermeldung hättest du auch selber drauf kommen können. Und BTW: Was ist eine SDI-Form???
-
@WebFritzi :p
Du weiss doch ganz genau, dass er eine SDI-Anwendung meint
-
Meine Frage war: WAS IST SDI ???
-
Single Document Interface
-
Brauchst ja nicht gleich auszurasten.
Also einfach fsNormal anstatt von fsMDIForm ???
-
es gibt schon eine vorlage für sdi programme im bcb. das ist irgendwo bei Neu / Projekte / SDI ...
-
Habs mir angeschaut. Sowas ist also ein Editor (für was auch immer) ohne MDI.
-
Es ist eben SDI... SDI != MDI... Das *DI ist eine bestimmte Anwendungsarchithektur... der gegenüber steht Dialog-Basierende Anwendungen. Dialogbasierende Anwendungen. Während alle Fenster in dialogfeldbasierenden Anwendungen frei sind, sind Document und Viewer-Elemente einer *DI-Applikation an ein Hauptframe gebunden.
So, nun aber schluss mit Offtopic. Für weitere Informationen bitte einen neuen Thread eröffnen.
-junix
-
Ein deaktiviertes oder unsichtbares Fenster kann nicht den Focus erhalten!
@WebFritzi, die Meldung löst der **Öffnen-**Code für das sich verabschiedende Fenster aus. Würde der Code aber wirklich noch mal angefahren, würde ja sofort wieder der Dialog erzeugt werden. - Und noch was: Damit ich den Dialog auch via ESC canceln kann, geb ich im OnKeyDown dem Cancel-Button den Focus und lös dann VK_RETURN aus. Dieses SetFocus() löst ja auch keine Exeption aus, obwohl es direkt am Schließen-Ablauf beteiligt ist.Ja, für eine SDI ist der FormStyle fsNormal. Wollte dich nicht ärgern. Aber ich kenn gar keinen anderen brauchbaren Ausdruck.
-
Original erstellt von <Gormez>:
Damit ich den Dialog auch via ESC canceln kann, geb ich im OnKeyDown dem Cancel-Button den Focus und lös dann VK_RETURN aus.Lass das! Setz die Eigenschaft Cancel des Cancel-Buttons einfach auf true.
[ Dieser Beitrag wurde am 10.04.2003 um 19:41 Uhr von WebFritzi editiert. ]
-
Der Tip kam goldrichtig, @WebFritzi. Die Eigenschaft Cancel hätte ich jetzt im Eifer des Gefechts glatt übersehen. Der Code in der OnClick-Routine für den Cancel-Button wird ja sowieso ausgeführt. Ich dank dir.