AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein Delphi Prüfung auf leere Zelle endet nicht nach Fund
Thema durchsuchen
Ansicht
Themen-Optionen

Prüfung auf leere Zelle endet nicht nach Fund

Ein Thema von MisterKnister · begonnen am 30. Apr 2012 · letzter Beitrag vom 19. Mai 2012
Antwort Antwort
MisterKnister

Registriert seit: 21. Feb 2012
7 Beiträge
 
#1

Prüfung auf leere Zelle endet nicht nach Fund

  Alt 30. Apr 2012, 15:12
Bitte nicht lachen
Ich habe ein variables StringGrid.
Bevor das Programm beendet wird, soll geprüft werden ob die komplette Tabelle ausgefüllt wurde.
Falls dies nicht der Fall ist, soll eine Nachfrage gestellt werden, ob man trotzdem das Programm verlassen will
oder eben nicht.
Dies funktioniert zwar soweit, allerdings wird die Nachfrage bei jeder leeren Zeile gestellt.
(Egal ob "JA" oder "NEIN" betätigt wird).
Da nach einer, ja eh schon die Bedingung erfüllt ist, sollte die Nachfrage also nur für eine/die erste leere Zelle gestellt werden.
Nun die Frage, welches triviale Kommando ich vergessen habe.
Vielen Dank im Voraus!


Delphi-Quellcode:
procedure TForm1.Close1Click(Sender: TObject);
var
i : Integer;
b : Integer;
begin
for i := 0 to StringGrid1.RowCount-1 do
  if StringGrid1.Rows[i].IndexOf('') <> -1 then
  b:= Application.MessageBox('Cells not filled completely. Do you want to leave anyways?','',4+32);
    if b = IDYES then Close;
end;

Geändert von mkinzler (30. Apr 2012 um 15:18 Uhr) Grund: Code-Tag durch DELPHI-Tag ersetzt
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu
Online

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.142 Beiträge
 
Delphi 12 Athens
 
#2

AW: Prüfung auf leere Zelle endet nicht nach Fund

  Alt 30. Apr 2012, 15:14
Close sagt nur der Form, daß sie sich schließen soll,
aber wo sagst du der Schleife, daß sie aufhören soll?


Delphi-Referenz durchsuchenBreak / Delphi-Referenz durchsuchenExit / Delphi-Referenz durchsuchenContinue


Wenn du mal etwas auf die Code-Einrückung achten würdest, dann würde dir auffallen, daß das Close garnicht in der Schleife drin ist. ( Tipp: Kennst du Begin-End-Blöcke? )
Und ich bin mir ganz sicher, daß der Compiler dir irgendwas vonwegen "nichtinitialisiertet Variable b" mitteilt.

Tipp 2: Ich würde dir den Debugger ns Herz legen, denn da siehst du auch, was (nicht) so aufgerufen wird, wie du es gern hättest.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests

Geändert von himitsu (30. Apr 2012 um 15:19 Uhr)
  Mit Zitat antworten Zitat
MisterKnister

Registriert seit: 21. Feb 2012
7 Beiträge
 
#3

AW: Prüfung auf leere Zelle endet nicht nach Fund

  Alt 18. Mai 2012, 19:40
Wenn auch spät, da ich es erst nicht hinbekommen hatte und noch an anderen Sachen gebastelt hatte, wollte ich mich nochmal melden.

Danke himitsu
die Break, exit, Constinue Befehle kannte ich vorher nicht.
Damit hat es nun geklappt, danke!

Hatte auch noch große Probleme damit, dass ich erst nicht verstanden hatte, dass trotz break der Count noch weitergeht und man dies extra berücksichtigen muss. Habe mich auch nicht getraut mich hier wegen des Problems zu melden.

Vor allem auch Danke für den Hinweis mit Close, daraufhin habe ich es dann mit Application.Terminate ersetzt und konnte es auch in FormClose einbauen.

Somit gelöst!


