AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Problem mit Boolean =(

Ein Thema von SLDZ · begonnen am 30. Mai 2009 · letzter Beitrag vom 30. Mai 2009
Antwort Antwort
SLDZ

Registriert seit: 3. Jan 2008
6 Beiträge
 
Delphi 7 Enterprise
 
#1

Problem mit Boolean =(

  Alt 30. Mai 2009, 00:56
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):

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. Funktioniert das so einfach oder muss ich dazu mehr als einige IF Abfragen einbringen?

Ich hoffe mir kann jemand weiterhelfen
Simon
  Mit Zitat antworten Zitat
Benutzerbild von freak4fun
freak4fun

Registriert seit: 22. Sep 2004
Ort: Hannover
1.807 Beiträge
 
Delphi 10.2 Tokyo Starter
 
#2

Re: Problem mit Boolean =(

  Alt 30. Mai 2009, 01:04
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;
Christian
IT: Schließen Sie bitte das Fenster. User: Die Tür auch?
i++; // zaehler i um 1 erhoehen
  Mit Zitat antworten Zitat
SLDZ

Registriert seit: 3. Jan 2008
6 Beiträge
 
Delphi 7 Enterprise
 
#3

Re: Problem mit Boolean =(

  Alt 30. Mai 2009, 01:09
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
Simon
  Mit Zitat antworten Zitat
Benutzerbild von freak4fun
freak4fun

Registriert seit: 22. Sep 2004
Ort: Hannover
1.807 Beiträge
 
Delphi 10.2 Tokyo Starter
 
#4

Re: Problem mit Boolean =(

  Alt 30. Mai 2009, 01:13
Nimm die 0 raus, mein Fehler.
Application.MessageBox(0, 'Wollen sie das geänderte Dokument speichern?', 'Frage', 36)
Christian
IT: Schließen Sie bitte das Fenster. User: Die Tür auch?
i++; // zaehler i um 1 erhoehen
  Mit Zitat antworten Zitat
SLDZ

Registriert seit: 3. Jan 2008
6 Beiträge
 
Delphi 7 Enterprise
 
#5

Re: Problem mit Boolean =(

  Alt 30. Mai 2009, 01:16
Danke dir, nun funktioniert es
Simon
  Mit Zitat antworten Zitat
SLDZ

Registriert seit: 3. Jan 2008
6 Beiträge
 
Delphi 7 Enterprise
 
#6

Re: Problem mit Boolean =(

  Alt 30. Mai 2009, 01:24
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 ) nicht. Wie kann ich das nun mit einbinden
Simon
  Mit Zitat antworten Zitat
Benutzerbild von freak4fun
freak4fun

Registriert seit: 22. Sep 2004
Ort: Hannover
1.807 Beiträge
 
Delphi 10.2 Tokyo Starter
 
#7

Re: Problem mit Boolean =(

  Alt 30. Mai 2009, 01:30
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.
Christian
IT: Schließen Sie bitte das Fenster. User: Die Tür auch?
i++; // zaehler i um 1 erhoehen
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
9.351 Beiträge
 
Delphi 11 Alexandria
 
#8

Re: Problem mit Boolean =(

  Alt 30. Mai 2009, 02:13
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.
Sebastian Jänicke
Alle eigenen Projekte sind eingestellt, ebenso meine Homepage, Downloadlinks usw. im Forum bleiben aktiv!
  Mit Zitat antworten Zitat
Antwort Antwort


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 12:20 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