[gelöst] MessageDlg: X ignorieren

Rund um die LCL und andere Komponenten
Antworten
catweasel
Beiträge: 230
Registriert: Di 17. Mär 2009, 10:51
OS, Lazarus, FPC: Win10 64Bit // Linux Mint 20.0 - (L 2.2.0 FPC 3.2.2)

[gelöst] MessageDlg: X ignorieren

Beitrag von catweasel »

Hallo zusammen

Ich habe hier ein kleines Problem mit dem MessageDlg.

Ein SynEdit-Feld soll geruckt werden, allerdings nur wenn da auch was drinsteht.
Dazu habe ich am Anfang eine Abfrage eingebaut die die Anzahl der Zeilen abfragt und wenn die Antwort 0 ist, soll nach
einer kurzen Mitteilung mit MessageDlg der Vorgang abgebrochen werden.

das habe ich erst so umgesetzt:

Code: Alles auswählen

// SynEdit leer?
if ToDoSynEdit.Lines.Count=0 then
     if MessageDlg('Drucken','Das Editfeld ist leer und wird daher nicht gedruckt!',mtError,[mbOK],0) = mrOK then exit;
// Drucken
if PrintDialog1.Execute then begin
[...]
end;

Das funktioniert auch soweit - WENN der User den OK-Button drückt und nicht das X um den Dialog zu schließen. In dem Fall geht das Programm zum nächsten Schritt und druckt.


Mein Workaround funktioniert zwar, sieht aber irgendwie verboten aus :oops:
Geht das nicht eleganter?

Code: Alles auswählen

// SynEdit leer?
if ToDoSynEdit.Lines.Count=0 then
      case MessageDlg('Drucken','Das Editfeld ist leer und wird daher nicht gedruckt!',mtError,[mbOK],0) of
        mrOK: exit;
        else  exit;
      end;
// Drucken
if PrintDialog1.Execute then begin
[...]
end;


Gruß
Michael
Zuletzt geändert von catweasel am Di 28. Aug 2018, 14:36, insgesamt 1-mal geändert.

wp_xyz
Beiträge: 4869
Registriert: Fr 8. Apr 2011, 09:01

Re: MessageDlg: X ignorieren

Beitrag von wp_xyz »

Warum fragst du den gedrückten Button überhaupt ab? Du willst doch nur eine Meldung anzeigen und dann vor dem Drucken rausgehen, egal was der Benutzer angeklickt hat.

Code: Alles auswählen

// SynEdit leer?
if ToDoSynEdit.Lines.Count=0 then begin
  MessageDlg('Drucken','Das Editfeld ist leer und wird daher nicht gedruckt!',mtError,[mbOK],0);
  exit;
end;
// Drucken
if PrintDialog1.Execute then begin
[...]
end;

catweasel
Beiträge: 230
Registriert: Di 17. Mär 2009, 10:51
OS, Lazarus, FPC: Win10 64Bit // Linux Mint 20.0 - (L 2.2.0 FPC 3.2.2)

Re: MessageDlg: X ignorieren

Beitrag von catweasel »

wp_xyz hat geschrieben:Warum fragst du den gedrückten Button überhaupt ab? Du willst doch nur eine Meldung anzeigen und dann vor dem Drucken rausgehen, egal was der Benutzer angeklickt hat.

Code: Alles auswählen

// SynEdit leer?
if ToDoSynEdit.Lines.Count=0 then begin
  MessageDlg('Drucken','Das Editfeld ist leer und wird daher nicht gedruckt!',mtError,[mbOK],0);
  exit;
end;
// Drucken
if PrintDialog1.Execute then begin
[...]
end;


Danke, das war einfach zu einfach bei der Hitze :oops:

Gruß
Michael

Benutzeravatar
m.fuchs
Lazarusforum e. V.
Beiträge: 2636
Registriert: Fr 22. Sep 2006, 19:32
OS, Lazarus, FPC: Winux (Lazarus 2.0.10, FPC 3.2.0)
CPU-Target: x86, x64, arm
Wohnort: Berlin
Kontaktdaten:

Re: MessageDlg: X ignorieren

Beitrag von m.fuchs »

Und noch besser ohne Exit:

Code: Alles auswählen

if ToDoSynEdit.Lines.Count=0 then
  MessageDlg('Drucken','Das Editfeld ist leer und wird daher nicht gedruckt!',mtError,[mbOK],0)
else begin
  // Drucken
  if PrintDialog1.Execute then begin
  [...]
  end;
end;
Software, Bibliotheken, Vorträge und mehr: https://www.ypa-software.de

wp_xyz
Beiträge: 4869
Registriert: Fr 8. Apr 2011, 09:01

Re: MessageDlg: X ignorieren

Beitrag von wp_xyz »

m.fuchs hat geschrieben:Und noch besser ohne Exit

In diesem Fall einverstanden mit dem "besser". Aber in vielen Fällen ist die konsequente Anwendung der "Goto"-ähnlichen Befehle "Exit", "Continue", "Break" die einzige Möglichkeit unübersichtliche Einrückungsstrukturen zu vermeiden. Zum einen wird die verfügbare Zeile mit jeder Einrückung kürzer, und zum anderen kann man den ELSE-Zweig nur noch schwer zuordnen.

Antworten