Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Opendialog bei Ok-Button nicht schliessen (https://www.delphipraxis.net/185366-opendialog-bei-ok-button-nicht-schliessen.html)

idefix2 3. Jun 2015 15:08

Opendialog bei Ok-Button nicht schliessen
 
Bei normalen Forms hat das Ereignis Onclose einen Parameter Action, mit dem man im Onclose ein Close verhindern kann.
Gibt es eine Möglichkeit, im Opendialog etwas ähnliches zu machen und selbst auf den OK-Button des OpenFile Dialogs zu reagieren, um ein Schliessen des Dialogs bei falschen Eingaben zu unterbinden?
Den OK-Button des Dialogs ganz auszublenden, und einen eigenen Button einzurichten, der das erledigt, wäre eine Notlösung, die mir nicht besonders gefällt.

Hintergrund:
Ich habe den Dialog mit einem neuen Eingabefeld erweitert. Im Onclose sollten diese Eingabe überprüft werden, und nur wenn das Fileselect in Verbindung mir dieser Eingabe "erfolgreich" durchgeführt werden kann, sollte der Close-Dialog tatsächlich per OK-Button geschlossen werden (abbrechen ist natürlich immer möglich, dann erfolgen auch keine Prüfungen und keine weitere Reaktion auf die Eingaben)

bepe 3. Jun 2015 15:45

AW: Opendialog bei Ok-Button nicht schliessen
 
Dafür hat der TOpenDialog das OnCanClose Ereignis.

himitsu 3. Jun 2015 15:46

AW: Opendialog bei Ok-Button nicht schliessen
 
Korrekte Lösung:
Es wird direkt bei SelektionChange/Eingabe validiert und dementsprechend der Button enabled/disabled, bzw. man verwendet das erwähnte Event.

idefix2 3. Jun 2015 21:33

AW: Opendialog bei Ok-Button nicht schliessen
 
@Himitsu
Diese "Korrekte Lösung" ist in dem Fall leider nicht möglich.
Das ausgewählte File muss unter Umständen, je nach Eingabe in dem Extra Feld, in ein anderes Verzeichnis verschoben werden. Wenn das aus irgend einem Grund nicht klappt (zum Beispiel, weil es gerade in einer anderen Anwendung geöffnet ist), soll der Diaog nicht mit OK geschlossen werden. Das weiss ich aber erst, wenn ich versucht habe, es zu verschieben.

@Bepe
Danke, genau das habe ich gesucht

himitsu 3. Jun 2015 21:37

AW: Opendialog bei Ok-Button nicht schliessen
 
Dann hoffe ich du gibst wenigstens eine Fehlermeldung mit aus ... nich daß da jemand stundenlang auf den OK-Button drückt und sich wundert, daß nix passiert.
:stupid:

idefix2 3. Jun 2015 22:48

AW: Opendialog bei Ok-Button nicht schliessen
 
Ich mache ihne dann sogar darauf aufmerksam, dass er das File wahrscheinlich in einem anderen Programm offen hat und gefälligst dort aussteigen soll (das ist in 99% der Fälle der Grund dafür, dass ein rename/move fehlschlägt).
:lol:

Luckie 3. Jun 2015 23:02

AW: Opendialog bei Ok-Button nicht schliessen
 
Zitat:

Zitat von idefix2 (Beitrag 1304108)
je nach Eingabe in dem Extra Feld, in ein anderes Verzeichnis verschoben werden.

Warum verlegst du Aufgaben des eigentlichen Programms in den Dialog? Der Dialog ist nun mal dafür gedacht eine Datei "auszuwählen" um dann was damit zu machen. Und nicht, um mir ihr im Dialog was zu machen.

idefix2 4. Jun 2015 10:40

AW: Opendialog bei Ok-Button nicht schliessen
 
Die Frage ist berechtigt.
Aber ich meine, dass es für den Benutzer angenehmer ist, wenn im Fehlerfall der Dialog offen bleibt und er nach Behebung des Problems (was meist darin besteht, ein anderes Programm zu schliessen) einfach nur noch einmal Ok drücken muss.

Sonst müsste der Dialog geschlossen werden, und der User müsste ihn erneut aufrufen, und dann die Eingaben, die er gemacht hat, erneut machen. Oder ich müsste mir die Eingaben merken, und das Formular beim nächten Aufruf mit den letzten Angaben wieder ausfüllen - was auch eine fragliche Vorgangsweise wäre, weil es zu einem schlecht nachvollziehbaren Programmverhalten kommt, manchmal, nämlich wenn beim vorigen Aufruf ein Fehler passiert ist (aber das könnte ja auch schon länger zurückliegen), wären dann die Felder beim Öffnen des Dialogs schon mit den Eingaben vom letzten mal ausgefült, und normalerweise nicht).

Es passiert als Reaktion auf den OK-Button nicht besonders viel, den Vierzeiler in die onclick Routine des Buttons (bzw. hier in die oncanclose Routine der Form) aufzunehmen erscheint mir in dem Fall besser, auch wenn das im Allgemeinen nicht die erste Wahl für die Vorgangsweise ist.

idefix2 4. Jun 2015 16:47

AW: Opendialog bei Ok-Button nicht schliessen
 
So, jetzt hänge ich bei der sache nochmal:
Zum Auslesen der eingegebenen Werte in der oncanclose-Routine wollte ich die funktion GetDlgItemText verwenden - damit bekomme ich aber nur die statischen Werte von labelcaptions und dgl., bei den Editfeldern liefert die Funktion einen leeren String.
Welche Funktion liefert die eingegebenen Werte in den Standardeingabefeldern des Dialogs (Directory und Dateiname) ?

Popov 4. Jun 2015 17:58

AW: Opendialog bei Ok-Button nicht schliessen
 
Das eigentliche Problem war anders, aber evtl. bringt dich dieser Beitrag auf neue Ideen.

http://www.delphipraxis.net/172365-d...g-aendern.html

Da wollte ich, während das Dialogfenster offen war, den Dateinamen ändern. Unter normalen Umständen klappt das nicht. Es ging nur mit SendMessage. Wie gesagt, vielleicht bringt dich das auf eine andere Idee.


Alle Zeitangaben in WEZ +1. Es ist jetzt 20:08 Uhr.
Seite 1 von 2  1 2      

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