Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Record an Funktion weitergeben (https://www.delphipraxis.net/115033-record-funktion-weitergeben.html)

Jeff93 4. Jun 2008 18:03


Record an Funktion weitergeben
 
Hallo,

wollte ein Programm zur Umrechnung von Geschwindigkeiten (z.Bsp: 36km/h = 10m/s) und um ein paar Daten zusammenzufassen habe ich einen Record benutzt. Nun zeigt mit Delphi einen Fehler an. :gruebel:
Delphi-Quellcode:
  TSpeed = record
    Edit           : TEdit;
(*das Edit-Feld in dem der Wert steht (zb. 36)*)
    Value          : Double;
(*der Wert im Edit-Feld in double*)
    Combobox       : TCombobox;
(*Eine Combobox in der sich die Einheit befindet (zb.: 'km')*)
    ValueofCBItems : array of Integer;
(*Hier das zweite Item der Combox z.Bsp. hat den Wert 1000,
  da man 36 muss mit 1000 multipl. um auf Meter zu kommen*)
  end;
Hier wird InputRoute definiert

Delphi-Quellcode:
 InputRoute.Edit    := Form1.ed_RouteInput;
 InputRoute.Combobox := Form1.cb_RouteUnitInput;
 Setlength(InputRoute.ValueofCBItems, 2);
 InputRoute.ValueofCBItems[0] := 1;
 InputRoute.ValueofCBItems[1] := 1000;

 InputRoute := Convert(InputRoute);

 InputRoute := CalculateValue(InputRoute);
Und hier die Funktion.

Delphi-Quellcode:
  function CalculateValue(Speed : TSpeed) : TSpeed;
  begin
    if Speed.Combobox.Items[Speed.Combobox.ItemIndex] = Speed.Combobox.Text then //hier wird der Fehler gemeldet
      Speed.Value := Speed.Value * Speed.ValueofCBItems[Speed.Combobox.ItemIndex]
      else
      Speed.Combobox.ItemIndex := 0;
    result := Speed;
  end;
Hoffe ihr könnt mir helfen, danke im Voraus.

SirThornberry 4. Jun 2008 18:05

Re: Record an Funktion weitergeben
 
Zitat:

Nun zeigt mit Delphi einen Fehler an.
Welchen? :gruebel:

Jeff93 4. Jun 2008 18:15

Re: Record an Funktion weitergeben
 
Eine Exeption der Klasse EAccessViolation, Zugriffsverletzung bei Addresse 0045E44C.

Klaus01 4. Jun 2008 18:18

Re: Record an Funktion weitergeben
 
Delphi-Quellcode:
TSpeed = record
    Edit           : TEdit;
(*das Edit-Feld in dem der Wert steht (zb. 36)*)
    Value          : Double;
(*der Wert im Edit-Feld in double*)
    Combobox       : TCombobox;
(*Eine Combobox in der sich die Einheit befindet (zb.: 'km')*)
    ValueofCBItems : array of Integer;
(*Hier das zweite Item der Combox z.Bsp. hat den Wert 1000,
  da man 36 muss mit 1000 multipl. um auf Meter zu kommen*)
  end;
Hast Du die Edit und Combobox erstellt (instantiiert)?
Wäre es nicht besser aus Edit einen String oder Integer zu machen und
aus Combobox ebenso?

Grüße
Klaus

Apollonius 4. Jun 2008 18:19

Re: Record an Funktion weitergeben
 
Combobox.ItemIndex hat nicht zufällig den Wert -1 (nichts markiert)?

Jeff93 4. Jun 2008 18:26

Re: Record an Funktion weitergeben
 
Sry, hab den Fehler gefunden, habe an der falschen Stelle gesucht, in der funktion Convert wurde der Record nicht ganz zurückgegeben. Also hatte Combobox den Wert nil und alle anderen auch! Danke dass ihr mich auf diesen Fehler aufmerksam gemacht habt.

Neutral General 4. Jun 2008 18:42

Re: Record an Funktion weitergeben
 
Hi Jeff93

Records mit Objekten finde ich etwas seltsam. Ich denke das kann man in jedem Fall anders und vorallem eleganter lösen. Wie Klaus01 schon sagte:

Zitat:

Zitat von Klaus01
Wäre es nicht besser aus Edit einen String oder Integer zu machen und
aus Combobox ebenso?


Jeff93 17. Jun 2008 13:07

Re: Record an Funktion weitergeben
 
Nein in meiner Funktion muss ich auch auf noch andere Eigenschaften der Combobox zugreifen, im Edit ebenfalls.
Delphi-Quellcode:
Try
zahl := StrToFloat(Edit1.Text);
Except
Edit1.Text := '1';
zahl := 1;
End;
PS: Sry für die späte Antwort^^

DelphiManiac 17. Jun 2008 14:49

Re: Record an Funktion weitergeben
 
// EDIT: Sorry meine Vorredner hatten das ja auch schon erwähnt

mmh,

weiß zwar nicht warum die die Editfeld / Combobox Objekte übergibst und nicht die Werte,
aber kenne deinen genauen Anwendungsfall ja auch nicht.

Aber generell würde ich nicht ein TEdit übergeben, wenn ich vielleicht nur den Wert (also die Caption) brauche.

Viele Grüße
DM

mquadrat 17. Jun 2008 15:46

Re: Record an Funktion weitergeben
 
Sowas schreit übrigens geradezu nach objektorientierter Programmierung... :warn:


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