AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

Label aus anderer Unit verwenden

Ein Thema von Fractal · begonnen am 16. Apr 2014 · letzter Beitrag vom 17. Apr 2014
Antwort Antwort
Fractal

Registriert seit: 16. Apr 2014
9 Beiträge
 
#1

Label aus anderer Unit verwenden

  Alt 16. Apr 2014, 17:18
Servus,

bin gerade dabei mir ein kleines Quiz zu erstellen und hänge gerade bei der Anzeige der Ergebnissen.

Ich hab ne Unit wo die Frage angezeigt wird mit jeweils vier Buttons, siehe hier.
Nach zehn Fragen werden mir die Ergebnisse angezeigt.

Wenn ich jetzt auf bspw. den zweiten Button klick (Welcher die richtige Antwort hat), soll sich das Label, das anfangs die Caption "0" hat,
um jeweils 1 erhöhen. Sprich, wenn ich sechs mal auf den richtigen Button geklickt hab (Von zehn Fragen), soll statt der Null eben ne Sechs stehen.

Ich hab's bereits mal so ausprobiert:
Code:
procedure TFrage2.SpeedButton4Click(Sender: TObject);
begin
  n:=strtoint(Zahl.caption);
  n:=n+1;
  Zahl.caption:=inttostr(n);
Zahl ist das Label mit der Caption "0" auf der Ergebnisseite. Die Variable n: Integer; ist definiert und ich hab ebenfalls unter implementation
uses Unitx angegeben.. jedoch bekomm ich immer die Fehlermeldung, dass "Zahl" nicht gefunden wird. Wenn ich das Label Zahl in der selben Unit erstell,
wo sich die Frage befindet, erhöht sich das Ganze von 0 auf 1.

Gibts irgendwie ne Möglichkeit das Problem zu beheben oder gänzlich eine andere Methode? Hab mir diverse andere Threads bereits angeschaut (Buttonclick-Zähler),
jedoch kapier ich nicht ganz wie ich jene Zeilen bei mir einfügen soll, bzw. gehts bei mir ja darum, dass Label aus ner anderen Unit zu verwenden.

Grüße
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#2

AW: Label aus anderer Unit verwenden

  Alt 16. Apr 2014, 17:24
Du musst dich dem Probelm andersherum nähern.

Also nicht, wie bekomme ich etwas in das Label rein, sondern wie kommt das Label (ok, eher die Form mit dem Label) an die Information, was es anzeigen soll.
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
Popov
(Gast)

n/a Beiträge
 
#3

AW: Label aus anderer Unit verwenden

  Alt 16. Apr 2014, 18:32
Nun, das Caption von Label enthält keine Zahl, sondern einen String. Natürlich kann man eine Zahl auch als String speichern und andersherum. Dabei muss man natürlich immer aufpassen, dass in dem String mit der Zahl immer nur Zahlen-Buchstaben vorkommen.

Betrachten wir mal dein Code
Delphi-Quellcode:
procedure TFrage2.SpeedButton4Click(Sender: TObject);
begin
  n:=strtoint(Zahl.caption);
  n:=n+1;
  Zahl.caption:=inttostr(n);
StrToInt ist schon die richtige Funktion wenn man ganz sicher weiß, dass der String eine Zahl enthält. Ansonsten kann es zu Konvertierungsfehlern kommen. Unter Umständen ist dafür die Funktion StrToIntDef angebrachter. Es gibt dann keine Fehlermeldung, dafür wird ein Ersatzwert genommen.

Auch das n ist bei dir anscheinend global, obwohl du es zum Konvertieren nur lokal brauchst.
Delphi-Quellcode:
procedure TFrage2.SpeedButton4Click(Sender: TObject);
var
  n: Integer;
begin
  n := StrToIntDef(Zahl.caption, 0);
  n := n + 1;
  Zahl.caption := IntToStr(n);
Vor allem beim ersten Click, wenn Label.caption z.B. leer ist, wird der leere Caption String abgefangen und als Null interpretiert.

Willst du z.B. wissen ob es da einen Fehler gibt, kannst du in StrToIntDef einen Negativwert geben, z. B. so n := StrToIntDef(Zahl.caption, -99); . Schon kannst du erkennen ob es einen Konvertierungsfehler gab.

Als Anfänger (später eher nicht, aber als Anfänger finde ich das noch ok) könntest du den Tag von Label für die Zählung missbrauchen. Die Eigenschaft Tag hat keine sonstige Bedeutung, d. h. man kann damit machen was man will. Du könntest es zum zählen nutzen.
Delphi-Quellcode:
procedure TFrage2.SpeedButton4Click(Sender: TObject);
begin
  Zahl.Tag := Zahl.Tag + 1;
  Zahl.caption := IntToStr(Zahl.Tag);
  Mit Zitat antworten Zitat
Benutzerbild von Helmi
Helmi

Registriert seit: 29. Dez 2003
Ort: Erding, Republik Bayern
3.344 Beiträge
 
Delphi XE2 Professional
 
#4

AW: Label aus anderer Unit verwenden

  Alt 16. Apr 2014, 18:37
Willst du z.B. wissen ob es da einen Fehler gibt, kannst du in StrToIntDef einen Negativwert geben, z. B. so n := StrToIntDef(Zahl.caption, -99); . Schon kannst du erkennen ob es einen Konvertierungsfehler gab.
Dafür würd ich eher TryStrToInt verwenden
Delphi-Quellcode:
If TryStrToInt(Zahl.Caption, n) then
  //String konnte konvertiert werden
  n := n + 1; // oder inc(n)
mfg
Helmi

>> Theorie ist Wissen, dass nicht funktioniert - Praxis ist, wenn alles funktioniert und keiner weiss warum! <<
  Mit Zitat antworten Zitat
Popov
(Gast)

n/a Beiträge
 
#5

AW: Label aus anderer Unit verwenden

  Alt 16. Apr 2014, 18:55
Besser schon, aber der Tipp richtet sich an einen Anfänger der noch nicht alle Funktionen kennt (und kennen muss) und vor allem eine simple Möglichkeit den Fehler so schnell zu finden. Denn er nutzt ja einen Label und kein Edit. Ist die Fehlerquelle erst einmal lokalisiert, wird sie beseitigt und kommt nicht erneut vor. Somit ist eine permanente Überprüfung unnötig.

Arbeitet man mit Edit, so dass der Nutzer fehlerhafte Zahlen eingeben kann, kommt man um eine korrekte Überprüfung, wie z. B. mit deiner Funktion, nicht herum.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

AW: Label aus anderer Unit verwenden

  Alt 16. Apr 2014, 18:58
Oder man geht davon dau, dass in dem Label immer eine "Zahl" steht und verwendet StrToInt.
Im Fehlerfall liefert das dann automatisch eine entsprechende Fehlermeldung und man sieht daß dort was nicht stimmt.

Bei StrToIntDef würde der Fehler ungehört einfach untergehen ... das ist dann wie ein try ... except {nix} end;
Ein Therapeut entspricht 1024 Gigapeut.
  Mit Zitat antworten Zitat
Antwort Antwort

Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 18:01 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-2025 by Thomas Breitkreuz