Delphi-PRAXiS
Seite 2 von 2     12   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Lazarus (IDE) (https://www.delphipraxis.net/81-lazarus-ide/)
-   -   Label aus anderer Unit verwenden (https://www.delphipraxis.net/180008-label-aus-anderer-unit-verwenden.html)

Fractal 16. Apr 2014 20:07

AW: Label aus anderer Unit verwenden
 
Zitat:

Zitat von Popov (Beitrag 1255888)
Ich weiß zwar nicht wie das intern aussieht, aber "Ergebnisse.Zahl.Caption := ..." könnte die Lösung sein.

Damit hats funktioniert, danke :).

(Um den Counter wieder auf 0 zu setzen):
Code:
procedure TErgebnisse.FormClose(Sender: TObject; var CloseAction: TCloseAction);
begin
  n := StrToIntDef(Ergebnisse.Zahl.caption, 0);
  n := 0;
  Ergebnisse.Zahl.caption := IntToStr(n);
end;

Popov 16. Apr 2014 20:18

AW: Label aus anderer Unit verwenden
 
Delphi-Quellcode:
procedure TErgebnisse.FormClose(Sender: TObject; var CloseAction: TCloseAction);
begin
  Ergebnisse.Zahl.caption := IntToStr(0);
end;
Würde auch gehen.

Delphi-Quellcode:
procedure TErgebnisse.FormClose(Sender: TObject; var CloseAction: TCloseAction);
begin
  Ergebnisse.Zahl.caption := '0';
end;
Auch.

Delphi-Quellcode:
procedure TErgebnisse.FormClose(Sender: TObject; var CloseAction: TCloseAction);
begin
  Ergebnisse.Zahl.caption := '';
end;
Würde aber auch gehen, wegen
Delphi-Quellcode:
StrToIntDef(n, 0);

himitsu 16. Apr 2014 20:41

AW: Label aus anderer Unit verwenden
 
oder
Delphi-Quellcode:
procedure TErgebnisse.FormClose(Sender: TObject; var CloseAction: TCloseAction);
begin
  //n := StrToIntDef(Ergebnisse.Zahl.caption, 0);
  n := 0;
  Ergebnisse.Zahl.caption := IntToStr(n);
end;
Der Compiler hat aber bestimmt auch erwähnt, daß
Delphi-Quellcode:
n
nicht verwendet wurde. (der Wert der ersten Zuweisung)
Vorallem, wozu sollte der alte Wert erst ausgelesen werden, wenn dann sowieso ein neuer/anderer Wert zugewiesen wird?

ABER, WO um Himmels Willen ist
Delphi-Quellcode:
n
deklariert? :shock:

bcvs 17. Apr 2014 07:16

AW: Label aus anderer Unit verwenden
 
Ich würde das sowieso etwas anders angehen:

Merke dir eine Grundregel: Visuelle Controls dienen nur zur Anzeige, nicht zum Speichern von Daten. In deinem Fall wird die aktuelle Anzahll der richtigen Antworten aber nur als Caption im Label Zahl gespeichert.

Überlege dir eine geeignete Datenstruktur für dein Quiz z.B.

Delphi-Quellcode:
var
QuizErgebnisse = record
  //.. ganz viele nützliche Felder
  AnzahlRichtig : integer;
end;
Dieser Record muss natürlich beim Programmstart oder vor einem neuen Spiel sinnvoll initialisiert werden.

Dein Form TErgebnisse erweiterst du um eine Methode, die die Anzahl derRichtigen Fragen entgegennimmt und irgendwie darstellt. Dabei kannst du dir auch die vielen einzelnen übereinanderliegenden Labels sparen:

Delphi-Quellcode:
procedure TErgebnisse.ShowErgebnis(AnzahlRichtig:integer);
begin
  Label.Caption:='Du hast '+IntToStr(AnzahlRichtig)+' / 10 Fragen richtig beantwortet!';
end;

In TFrage steht dann nur:

Delphi-Quellcode:
procedure TFrage1.SpeedButton2Click(Sender : TObject);
begin
  inc(QuizErgebnisse.AnzahlRichtig);
  Ergebnisse.ShowErgebnis(QuizErgebnisse.AnzahlRichtig);
end;
TFrage1 muss jetzt gar nicht wissen, wie TErgebnisse das Ergebnis anzeigt. Wenn du dafür später mal ein ganz anderes Control als ein Label nehmen wilst, brauchst du nur TErgebnisse.ShowErgebnis zu ändern.


Alle Zeitangaben in WEZ +1. Es ist jetzt 19:29 Uhr.
Seite 2 von 2     12   

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