Autor Beitrag
sunday_2
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 101


Delphi 7.0
BeitragVerfasst: Fr 29.11.02 10:00 
Hi,

ich habe folgendes Prob:

in einer Funktion will ich jeder Zahl bzw. jedem Buchstaben einen Wert zuweisen.
ausblenden volle Höhe Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
function TSpieldefinition.buchstabe_zahl(Sender: String):integer;
var buchstabe: char;
    zahl:integer;
begin
        case buchstabe of
        '1': zahl:= 1;
        '2': zahl:= 2;
        '3': zahl:= 3;
        '4': zahl:= 4;
        '5': zahl:= 5;
        '6': zahl:= 6;
        '7': zahl:= 7;
        '8': zahl:= 8;
        '9': zahl:= 9;
        'a': zahl:= 10;
        'b': zahl:= 11;
        'c': zahl:= 12;
        'd': zahl:= 13;
        'e': zahl:= 14;
        'f': zahl:= 15;
        'g': zahl:= 16;
        'h': zahl:= 17;
        'i': zahl:= 18;
        'j': zahl:= 19;
        'k': zahl:= 20;
        'l': zahl:= 21;
        'm': zahl:= 22;
        'n': zahl:= 23;
        'o': zahl:= 24;
        'p': zahl:= 25;
        'q': zahl:= 26;
        'r': zahl:= 27;
        's': zahl:= 28;
        't': zahl:= 29;
        'u': zahl:= 30;
        'v': zahl:= 31;
        'w': zahl:= 32;
        'x': zahl:= 33;
        'y': zahl:= 34;
        'z': zahl:= 35;
        end;
        result:= zahl;
end;

in der Procedure rufe ich das so auf:
ausblenden Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
procedure TSpieldefinition.b_zahlen_okClick(Sender: TObject);
var i,j: integer;
begin
        j:=0;
        j:= buchstabe_zahl(ComboBox_zahl.Text);
        AEvent[j].Zahl := e_zahl.Text;
        AEvent[j].Name := ComboBox_Zahl.Text;
end;

j sollte jetzt eigentlich den Wert von Zahl haben (also zwischen 1 und 35) bekommt aber eine 4630527.
Wer weiß wo der Fehler steckt?

_________________
Gruß Sunday

... wer nicht fragt, bleibt dumm!!!
Klabautermann
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Veteran
Beiträge: 6366
Erhaltene Danke: 60

Windows 7, Ubuntu
Delphi 7 Prof.
BeitragVerfasst: Fr 29.11.02 10:15 
Hallo,
sunday_2 hat folgendes geschrieben:

Wer weiß wo der Fehler steckt?

Das ist einfach, du überprüfst in deiner Case Anweisung eine Variable (Buchstabe) der du keinen Wert zugewiesen hast. Deshalb erhällst du ein Undefiniertes Ergebniss.

Gruß
Klabautermann
sunday_2 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 101


Delphi 7.0
BeitragVerfasst: Fr 29.11.02 10:19 
Wie sag ich den der Funktion das buchstabe den wert von ComboBox_zahl.text haben soll?

_________________
Gruß Sunday

... wer nicht fragt, bleibt dumm!!!
Klabautermann
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Veteran
Beiträge: 6366
Erhaltene Danke: 60

Windows 7, Ubuntu
Delphi 7 Prof.
BeitragVerfasst: Fr 29.11.02 10:33 
Hallo,
sunday_2 hat folgendes geschrieben:
Wie sag ich den der Funktion das buchstabe den wert von ComboBox_zahl.text haben soll?

das geht nicht. Da Buchstabe eben nur ein Buchstabe ist und der Text in deiner Combobox ein String also viele Buchstaben sind.

Wenn du aber z.B. willst, dass der erste Buchstabe deines Parameters sender ausgewertet wird, dann siht das so aus:
ausblenden Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
function TSpieldefinition.buchstabe_zahl(Sender: String):integer;
var buchstabe: char;
  zahl:integer;
begin
  IF (sender <> '') THEN
    Buchstabe := Sender[1]
  ELSE
    Buchstabe := ''
[...]

Desweiteren solltest du eine vorkehrung, für den Fall das Buchstabe einen unerwarteten Wert hat, treffen. Das machst du am besten, indem du einen ELSE Zweig in deiner CASE Abfrage einbaust:
ausblenden Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
[...]
    'x': zahl:= 33;
    'y': zahl:= 34;
    'z': zahl:= 35;
    ELSE
      Zahl := 0;
    end;
    result:= zahl;
end;

In diesem Fall wird wenn ein Fehler Auftritt eine 0 zurückgegeben. Das kannst du dann wieder andersw abfragen.

Gruß
Klabautermann
sunday_2 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 101


Delphi 7.0
BeitragVerfasst: Fr 29.11.02 10:50 
Danke :D

_________________
Gruß Sunday

... wer nicht fragt, bleibt dumm!!!