Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Problem mit Boolean =( (https://www.delphipraxis.net/134842-problem-mit-boolean-%3D.html)

SLDZ 30. Mai 2009 00:56


Problem mit Boolean =(
 
Guten Abend (Gute Nacht?),

ich bin schon seit einiger Zeit daran -nach einem Tutorial in diesem Forum- einen Texteditor für .rtf Dateien zu Programmieren (habe nicht viel Erfahrungen mit Delphi gesammelt, bin also noch ein ziemlicher Neuling :( )

Nun bin ich dabei eine Abfrage einzubauen, welche Überprüft, ob die Datei (Edit-Feld) geändert wurde, wenn ja dann soll eine Messagebox kommen welche Fragt ob man die Datei speichern will und wenn dies auch der Fall ist dann soll der SpeicherDialog kommen.

Das sieht bisher so aus (funktioniert aber noch nicht richtig):

Delphi-Quellcode:
if RichEdit1.Modified then Application.MessageBox('Wollen sie das geänderte Dokument speichern?', 'Frage', 36); if IDYES then SaveDialog1.Execute else Close;
Ich hab keine Ahnung wie ich diese ganzen IF Abfragen dort einbringen soll (da ich wie gesagt kaum Erfahrung mit Delphi gesammelt habe) damit nun das gewünschte Ergebnis dabei herauskommt. :wall: Funktioniert das so einfach oder muss ich dazu mehr als einige IF Abfragen einbringen?

Ich hoffe mir kann jemand weiterhelfen :)

freak4fun 30. Mai 2009 01:04

Re: Problem mit Boolean =(
 
Versuch es mal so:
Delphi-Quellcode:
if RichEdit1.Modified then
  if Application.MessageBox(0, 'Wollen sie das geänderte Dokument speichern?', 'Frage', 36) = ID_YES then
    SaveDialog1.Execute
  else
    Close;

SLDZ 30. Mai 2009 01:09

Re: Problem mit Boolean =(
 
Danke für die rasche Antwort zu dieser Späten stunde :)
Nun bekomme ich disen Fehler:

Zitat:

[Warnung] Mainfrm.pas(82): Konstante 0 wurde zu NIL konvertiert
Kann mir jemand erläutern was das genau bedeutet? Kann mir nix darunter vorstellen :oops:

freak4fun 30. Mai 2009 01:13

Re: Problem mit Boolean =(
 
Nimm die 0 raus, mein Fehler.
Application.MessageBox(0, 'Wollen sie das geänderte Dokument speichern?', 'Frage', 36)

SLDZ 30. Mai 2009 01:16

Re: Problem mit Boolean =(
 
Danke dir, nun funktioniert es :-D :cheer:

SLDZ 30. Mai 2009 01:24

Re: Problem mit Boolean =(
 
Entschuldigt bitte den Doppelpost aber ich hätte da noch eine Frage :?
Wenn ich nun auf den Beenden Button Klicke (nicht das rote X oben rechts) funktioniert es, wenn ich nun aber auf das rote X oben rechts klicke funktioniert es (logischer weiße :lol: ) nicht. Wie kann ich das nun mit einbinden :?:

freak4fun 30. Mai 2009 01:30

Re: Problem mit Boolean =(
 
Bitte halte dich an die regel: Eine Frage pro Thema. ;)

Du kannst den Code in das Ereignis FormCloseQuery (Form wählen, dann Ereignisse im Objektinspektor) des Formulars einfügen. Ich würde den Code aber in eine Methode schreiben, da du ihn mehrfach benutzt.

Es könnte dann so aussehen:
Delphi-Quellcode:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, ComCtrls;

type
  TForm1 = class(TForm)
    Button1: TButton;
    RichEdit1: TRichEdit;
    SaveDialog1: TSaveDialog;
    procedure Button1Click(Sender: TObject);
    procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean);
  private
    procedure SaveOnClose;
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
begin
  SaveOnClose;
end;

procedure TForm1.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
begin
  SaveOnClose
end;

procedure TForm1.SaveOnClose;
begin
  if RichEdit1.Modified then
    if Application.MessageBox('Wollen sie das geänderte Dokument speichern?', 'Frage', 36) = ID_YES then
      SaveDialog1.Execute
    else
      Close;
end;

end.

jaenicke 30. Mai 2009 02:13

Re: Problem mit Boolean =(
 
Nein, das ist so nicht ganz passend, denn einen solchen Speicherndialog kann man normalerweise auch abbrechen und kommt dann wieder ins Programm zurück. Das geht so nicht.

Zudem ist die 36 als Zahl statt der entsprechenden (lesbaren) Konstanten ganz übler Programmierstil...

So passt das besser:
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
begin
  Close; // Löst das Ereignis ja aus
end;

procedure TForm1.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
begin
  if RichEdit1.Modified then
    case Application.MessageBox('Wollen sie das geänderte Dokument speichern?',
      'Frage', MB_ICONQUESTION or MB_YESNOCANCEL) of
      IDYES:
        if SaveDialog1.Execute then
          ...
        else
          CanClose := False;
      IDCANCEL:
        CanClose := False;
    end;
end;
Auf diese Weise wird gefragt, ob gespeichert werden soll, und wenn man das bejaht, den Dialog aber abbricht, wird das Schließen abgebrochen. Ebenfalls wird abgebrochen, wenn man abbrechen drückt.


Alle Zeitangaben in WEZ +1. Es ist jetzt 07:11 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