Entwickler-Ecke

Delphi Language (Object-Pascal) / CLX - Strings scheinbar nicht zugewiesen


cdvxdMAN - So 17.10.10 20:50
Titel: Strings scheinbar nicht zugewiesen
Hallo,
ich hatte vor einer Weile Delphi in der Schule und wollte jetzt nach einigen Jahren mal wieder etwas damit machen. Hierbei handelt es sich um ein ziemlich simples Programm:


Delphi-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:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:
64:
65:
66:
67:
68:
69:
70:
71:
72:
73:
74:
75:
76:
77:
78:
79:
80:
81:
82:
83:
84:
85:
86:
87:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
  TForm1 = class(TForm)
    generieren: TButton;
    loeschen: TButton;
    Beenden: TButton;
    MBewertung: TMemo;
    Memo2: TMemo;
    Bewertung: TLabel;
    Fazit: TLabel;
    procedure BeendenClick(Sender: TObject);
    procedure generierenClick(Sender: TObject);
    procedure loeschenClick(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;
  metxt,m1,m2,m3,m4,m5,m6,t1,t2,t3,t4,t5,t6,t7,t8,t9,t10,t11,t12,: string;
  h,h2: Integer;
const
  Zufallsbereich = 12;

implementation

{$R *.dfm}

procedure TForm1.BeendenClick(Sender: TObject);
begin
close;
end;

procedure TForm1.generierenClick(Sender: TObject);
begin

m1 := '';
m2 := '';
m3 := '';
m4 := '';
m5 := '';
m6 := '';

t1 := 'Der Arbeitsspeicher wird in einer kleinen Packung geliefert. ';
t2 := 'In einer kleinen Packung kommt sicher verpackt der Arbeitsspeicher. ';
t3 := 'Sicher und weich verpackt wird der Arbeitsspeicher in einer kleinen Packung geliefert. ';
t4 := 'Der Arbeitsspeicher kommt in einem kleinen Paket, in dem er gut gepolstert liegt. ';
t5 := 'Das Paket, in welchem der Arbeitsspeicher kommt, ist klein und gut gepolstert, sodass Beschädigungen eigentlich auszuschließen sind. ';
t6 := 'Der Speicher ist sicher in einem kleinen Paket mit Schaumstoff verpackt. ';
t7 := 'Der Speicher wird weich und sicher in einer kleinen Verpackung geliefert. ';
t8 := 'Gut geschützt wird der Arbeitsspeicher in einem kleinen Paket geliefert. ';
t9 := 'Gut verpackt in einem kleinen Paket mit Schaumstoffpolsterung wird der Arbeitsspeicher geliefert. ';
t10 := 'In einem relativ kleinen Paket wird der Arbeitsspeicher geliefert.  ';
t11 := 'Die Packung in der der Arbeitsspeicher geliefert wird ist klein und gut gepolstert. ';
t12 := 'Der Arbeitsspeicher wird in einer flachen, relativ kleinen Verpackung versendet, diese ist allerdings gut gepolstert um Schäden zu vermeiden. ';

/// 1. Teil

Randomize;
h := (Random(Zufallsbereich)+1);

If (Random(Zufallsbereich)+1) = 1 then m1 := t1;
If (Random(Zufallsbereich)+1) = 2 then m1 := t2;
If (Random(Zufallsbereich)+1) = 3 then m1 := t3;
If (Random(Zufallsbereich)+1) = 4 then m1 := t4;
If (Random(Zufallsbereich)+1) = 5 then m1 := t5;
If (Random(Zufallsbereich)+1) = 6 then m1 := t6;
If (Random(Zufallsbereich)+1) = 7 then m1 := t7;
If (Random(Zufallsbereich)+1) = 8 then m1 := t8;
If (Random(Zufallsbereich)+1) = 9 then m1 := t9;
If (Random(Zufallsbereich)+1) = 10 then m1 := t10;
If (Random(Zufallsbereich)+1) = 11 then m1 := t11;
If (Random(Zufallsbereich)+1) = 12 then m1 := t12;

metxt := m1 + m2 + m3 + m4 + m5;
MBewertung.text := metxt;

end;



Jetzt habe ich das Problem, dass manchmal kein Text im Memo "MBewertung.text" angezeigt wird, zum Beispiel wenn die Zufallszahl 7 oder 6 ist, oder irgendwie anders.
Das Ganze ist ja eigentlich ziemlich simple, aber ich finde einfach keinen Fehler.
Also wenn mir wer helfen könnte...

Gruß
cdvxdMAN


Martok - So 17.10.10 20:54

Hallo und :welcome:!

Bitte verwende für Quellcode die entsprechenden [delphi]-Tags, dann wird er "schöner" dargestellt als im Fließtext. Beispiel:

Quelltext
1:
<span class="inlineSyntax"><span class="codecomment">{PROTECTTAGea6a50f95f7c5cabaa062b241a612313}</span></span>                    

Wird:

Delphi-Quelltext
1:
var Test: integer;                    


Viele Grüße,
Martok


Gausi - So 17.10.10 21:02

Hallo und :welcome: in der EE,

Du würfelst zu oft, das ist dein Problem. ;-)

Du würfelst ungefähr ein Dutzend mal und guckst jedes Mal, was du gerade gewürfelt hast und setzt dann den String. Du möchtest aber vermutlich nur einmal würfeln, also in etwa so:


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
h := (Random(Zufallsbereich)+1);

case h of
  1: m1 := t1;
  2: m1 := t2;
  3: m1 := t3;
 // usw.
end;

metxt := m1 + m2 + m3 + m4 + m5;
MBewertung.text := metxt;


Delete - So 17.10.10 21:05

Randomize initialisiert den Zufallsgenerator. Diesen nur ein mal beim Programmstart aufrufen.

Deine if-Verzweigung ist umständlich. Besser und einfacher wäre dort an der Stelle eine case-Verzweigung zu nutzen. Siehe dazu auch die Hilfe zu case.

Warum die zusätzliche variablen m? Du kannst doch auch die t-Variablen aneinander hängen? Des weiteren wäre zu überlegen, ob hier nicht ein Array sinnvoller wäre.

Du solltest auch deine variablen aussagekräftiger benennen, dann weiß man später auch noch was mit anzufangen und der Quellcode ist für andere besser lesbar.


cdvxdMAN - So 17.10.10 21:10

Ja ich hab mir schon gedacht dass das alles viel zu kompliziert ist, aber ich kann es inzwischen nicht einfacherer ;)
Naja den Fehler hab ich verstanden... ein wenig dumm dass ich den nicht gesehen hab :D

Also vielen Dank.