Code:
procedure TForm1.SafeClose;
var
b, c , z : Integer;
begin
 if go then begin
  if not sicher then begin
   c:= Application.MessageBox('Your progress has not been saved yet. Do you want to save it now?','',3+32);
     if c=7 then begin
     sicher:=true;
     end;
     if c=2 then begin
     exit;
     end;
     if c=6 then begin
     SaveProgress;
     end;
  end;

 if sicher then begin;
 for z := 1 to Liste.Count do
  if StringGrid1.Cells[2,z] = ('') then break;
     if z = Liste.Count+1 then begin
     Application.Terminate;
     end;
  b:= Application.MessageBox('Not all pictures were measured yet. Do you want to leave anyways?','',4+32);
     if b=6 then begin //YES
     Application.Terminate;
     end;
     if b=7 then begin //NO
     sicher:=false;
     showmessage('Picture '+IntToStr(z)+' has not been measured!');
     end;
  end;
 end
 else
 Application.Terminate;
end;
  Mit Zitat antworten Zitat
Benutzerbild von Dalai
Dalai

Registriert seit: 9. Apr 2006
1.680 Beiträge
 
Delphi 5 Professional
 
#4

AW: Prüfung auf leere Zelle endet nicht nach Fund

  Alt 18. Mai 2012, 20:19
Ähm, dein Code ist schlechter Stil. Es gibt nicht zum Spaß die Methode FormCloseQuery, die eine Variable CanClose zur Verfügung stellt, die man entsprechend setzen kann. Application.Terminate sollte man vermeiden, ein TForm.Close ist (nahezu) immer vorzuziehen!

Davon abgesehen spielt es bei FormCloseQuery keine Rolle, auf welche Weise das Programm beendet wird (Schließen-Knopf, Button zum Schließen, Alt+F4 usw), die Methode wird immer ausgeführt und erst wenn die ihr OK gibt - über die Variable CanClose, wird beendet.

Ach, noch etwas: warum verwendest du bei Application.MessageBox Zahlen statt der Konstanten? Damit weiß kein anderer was anzufangen (und muss erst nachschauen, welche Zahl was bedeutet) und du selbst in einigen Monaten auch nicht mehr.

MfG Dalai
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu
Online

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.142 Beiträge
 
Delphi 12 Athens
 
#5

AW: Prüfung auf leere Zelle endet nicht nach Fund

  Alt 19. Mai 2012, 01:30
Ach, noch etwas: warum verwendest du bei Application.MessageBox Zahlen statt der Konstanten? Damit weiß kein anderer was anzufangen (und muss erst nachschauen, welche Zahl was bedeutet) und du selbst in einigen Monaten auch nicht mehr.
Und das + ist dort auch noch fehl am Platz ... da gehört ein OR hin.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests

Geändert von himitsu (19. Mai 2012 um 01:35 Uhr)
  Mit Zitat antworten Zitat
Furtbichler
(Gast)

n/a Beiträge
 
#6

AW: Prüfung auf leere Zelle endet nicht nach Fund

  Alt 19. Mai 2012, 13:57
Und das + ist dort auch noch fehl am Platz ... da gehört ein OR hin.
Nee, also:
Entweder totalen Murks mit magic number und plus, oder...
richtig mit Konstanten und OR.

Aber so fast falsch oder ein bisserl richtig wäre inkonsequent.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu
Online

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.142 Beiträge
 
Delphi 12 Athens
 
#7

AW: Prüfung auf leere Zelle endet nicht nach Fund

  Alt 19. Mai 2012, 14:03
Ich meinte natürlich "zusammen mit den Konstanten"

Wenn schon MagicNumber, dann richtig zusammengerechnet (ohne + und or), damit man garnichts mehr erkennt.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Furtbichler
(Gast)

n/a Beiträge
 
#8

AW: Prüfung auf leere Zelle endet nicht nach Fund

  Alt 19. Mai 2012, 19:43
Wenn schon MagicNumber, dann richtig zusammengerechnet (ohne + und or), damit man garnichts mehr erkennt.
Yes! Das ist professionell!
  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 14:23 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