AGB  ·  Datenschutz  ·  Impressum  







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

FormCreate(Sender); - undefinierter Bezeichner?

Ein Thema von AlexII · begonnen am 27. Sep 2008 · letzter Beitrag vom 28. Sep 2008
Antwort Antwort
Seite 2 von 3     12 3      
AlexII

Registriert seit: 28. Apr 2008
1.717 Beiträge
 
FreePascal / Lazarus
 
#11

Re: FormCreate(Sender); - undefinierter Bezeichner?

  Alt 27. Sep 2008, 22:03
Oh man... da verstehe ich nur Bahnhof. Ich bin Anfänger und hab diesen Code aus diesem Forum geholt, allerdings schon sehr verändert.
Wer die Frage nach dem neuen Spiel wahrscheinlich in den OnClick der Buttons legen.
  Mit Zitat antworten Zitat
AlexII

Registriert seit: 28. Apr 2008
1.717 Beiträge
 
FreePascal / Lazarus
 
#12

Re: FormCreate(Sender); - undefinierter Bezeichner?

  Alt 27. Sep 2008, 22:17
Ok Jungs ich hab's anders gemacht und sehr sauber

Hab folgendes geändert:

Delphi-Quellcode:
procedure TForm1.ShowResults;
begin
  ShowMessage('Das Quiz ist vorbei.'#13#10'Richtig: '+IntToStr(FiCountCorrect)+#13#10'Falsch: '+IntToStr(FiCountError));
  FiCountCorrect := 0;
  FiCountError := 0;
  FiCountQuestion := 0;
  FiCountTries := 2;
  if Application.MessageBox('Neues Spiel anfangen?','Frage',36) = 7 then Close;
  NextQuestion;
end;
Ist doch wunderbar, oder?

Danke für die Hilfe.
  Mit Zitat antworten Zitat
Prototypjack

Registriert seit: 2. Feb 2003
611 Beiträge
 
Delphi 2009 Professional
 
#13

Re: FormCreate(Sender); - undefinierter Bezeichner?

  Alt 27. Sep 2008, 22:26
Moin,

Hast du schon einmal ein neues Spiel gestartet, denn ich bezweifle, dass das funktioniert. Du rufst Close; auf. Damit schließt du die Form (und wenn es die HauptForm = MainForm ist, dann damit auch die komplette Applikation).

Grüße,
Max

Edit: OK, mein Fehler. 7 steht für "Nein" (deshalb sind Konstanten dein Freund ). Jetzt ist es wohl etwas sauberer, dennoch könnte man es eleganter lösen
Max
„If you have any great suggestions, feel free to mail me, and I'll probably feel free to ignore you.“ . Linus Torvalds
  Mit Zitat antworten Zitat
AlexII

Registriert seit: 28. Apr 2008
1.717 Beiträge
 
FreePascal / Lazarus
 
#14

Re: FormCreate(Sender); - undefinierter Bezeichner?

  Alt 27. Sep 2008, 22:29
Ne wieso, Close; wird aufgerufen wenn man auf Nein klickt, das Spiel bzw. das Programm wird somit geschloßen. Wenn User auf Ja klickt gehts zu NextQuestion.
  Mit Zitat antworten Zitat
AlexII

Registriert seit: 28. Apr 2008
1.717 Beiträge
 
FreePascal / Lazarus
 
#15

Re: FormCreate(Sender); - undefinierter Bezeichner?

  Alt 27. Sep 2008, 22:31
Zitat von Prototypjack:
Edit: OK, mein Fehler. 7 steht für "Nein" (deshalb sind Konstanten dein Freund ). Jetzt ist es wohl etwas sauberer, dennoch könnte man es eleganter lösen
Genau

Und wie sieht es eleganter aus?
  Mit Zitat antworten Zitat
Medium

Registriert seit: 23. Jan 2008
3.679 Beiträge
 
Delphi 2007 Enterprise
 
#16

Re: FormCreate(Sender); - undefinierter Bezeichner?

  Alt 28. Sep 2008, 07:25
Man könnte z.B. statt der nichtssagenden Zahl 7 die dafür vorgesehene Konstante nutzen. Da hast du es dir allerdings unbewusst etwas schwieriger gemacht, weil du Application.MessageBox() benutzt, welches in sich die MessageBox-Funktion der user32.dll aufruft, und die Rückgabewerte stehen, wie bei Win-API Dingen üblich, nicht direkt so in der Delphi-Hilfe, sondern müssten im msdn nachgeschlagen werden. In diesem Fall gibt es die Konstante "IDNO" welche für diesen Fall gedacht ist (und oh wunder, 7 ist).
Die VCL-Variante heisst MessageDlg() und findet sich in der Unit Dialogs.pas. Auch dort gibt es einen Enum-Type der die möglichen Rückgabewerte bezeichnet. Da dort im Grunde nur ein neues Formular erzeugt und modal angezeigt wird, gelten hier die ModalResult Konstanten, im Falle eines Klicks auf [Nein] wäre dies dann "mrNo". DAS wäre der konsequente Weg in einer VCL Anwendung.

Auch ist es etwas unschön, dass du noch Code hinter dem möglichen Close() hast. Den solltest du in einen else-Zweig der Abfrage davor packen, damit besser ersichtlich ist, dass das nur dann noch ausgeführt wird, wenn Close() nicht statt fand. Funktional ändert das zwar nichts, aber es ging ja um Eleganz. Es gehört generell zum "guten Ton" Code hinter einem Close, Exit, Continue usw. in einen alternativen Konditional-Zweig zu packen, da man sich sonst wieder der verpönten "Goto-Mentalität" annähert, und es einfach den Lesefluss erleichtert wenn man den Code durchgeht (besonders wenn man nicht selbst der Autor ist, oder man sich den Code nach 3 Jahren mal wieder anschaut).
"When one person suffers from a delusion, it is called insanity. When a million people suffer from a delusion, it is called religion." (Richard Dawkins)
  Mit Zitat antworten Zitat
28. Sep 2008, 07:39
Dieses Thema wurde von "Matze" von "Programmieren allgemein" nach "Object-Pascal / Delphi-Language" verschoben.
Delphi-Frage
hamburcher
(Gast)

n/a Beiträge
 
#18

Re: FormCreate(Sender); - undefinierter Bezeichner?

  Alt 28. Sep 2008, 08:42
Statt
if Application.MessageBox('Neues Spiel anfangen?','Frage',36) = 7 then Close; besser
if MessageBox(Handle,'Neues Spiel anfangen?','Frage',mb_YesNo or mb_IconQuestion or mb_DefButton1) = id_NO then Close; Statt "Handle" kannst Du auch eine Null ("0") schreiben.

Klick mal in Delphi (nicht hier) auf das Wort "MessageBox" und drück dann [F1]

Edith meint, daß "Medium" oben mit erhobenem Zeigefinger nur mehrwertlos herumschwafelt
  Mit Zitat antworten Zitat
AlexII

Registriert seit: 28. Apr 2008
1.717 Beiträge
 
FreePascal / Lazarus
 
#19

Re: FormCreate(Sender); - undefinierter Bezeichner?

  Alt 28. Sep 2008, 09:40
Na wenn ich fertig bin, dann könnt ihr vllt ein Auge drüber werfen und gucken was sich besser machen lässt.
  Mit Zitat antworten Zitat
Benutzerbild von xZise
xZise

Registriert seit: 3. Mär 2006
Ort: Waldbronn
4.303 Beiträge
 
Delphi 2009 Professional
 
#20

Re: FormCreate(Sender); - undefinierter Bezeichner?

  Alt 28. Sep 2008, 10:16
Hallo AlexII,

Außerdem hast du bei „procedure TForm1.ShowResults;“ das Problem, dass du da was miteinander vermischst.

Ich würde einfach noch eine Prozedur anlegen: „StartGame“ die in „FormCreate“ aufgerufen wird, und in ShowResults, sofern nicht Nein angeklickt würde. Das wäre imho eleganter
Delphi-Quellcode:
procedure TForm1.ShowResults;
begin
  ShowMessage('Das Quiz ist vorbei.'#13#10'Richtig: '+IntToStr(FiCountCorrect)+#13#10'Falsch: '+IntToStr(FiCountError));
  if Application.MessageBox('Neues Spiel anfangen?','Frage',MB_OK*or MB_ICONQUESTION) = ID_YES then
    StartGame
  else
    Close;
end;
MfG
xZise
Fabian
Eigentlich hat MS Windows ab Vista den Hang zur Selbstzerstörung abgewöhnt – mkinzler
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 3     12 3      


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 03:04 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