![]() |
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:
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?
if RichEdit1.Modified then Application.MessageBox('Wollen sie das geänderte Dokument speichern?', 'Frage', 36); if IDYES then SaveDialog1.Execute else Close;
Ich hoffe mir kann jemand weiterhelfen :) |
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; |
Re: Problem mit Boolean =(
Danke für die rasche Antwort zu dieser Späten stunde :)
Nun bekomme ich disen Fehler: Zitat:
|
Re: Problem mit Boolean =(
Nimm die 0 raus, mein Fehler.
Application.MessageBox(0, 'Wollen sie das geänderte Dokument speichern?', 'Frage', 36) |
Re: Problem mit Boolean =(
Danke dir, nun funktioniert es :-D :cheer:
|
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 :?: |
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. |
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:
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.
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; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 12:40 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 by Thomas Breitkreuz