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
Benutzerbild von himitsu
himitsu

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

AW: Label aus anderer Unit verwenden

  Alt 16. Apr 2014, 19:31
Dein Richtig1.Show; heißt in Wirklichkeit Self.Richtig1.Show; . (Delphi macht das Self innerhalb von Methoden automatisch implizit davor)

Also, du gehst da über die Instanz des Fensters auf die Komponenten, welche darin liegen, bzw. eigentlich auf die Felder (Variablen), welche publisched in der Klasse deklariert sind.
Will man auf eine andere Form, dann braucht man eine Variable, in welcher die Instanz zu dieser Form abgelegt ist und kann daber dann auch auf deren Eigenschaften zugreifen.


(Und ja, ihr seht schon, dass ich >9000 Units hab, aber wills für den Anfang erstmal so probieren.)
Dann simmt (A) mit dem Design deiner Anwendung grundsätzlich etwas nicht. (ich wette viele der Fenster sind im Prinzip "gleich" aufgebaut und unterscheiden sich nur im "Inhalt" weniger Dinge)
und (B) solltest du gerade dann deine Units, Klassen, Variablen und vorallem Komponenten aussagefähig benennen damit man schon am Namen erkennt um was es sich handelt.
Ein Therapeut entspricht 1024 Gigapeut.
  Mit Zitat antworten Zitat
Popov
(Gast)

n/a Beiträge
 
#2

AW: Label aus anderer Unit verwenden

  Alt 16. Apr 2014, 19:43
@Fractal

Also der Code ist jetzt richtig, womit wir zu dem kommen was evtl. Sir Rufo meinte: was ist seine Intention (oder so in der Art)? Oder anders gefragt - hat die Funktion Zugriff auf Label Zahl?

Laut Bild ist es die "Unit3", und das Fenster hat den Namen "Ergebnisse", Klasse "TErgebnisse". Die Prozedur mit der Rechnung ist in der Klasse "TFrage1". Daraus folgt - das Label "Zahl" ist auf dem Formular "Ergebnisse" und wird aus "TFrage1.SpeedButton2Click" aufgerufen.

Ich weiß zwar nicht wie das intern aussieht, aber "Ergebnisse.Zahl.Caption := ..." könnte die Lösung sein.
  Mit Zitat antworten Zitat
Fractal

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

AW: Label aus anderer Unit verwenden

  Alt 16. Apr 2014, 20:07
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;
  Mit Zitat antworten Zitat
Popov
(Gast)

n/a Beiträge
 
#4

AW: Label aus anderer Unit verwenden

  Alt 16. Apr 2014, 20:18
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 StrToIntDef(n, 0);
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

AW: Label aus anderer Unit verwenden

  Alt 16. Apr 2014, 20:41
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ß 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 n deklariert?
Ein Therapeut entspricht 1024 Gigapeut.
  Mit Zitat antworten Zitat
bcvs

Registriert seit: 16. Jun 2011
730 Beiträge
 
Delphi 12 Athens
 
#6

AW: Label aus anderer Unit verwenden

  Alt 17. Apr 2014, 07:16
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.
  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 05:06 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