AGB  ·  Datenschutz  ·  Impressum  







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

Merkwürdiger Effekt bei TLabel

Ein Thema von Willie1 · begonnen am 29. Apr 2020 · letzter Beitrag vom 4. Mai 2020
Antwort Antwort
Seite 3 von 4     123 4      
Willie1

Registriert seit: 28. Mai 2008
657 Beiträge
 
Delphi 10.1 Berlin Starter
 
#21

AW: Merkwürdiger Effekt bei TLabel

  Alt 1. Mai 2020, 17:56
Genügt die PAS-Datei, wenn ich sie hier hochlade? Wi.
Gut hören kann ich schlecht, schlecht sehen kann ich gut - Ersteres stimmt nicht, das zweite schon.
  Mit Zitat antworten Zitat
Delphi.Narium

Registriert seit: 27. Nov 2017
2.490 Beiträge
 
Delphi 7 Professional
 
#22

AW: Merkwürdiger Effekt bei TLabel

  Alt 1. Mai 2020, 18:00
Erstmal ja. Damit kann man schon die Logik nachvollziehen und ggfls. Problemstellen identifizieren.
  Mit Zitat antworten Zitat
Willie1

Registriert seit: 28. Mai 2008
657 Beiträge
 
Delphi 10.1 Berlin Starter
 
#23

AW: Merkwürdiger Effekt bei TLabel

  Alt 1. Mai 2020, 18:20
Das ist es.
Angehängte Dateien
Dateityp: pas Kniffel_h.pas (41,6 KB, 9x aufgerufen)
Gut hören kann ich schlecht, schlecht sehen kann ich gut - Ersteres stimmt nicht, das zweite schon.
  Mit Zitat antworten Zitat
Delphi.Narium

Registriert seit: 27. Nov 2017
2.490 Beiträge
 
Delphi 7 Professional
 
#24

AW: Merkwürdiger Effekt bei TLabel

  Alt 1. Mai 2020, 18:46
Delphi-Quellcode:
procedure TMainForm.Wuerfel_zeigen(Wue: TWuerfelPkt);
var
  i: Byte;
  Wuerfel: TDice;
  Lbl: TLabel;
begin
  for i:=1 to 5 do begin
    Wuerfel:=TDice(FindComponent('Wuerfel'+IntToStr(i)));
    Wuerfel.Value:=Wue[i];
    // --------------------------------------------
    Lbl:=TLabel(FindComponent('Label'+IntToStr(i))); // <-- Da kommt die Ziffer her!!!
    Lbl.Caption:=IntToStr(Wuerfel.Value)
    // --------------------------------------------
  end
end; {TMainForm.Wuerfel_zeigen}

procedure TMainForm.btnFertigWuerfelClick(Sender: TObject);
...
{$ENDIF}
    for i:=1 to 5 do begin
      Box:=TCheckBox(FindComponent('NeuBox'+IntToStr(i)));
      if Wahl < NeuWuerfeln then begin //3
        if Box.Checked then begin
          Wuerfel:=TDice(FindComponent('Wuerfel'+IntToStr(i)));
          Wuerfel.Roll;
          WuerfelPkt[i]:=Wuerfel.Value;
          // --------------------------------------------
          Lbl:=TLabel(FindComponent('Label'+IntToStr(i))); // <-- Oder eventuell auch von hier!!!
          Lbl.Caption:=IntToStr(Wuerfel.Value)
          // --------------------------------------------
        end;
        Box.Checked:=false;
        Inc(Summe,WuerfelPkt[i])
      end
    end;
    Inc(Wahl);
...
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.453 Beiträge
 
Delphi 12 Athens
 
#25

AW: Merkwürdiger Effekt bei TLabel

  Alt 1. Mai 2020, 19:34
Ich denke, Delphi.Narium hat das richtig erkannt. In dem Form gibt es zunächst kein TLabel mit Namen 'Label1'. Ich vermute, das muss FindComponent('lblW'+IntToStr(i)) heißen.
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Willie1

Registriert seit: 28. Mai 2008
657 Beiträge
 
Delphi 10.1 Berlin Starter
 
#26

AW: Merkwürdiger Effekt bei TLabel

  Alt 3. Mai 2020, 18:20
Hallo Delphi-arium, du hast den Fehler gefunden. Ich habe die Zeilen wegkomentiert und die ominöse 1 2 … erscheinen nicht mehr. Diese Zeilen hatte ich nur zu Testzwecken eingefügt und sind überflüssig.
ABER: Es gibt keine Deklaration für Label1 (auch nicht dynamisch) und wenn ich Label1 in xyz umbenannte, kam immer noch 1.
Delphi-Quellcode:
    Lbl:=TLabel(FindComponent('Label'+IntToStr(i)));
    Lbl.Caption:=IntToStr(Wuerfel.Value)
FRAGE: wenn es Label1 nicht gibt, was passiert in Zeile 2, wenn FindKomponent nichts findet?

Bei der geringen Komplexität vom Kniffelspiel kann ich behaupten, dass das Spiel inzwischen fehlerfrei läuft.

Aber Ok - ich habe das Spiel mit Kindern, 6 u. 8 Jahre alt gespielt. Sie kamen sofort damit zurecht, fanden es am Anfang gut aber verloren schnell das Interesse.
Es ist wohl besser, wenn ich das Programm in die Ecke packe und nicht veröffentliche.

Danke für eure Hilfe und
Gruß Willie.
  Mit Zitat antworten Zitat
Hobbycoder

Registriert seit: 22. Feb 2017
955 Beiträge
 
#27

AW: Merkwürdiger Effekt bei TLabel

  Alt 3. Mai 2020, 18:28
Delphi-Quellcode:
    Lbl:=TLabel(FindComponent('Label'+IntToStr(i)));
    Lbl.Caption:=IntToStr(Wuerfel.Value)
FRAGE: wenn es Label1 nicht gibt, was passiert in Zeile 2, wenn FindKomponent nichts findet?
Ich würde mal behaupten wenn FindComponent die Komponente nicht findet, gibt's ein nil zurück, und in der zweite Zeile wird dann eine Access Violation regnen.
Prüfe bei solchen Zuweisungen IMMER ob deine Variable überhaupt einen Inhalt hat. Letztlich ist Lbl in dem Fall nur ein Zeiger, und wenn der auf NIL zeigt, gibt's halt nix was man damit machen kann.

[Edit]Hab's grad mal ausprobiert. Aber es führt nicht zu einer Exception. Wahrscheinlich wird irgendwo in den Delphi-Bibliotheken auf <>nil geprüft. In dem Fall passiert nichts.[/Edit]
Gruß Hobbycoder
Alle sagten: "Das geht nicht.". Dann kam einer, der wusste das nicht, und hat's einfach gemacht.

Geändert von Hobbycoder ( 3. Mai 2020 um 18:37 Uhr)
  Mit Zitat antworten Zitat
Willie1

Registriert seit: 28. Mai 2008
657 Beiträge
 
Delphi 10.1 Berlin Starter
 
#28

AW: Merkwürdiger Effekt bei TLabel

  Alt 3. Mai 2020, 18:48
Ja, habe es auch ausprobiert, es liefert nil zurück und in der 2. Zeile passiert nichts. Keine Exception. Sonst wäre mir mein Fehler natürlich sofort auf gefallen.
W.
Gut hören kann ich schlecht, schlecht sehen kann ich gut - Ersteres stimmt nicht, das zweite schon.
  Mit Zitat antworten Zitat
Medium

Registriert seit: 23. Jan 2008
3.686 Beiträge
 
Delphi 2007 Enterprise
 
#29

AW: Merkwürdiger Effekt bei TLabel

  Alt 3. Mai 2020, 19:48
Achtung! Wenn Lbl eine lokale Variable ist, wird sie NICHT mit nil initialisiert! Das sollte der Compiler auch mit einer Warnung anmeckern!

Daher steht dann in Lbl "irgendwas" drin, und der Zugriff auf Lbl.Caption verändert "irgendwas", was überall in dem Programm sein könnte. Ganz dicker böser Schnitzer, und 2 wichtige Regeln missachtet: 1) Warnungen sind nicht zur bloßen Kenntnisnahme da, 2) Rückgabewerte stets überprüfen. Dass nil bei Nichtfund zurückgegeben wird, steht sogar in der Hilfe zu FindComponent(). Also sollte man das auch beachten.
"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
Benutzerbild von Gausi
Gausi

Registriert seit: 17. Jul 2005
880 Beiträge
 
Delphi 11 Alexandria
 
#30

AW: Merkwürdiger Effekt bei TLabel

  Alt 3. Mai 2020, 20:59
Da muss ich mich jetzt aber auch mal einklinken. Wenn FindComponent Nil zurückliefert, wenn die Komponente nicht gefunden ist, dann ist Lbl ja klar definiert. Warum knallt das denn nicht, wenn man auf die Caption von "Nil" zugreift?

Delphi-Quellcode:
    
Lbl := TLabel(Nil);
// Lbl := Nil funktioniert auch
Lbl.Caption:='wuppdi';
Showmessage(Lbl.Caption);
Die Message ist leer, aber warum läuft das ohne Zugriffsverletzung durch?
The angels have the phone box.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 3 von 4     123 4      


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 09:49 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