Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Variabler Elementenamen (https://www.delphipraxis.net/166557-variabler-elementenamen.html)

MrMooed 18. Feb 2012 14:36

Delphi-Version: 7

Variabler Elementenamen
 
Hallo DP,

Gleich vorweg: Ich bin relativ neu in der Delphi Programmierung :roll:
Als ein neues Projekt wollte ich einen Zeitrechner erstellen. Also ein Programm das die Vergangene (respektive verbleibende) Zeit zu einem Bestimmten Datum errechnet und ausgibt. Nun wollte ich mir die Ausgabe aber nicht nur in Jahren/ Monaten/ Wochen/ ... angeben lassen, sondern Selbst auswählen können, welche Felder angezeigt werden sollen (also z.B. nur Stunden, Minuten und Sekunden, o.Ä.)
Zu diesem Zweck wollte ich mir eine Funktion erstellen, welche den "checked" Wert der CheckBox ausliest, und dann das zugehörige Edit-Feld an-, bzw. ausschaltet.
Delphi-Quellcode:
function TForm1.IsActive(nummer: Integer): Boolean;
begin
  if CheckBox[nummer].Checked = true
    then begin
        Edit[nummer].Active := True;
        Edit[nummer].Visible := True;
        end
    else begin
        Edit[nummer].Active := False;
        Edit[nummer].Visible := False;
        end;
end;
Nun sagt mir der Compiler allerdings immer, das CheckBox und Edit nicht deklariert sein :shock:
geht sowas mit Delphi einfach nicht oder muss ich die beiden in der Function noch irgendwie deklarieren ?

Die Suche hat mir nichts hilfreiches geliefert (oder ich habe nach was falschem gesucht :pale:)

Würde mich über eine Antwort freun.

mkinzler 18. Feb 2012 14:41

AW: Variabler Elementenamen
 
Ich vermute mal du suchst .FindComponent()

himitsu 18. Feb 2012 15:03

AW: Variabler Elementenamen
 
Zitat:

Delphi-Quellcode:
function TForm1.IsActive(nummer: Integer): Boolean;
begin
  if CheckBox[nummer].Checked = true
    then begin
        Edit[nummer].Active := True;
        Edit[nummer].Visible := True;
        end
    else begin
        Edit[nummer].Active := False;
        Edit[nummer].Visible := False;
        end;
end;

Dazu dann noch:

* Besser niemals auf
Delphi-Quellcode:
=True
prüfen ...
Delphi-Quellcode:
if CheckBox[nummer].Checked then
ist kürzer und fehlerunanfälliger.

*
Delphi-Quellcode:
if x then y := true else y := false;
kann man auf
Delphi-Quellcode:
x := y;
kürzen. :zwinker:

Delphi-Quellcode:
function TForm1.IsActive(nummer: Integer): Boolean;
begin
  Edit[nummer].Active := CheckBox[nummer].Checked;
  Edit[nummer].Visible := CheckBox[nummer].Checked;
end;
bzw.
Delphi-Quellcode:
function TForm1.IsActive(nummer: Integer): Boolean;
var
  B: Boolean;
begin
  B := CheckBox[nummer].Checked;
  Edit[nummer].Active := B
  Edit[nummer].Visible := B;
end;
PS: Ist dir die Warung deines Compilers aufgefallen?
Du hast eine Funktion, aber nirgendwo wird das Result zugewiesen. :shock:

Delphi-Quellcode:
procedure TForm1.SetActive(nummer: Integer);
var
  B: Boolean;
begin
  B := CheckBox[nummer].Checked;
  Edit[nummer].Active := B
  Edit[nummer].Visible := B;
end;
oder
Delphi-Quellcode:
function TForm1.IsActive(nummer: Integer): Boolean;
begin
  Result := CheckBox[nummer].Checked;
  Edit[nummer].Active := Result
  Edit[nummer].Visible := Result;
end;
Wobei IsActive garnicht stimmt, denn schließlich liest du nicht (nur) aus, sondern setzt Eigenschaften eines Edits.
Abgesen davon ist der restlich Name IsActive auch nicht wirklich aussagefähig, denn was und wo/womit wird denn gemacht?
> z.B. SetInputEditActive oder so ähnlich

MrMooed 18. Feb 2012 15:52

AW: Variabler Elementenamen
 
wow, vielen Dank für die schnelle Antwort und Verbesserungen :thumb:

.FindComponent() habe ich noch nie von gehört (aber habe ja auch erst angefangen ;) ) Damit klappt es bestens. Und mit den
Verbesserungen / Kürzungen von himitsu sieht es sogar für die Augen ansprechend aus :dancer2:

Werde mich dann mal an die "Mathematik" machen (also der lustige Teil :lol:)

Wenn Interesse besteht, würde ich das fertige Programm (sofern keine weiteren Probleme aufkommen :oops:) dann hier hochladen :?:



Bis denne :coder:


Alle Zeitangaben in WEZ +1. Es ist jetzt 17:51 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