Delphi-PRAXiS
Seite 2 von 2     12   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Label[i] (https://www.delphipraxis.net/195873-label%5Bi%5D.html)

Zeref Darkmage 3. Apr 2018 10:55

AW: Label[i]
 
Vielen Dank für die ganzen Vorschläge ich werde mir sie merken und anwenden, danke :D


LG Zeref

himitsu 3. Apr 2018 11:23

AW: Label[i]
 
Delphi-Quellcode:
HardCast := TLabel(FindComponent('Label' + IntToStr(i))); // weißt einfach zu, ohne den Typ zu prüfen
SoftCast := (FindComponent('Label' + IntToStr(i)) as TLabel); // knallt, wenn es kein Label ist (NIL ist aber erlaubt, da es ja kein "falscher" Typ ist)
if FindComponent('Label' + IntToStr(i)) is TLabel then ...; // prüft ob der Typ stimmt (nil ist nicht möglich, da nicht dieser Typ drin ist)

bernau 3. Apr 2018 11:49

AW: Label[i]
 
Oder einfach eine Funktion basteln, die mir die Labels übergibt.

Damit bist du unabhängig von der Namensgebung deiner Labels und kannst gezielt nur die Labels ansprechen, die wirklich benötigt werden, wenn noch mehr Label auf deiner Form vorhanden sind.

Delphi-Quellcode:

Function TForm1.GetLabel(aIndex:Integer):TLabel;
begin
  case aIndex of
    1:Result := Label1;
    2:Result := Label2;
    3:Result := LabelXYZ;
    4:Result := Labelqqq;
    5:Result := LabelWasWeisIch;
  else
    Result := nil; // Oder eine Exception
  end;
end;

mkinzler 3. Apr 2018 11:52

AW: Label[i]
 
Oder Referenzen der benötigten Labels( oder allg. Controls) in einem/einer Array/Liste ablegen

Redeemer 3. Apr 2018 12:18

AW: Label[i]
 
Zitat:

Zitat von himitsu (Beitrag 1397990)
Delphi-Quellcode:
HardCast := TLabel(FindComponent('Label' + IntToStr(i))); // weißt einfach zu, ohne den Typ zu prüfen
SoftCast := (FindComponent('Label' + IntToStr(i)) as TLabel); // knallt, wenn es kein Label ist (NIL ist aber erlaubt, da es ja kein "falscher" Typ ist)
if FindComponent('Label' + IntToStr(i)) is TLabel then ...; // prüft ob der Typ stimmt (nil ist nicht möglich, da nicht dieser Typ drin ist)

Ah, danke, wollte das gerade fragen, weil ich bei Objekten immer das zweite mache, hier aber nur das erste gepostet wurde. Mir war nur bekannt, dass bei Pointern nur das erste geht.

himitsu 3. Apr 2018 12:31

AW: Label[i]
 
IS und AS sind für Klassen/Objekte. (und neuerdings auch für Interfaces).

Pointer und alle anderen Typen kann man nur Hart casten, da in den "Daten" nirgendwo der Typ gespeichert/verlinkt wird, kann es da auch keine Laufzeitprüfung (Runtime) geben.
Dort geht halt nur zur CompileTime.


HardCast macht der Compiler (daher ist das auch ein paar Nanosekunden schneller)
und SoftCast dein Programm.

Achtung, es gibt beim Compiler ein paar Casts, die auch erst zur Laufzeit passieren.
Reine HartCasts ändern keine Daten, sondern lassen dich nur anders rauf zugreifen.
Bei WideString > AnsiString und ebenso bei Variants werden vom Compiler "Übersetungsfunktionen" aufgerufen.
Und z.B. bei Interger zu Byte, mit aktiver Bereichsprüfung, wird nach dem Cast noch ein Prüfcode eingeaut. (
Delphi-Quellcode:
if WarÜberlauf then RaiseError
)

Delphi-Quellcode:
{$RANGECHECKS ON}
EinWord := EinInteger; // knallt, wenn nicht im Bereich von 0..65535
EinWord := Word(EinInteger); // harter Cast ohne Prüfung (einfach die höheren 2 Byte wegwerfen)


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

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