AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

Abfragemenü

Ein Thema von Dunkelbunt27 · begonnen am 20. Apr 2011 · letzter Beitrag vom 20. Apr 2011
Antwort Antwort
Benutzerbild von s.h.a.r.k
s.h.a.r.k

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

AW: Abfragemenü

  Alt 20. Apr 2011, 10:30
Evtl. sollte man noch dazu sagen, dass die Methode MessageDlg() nicht threadsafe ist und man diese in der Unit Dialogs findet.
»Remember, the future maintainer is the person you should be writing code for, not the compiler.« (Nick Hodges)
  Mit Zitat antworten Zitat
Benutzerbild von Dunkelbunt27
Dunkelbunt27

Registriert seit: 10. Aug 2010
232 Beiträge
 
Delphi XE Professional
 
#2

AW: Abfragemenü

  Alt 20. Apr 2011, 10:36
FormCanClose ist ja nicht als Ereignis vordefiniert (bei mir zumindest nicht)
reicht es also aus die Procedure anzulegen
procedure TForm1.FormCanClose(Sender: TObject; var CanClose: Boolean);; und in type zu definieren?

EDIT:
Es gibt ein OnCloseQuery, procedure TForm1.FormCloseQuery(Sender: TObject;
var CanClose: Boolean);
Das ist identisch.

Geändert von Dunkelbunt27 (20. Apr 2011 um 10:41 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Dunkelbunt27
Dunkelbunt27

Registriert seit: 10. Aug 2010
232 Beiträge
 
Delphi XE Professional
 
#3

AW: Abfragemenü

  Alt 20. Apr 2011, 11:05
Wie kann ich es machen, dass wenn ich erst auf JA klicke (also ich möchte speichern)
und dann im Speicherdialog abbreche, sich das Programm nicht schließt?

ich hab es jetzt so:
Delphi-Quellcode:
  case MR of
    mrYes : begin
               CanClose := False;
               if not FileExists(Filename) then
               begin
                 SpeicherDialog := TSaveDialog.Create(self);
                 Speichern_mit_Dialog;
                  //if SpeicherDialog.Execute = False //Falsch, da so der Dialog erneut aufgerufen wird.
                  // CanClose := False;
               end
               else
                begin
                  Speichern(Filename);
                  CanClose := True;
                  Exit;
                end;
              end;
    mrNo : begin
              //leer
              end;
    mrCancel: begin
               CanClose := False;
               exit;
              end;
  end;
<Edit> Doppelpost -.- </Edit>
  Mit Zitat antworten Zitat
SirTwist

Registriert seit: 28. Sep 2006
198 Beiträge
 
Delphi XE Professional
 
#4

AW: Abfragemenü

  Alt 20. Apr 2011, 11:09
Sorry, natürlich heißt das Event CloseQuery....

am einfachsten definierst Du Deine Speichern()-Routine als Funktion, die einen Boolean zurückliefert, und zwar True genau dann, wenn alles gut gegangen ist.

Dann hättest Du nur noch mrYes: CanClose := Speichern();

Wobei natürlich die File-Auswahlbox in der Speichern()-Routine aufgerufen werden muss.
  Mit Zitat antworten Zitat
Benutzerbild von Dunkelbunt27
Dunkelbunt27

Registriert seit: 10. Aug 2010
232 Beiträge
 
Delphi XE Professional
 
#5

AW: Abfragemenü

  Alt 20. Apr 2011, 11:13
Okay,
Danke.
  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
 
#6

AW: Abfragemenü

  Alt 20. Apr 2011, 11:17
Delphi-Quellcode:
procedure TForm1.OnCloseQuery(Sender: TObject; var CanClose: Boolean);
begin
  CanClose := True;
  case MR of
    mrYes : begin
      SD := TSaveDialog.Create();
      try
        // Set dialog properties
        // ...
  
        if (SD.Execute) then
        begin
          // Save document
        end
        else begin
          // Do NOT close application because user cancelled
          // SaveDialog.
          CanClose := False;
        end;
      finally
        SD.Free();
      end;
    end;
    
    // Nothing to do here
    mrNo : ;
  
    // Application should NOT be closed
    mrCancel : CanClose := False;
  end;
end;
Sinnvoller wäre es den Teil unter mrYes in eine eigene Methode auszulagern, allein schon wegen der Übersichtlichkeit, aber eben auch aufgrund der möglichen Wiederverwendbarkeit -- vorausgesetzt du schreibst diese Save()-Methode ausreichend allgemein.
»Remember, the future maintainer is the person you should be writing code for, not the compiler.« (Nick Hodges)
  Mit Zitat antworten Zitat
Benutzerbild von Dunkelbunt27
Dunkelbunt27

Registriert seit: 10. Aug 2010
232 Beiträge
 
Delphi XE Professional
 
#7

AW: Abfragemenü

  Alt 20. Apr 2011, 11:31
Zitat:
Sinnvoller wäre es den Teil unter mrYes in eine eigene Methode auszulagern
Ja, das hab ich auch so gemacht, sonst ist es unübersichtlich.

Frage am Rande, wie kann man in einer eigenen procedure oder function einen SaveDialog erstellen?
Er meckert immer über den Parameter self,
SpeicherDialog := TSaveDialog.Create(self); .
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

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

AW: Abfragemenü

  Alt 20. Apr 2011, 11:41
Warum willst du ihn selber erstellen? Zieh die Komponente auf das Formular und rufe ihn auf.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

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

AW: Abfragemenü

  Alt 20. Apr 2011, 11:50
Er meckert immer über den Parameter self,
Tja, clever wäre es, wenn du uns jetzt noch die Fehlermeldung mitteilen würdest.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Antwort Antwort

Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 15:33 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz