Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Algorithmen, Datenstrukturen und Klassendesign (https://www.delphipraxis.net/78-algorithmen-datenstrukturen-und-klassendesign/)
-   -   Komponenteneigenschaften gehen verloren (https://www.delphipraxis.net/171355-komponenteneigenschaften-gehen-verloren.html)

Mojito 1. Nov 2012 22:54

Komponenteneigenschaften gehen verloren
 
Hallo liebe Delphi-Freunde,

ich möchte das die letzten Werte von den Variablen des Typs TRadioGroup(Indexwert) und TSpinButton(Zaehlung) bei dem Drücken auf Cancel beibehalten werden. Also die letzten Werte die eingegeben wurden worden, wenn auf OK gedrückt wurde sollen bei erneutem Aufruf des Formulars vorausgewählt sein. Leider ist das nicht der Fall und es werden willkürlich andere Zahlen angegeben. Was mag ich übersehen haben?
Vielen Dank euch!

Delphi-Quellcode:
function Formular1.starting:boolean;
var Indexwert, Zaehlung:byte;
begin
Zaehlung:=SpnEdtCount.Value;
Indexwert:=RdGrpOperator.ItemIndex;

case ShowModal of

mrOk:
begin
if not (SpnEdtCount.Value > 5) and (RdGrpOperator.ItemIndex <> -1) then
   starting := FALSE
else
   starting := TRUE;
end;

mrCancel:
begin
SpnEdtCount.Value:=Indexwert;
RdGrpOperator.ItemIndex:=Zaehlung;
starting := FALSE;
      end;
end;
end;

Sir Rufo 1. Nov 2012 23:34

AW: Komponenteneigenschaften gehen verloren
 
Zuerst einmal hilft es immer ungemein, den Code richtig zu formatieren:
Delphi-Quellcode:
function Formular1.starting : boolean;
var
  Indexwert, Zaehlung : byte;
begin
  Zaehlung := SpnEdtCount.Value;
  Indexwert := RdGrpOperator.ItemIndex;

  case ShowModal of

    mrOk :
      begin
        if not ( SpnEdtCount.Value > 5 ) and ( RdGrpOperator.ItemIndex <> - 1 )
        then
          starting := FALSE
        else
          starting := True;
      end;

    mrCancel :
      begin
        SpnEdtCount.Value      := Indexwert;
        RdGrpOperator.ItemIndex := Zaehlung;
        starting               := FALSE;
      end;
  end;
end;
Und schon sieht man etwas klarer ... und ich hätte folgende Fragen:
  1. Warum haben
    Delphi-Quellcode:
    Indexwert
    und
    Delphi-Quellcode:
    Zaehlung
    den Typen
    Delphi-Quellcode:
    Byte
    ? Damit kannst du nur Werte von 0..255 speichern. Reicht das wirklich aus?
    Interessant wird es, wenn du z.B. den Wert 256 zuweist, daraus wird dann 0 ;)
  2. Der Wert von
    Delphi-Quellcode:
    SpnEdtCount.Value
    wird in
    Delphi-Quellcode:
    Zaehlung
    gespeichert und
    Delphi-Quellcode:
    RdGrpOperator.ItemIndex
    in
    Delphi-Quellcode:
    Indexwert
    - ok
    Bei Cancel werden diese gespeicherten Werte aber "verdreht" zurückgeschrieben ... ist das so gewünscht?

EDIT: Kleiner Optimierungstip:

Statt
Delphi-Quellcode:
    mrOk :
      begin
        if not ( SpnEdtCount.Value > 5 ) and ( RdGrpOperator.ItemIndex <> - 1 )
        then
          starting := FALSE
        else
          starting := True;
      end;
einfach
Delphi-Quellcode:
    mrOk :
      starting := ( SpnEdtCount.Value > 5 ) or ( RdGrpOperator.ItemIndex < 0 );
das hilft auch den Code besser zu verstehen ;)

EDIT2:

Ich habe jetzt erst bemerkt, dass
Delphi-Quellcode:
starting
ja der Funktionsname ist und somit in deinem Code der Rückgabewert ist.
Für das bessere Codeverständnis wäre es ratsam statt den Funktionsnamen
Delphi-Quellcode:
Result
zu verwenden. Dann ist jedem auf den ersten Blick klar, dass hier der Rückgabewert der Funktion gemeint ist.
Delphi-Quellcode:
    mrOk :
      Result := ( SpnEdtCount.Value > 5 ) or ( RdGrpOperator.ItemIndex < 0 );


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