Entwickler-Ecke

Sonstiges (Delphi) - Schulaufgabe Ausdehnungsmesser TGroupBox + TTrackbar


Fright - Do 15.09.11 20:46
Titel: Schulaufgabe Ausdehnungsmesser TGroupBox + TTrackbar
Hallo zusammen ich bin es mal wieder und wie die Topic schon sagt gibt wieder Probleme mit diesen 2 Sachen und wie ich das nun anstellen soll...

Mal die Aufgabe:

Aufgabe2

Hier die ersten versuche:


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:
unit Unit1;

interface

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

type
  TForm1 = class(TForm)
    Label_Materialausdehnung: TLabel;
    Edit_Ausgangslaenge: TEdit;
    TrackBar1: TTrackBar;
    RadioGroup1: TRadioGroup;
    Label_in_mm: TLabel;
    Edit_temperaturdifferenz: TEdit;
    Label_Temperaturdifferenz: TLabel;
    Label_Laenge: TLabel;
    Label_Ausdehnung: TLabel;
    Edit_Laenge: TEdit;
    Edit_Ausdehnung: TEdit;
    Label_Laenge2: TLabel;
    Label_Ausdehnung2: TLabel;
    Button_Ergebnis: TButton;
    procedure Edit_AusgangslaengeChange(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Edit_AusgangslaengeChange(Sender: TObject);
var
Ausgangslaenge, Temperaturdiffernz, Laenge, Ausdehnung : Integer;
begin
Ausgangslaenge := StrToInt(Edit_Ausgangslaenge.Text);
Temperaturdiffernz := StrToInt (Edit_temperaturdifferenz.Text);
Laenge := StrToInt (Edit_Laenge.Text);
Ausdehnung := StrToInt (Edit_Ausdehnung.Text)

CASE RadioGroup1.itemindex of

 0:Begin
  if True then 0.000023
end;
 1:Begin
  if True then 0.000012
end;
 2:Begin
  if True then 0.000008
end;
 3:Begin
  if True then 0.000016
end;
 4:Begin
  if True then 0.000009
end;
 5:Begin
  if True then 0.000019
end;
 6:Begin
  if True then 0.000027
end;
end;
end;
end.


das integer nicht richtig ist weiss ich, aber wusste gerade den Befehl nicht aus dem Kopf und habe das als platzhalter genommen.

wie gehe ich am besten vorran und wie funktionieren diese 2 Funktionen Richtig?

ich habe die Caseof funktion so im forum gefunden und habe sie mal ein wenig abgewandelt, aber weiss nicht ob richtig ist. hatte mir gedacht, das ich sie erweitere in so fern, das wenn es war ist die rechnung dahinter steht oder so. aber irgendwie ist mir das alles noch nicht schlüssig.

hoffe mir kann jemand helfen

---Moderiert von user profile iconNarses: Beiträge zusammengefasst---


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
CASE RadioGroup1.itemindex of
 0: Edit_Ausdehnung.Text := FloatToStr (Ausgangslaenge*0.000023);
 1: Edit_Ausdehnung.Text := FloatToStr (Ausgangslaenge*0.000012);
 2: Edit_Ausdehnung.Text := FloatToStr (Ausgangslaenge*0.000008);
 3: Edit_Ausdehnung.Text := FloatToStr (Ausgangslaenge*0.000016);
 4: Edit_Ausdehnung.Text := FloatToStr (Ausgangslaenge*0.000009);
 5: Edit_Ausdehnung.Text := FloatToStr (Ausgangslaenge*0.000019);
 6: Edit_Ausdehnung.Text := FloatToStr (Ausgangslaenge*0.000027);


wo ist der case of fehler das würde mir schon weiter helfen...

Moderiert von user profile iconNarses: Bild als Anhang hochgeladen.


HenryHux - Do 15.09.11 22:02

In dem Abschnitt ist kein direkt sichtbarer Fehler.
ABer wenn ich in den ersten Post gucke, siehts doch fast so aus, als hättest du in der Zeile über der Case-Verzweigung ein Semikolon vergessen :)

lg

EDIT: Am besten kann dir hier geholfen werde, wenn du angibst, welche Meldung dir der Compiler gibt.


Fright - Do 15.09.11 22:32

Möchte gern alles so umstellen, das er die ergebnisse erst anzeigt wenn ich auf E drücke. desweiteren soll dabei auch noch die Laenge-ausgangslaenge gerechnet werden. hat da wer einen tip?


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:
unit Unit1;

interface

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

type
  TForm1 = class(TForm)
    Label_Materialausdehnung: TLabel;
    Edit_Ausgangslaenge: TEdit;
    TrackBar1: TTrackBar;
    RadioGroup1: TRadioGroup;
    Label_in_mm: TLabel;
    Edit_temperaturdifferenz: TEdit;
    Label_Temperaturdifferenz: TLabel;
    Label_Laenge: TLabel;
    Label_Ausdehnung: TLabel;
    Edit_Laenge: TEdit;
    Edit_Ausdehnung: TEdit;
    Label_Laenge2: TLabel;
    Label_Ausdehnung2: TLabel;
    Button_Ergebnis: TButton;
    procedure Edit_AusgangslaengeChange(Sender: TObject);
    procedure TrackBar1Change(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Edit_AusgangslaengeChange(Sender: TObject);
var
Ausgangslaenge, Temperaturdiffernz, Laenge, Ausdehnung : Extended;
begin
Ausgangslaenge := StrToFloat(Edit_Ausgangslaenge.Text);
Temperaturdiffernz := StrToFloat (Edit_temperaturdifferenz.Text);
Edit_Laenge.Text := FloatToStr (Laenge);
Edit_Ausdehnung.Text := FloatToStr (Ausdehnung);

CASE RadioGroup1.itemindex of
 0: Edit_Laenge.Text := FloatToStr (Ausgangslaenge * (1 + 0.000023 * Temperaturdiffernz));
 1: Edit_Laenge.Text := FloatToStr (Ausgangslaenge * (1 + 0.000012 * Temperaturdiffernz));
 2: Edit_Laenge.Text := FloatToStr (Ausgangslaenge * (1 + 0.000008 * Temperaturdiffernz));
 3: Edit_Laenge.Text := FloatToStr (Ausgangslaenge * (1 + 0.000016 * Temperaturdiffernz));
 4: Edit_Laenge.Text := FloatToStr (Ausgangslaenge * (1 + 0.000009 * Temperaturdiffernz));
 5: Edit_Laenge.Text := FloatToStr (Ausgangslaenge * (1 + 0.000019 * Temperaturdiffernz));
 6: Edit_Laenge.Text := FloatToStr (Ausgangslaenge * (1 + 0.000027 * Temperaturdiffernz));
END;
end;
procedure TForm1.TrackBar1Change(Sender: TObject);
begin
Edit_Ausgangslaenge.Text:= FloatToStr
(TrackBar1.Position);
end;

end.


Narses - Do 15.09.11 23:00

Moin!

Bitte ändere den Titel des Topics, da er wenig über das eigentlich Thema verrät. Hier der entsprechende Absatz aus den Richtlinien [http://www.entwickler-ecke.de/richtlinien.html]:
1.2 Beiträge:
Bitte formuliere den Betreff Deiner Beiträge so, dass andere Mitglieder anhand dieser bereits das eigentliche Thema festmachen können. Beiträge wie etwa "Eine Anfängerfrage" oder "Weiß jemand, wie das geht?" lassen den Leser im Unklaren darüber, was das Thema der Diskussion ist. [...]
Einfach unten in deinem ersten Beitrag auf user defined image klicken und den Titel ändern. Danke Dir!

cu
Narses


HenryHux - Do 15.09.11 23:06

Da musst du wohl selber überlegen, wie du das am haben willst.
Immoment hast du alles ja in sowas gepackt : procedure TForm1.Edit_AusgangslaengeChange(Sender: TObject);
Jedes mal wenn also etwas in dem Edit-Feld verändert wird, wird die Procedure ausgeführt.
Also musst du das wohl als erstes da raußnehmen und wo anders reinstecken.
Ein kleiner Tipp : Such mal nach OnKeyDown.

lg


Fright - Do 15.09.11 23:08

kannst du ein wenig genauer werden?

ich bin in programmieren totaler anfänger. ich mach das gerade das 2 mal und kenne diese funktion nicht

---Moderiert von user profile iconNarses: Beiträge zusammengefasst---

kann man auch einfach sagen

CASE RadioGroup1.itemindex of

0: 0.0002 z,b,
1: 0.23232

und dann bei der formel sagen das er einen einen wert aus der box nehmen soll beim rechnen also aus der raidogroupbox?

---Moderiert von user profile iconNarses: Beiträge zusammengefasst---

wie bau ich das ein bei mir in der case alles andere soll aber so bleiben...

Edit_Ausdehnung.Text := FloatToStr ( Laenge - Ausgangslaenge);


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:
unit Unit1;

interface

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

type
  TForm1 = class(TForm)
    Label_Materialausdehnung: TLabel;
    Edit_Ausgangslaenge: TEdit;
    TrackBar1: TTrackBar;
    RadioGroup1: TRadioGroup;
    Label_in_mm: TLabel;
    Edit_temperaturdifferenz: TEdit;
    Label_Temperaturdifferenz: TLabel;
    Label_Laenge: TLabel;
    Label_Ausdehnung: TLabel;
    Edit_Laenge: TEdit;
    Edit_Ausdehnung: TEdit;
    Label_Laenge2: TLabel;
    Label_Ausdehnung2: TLabel;
    Button_Ergebnis: TButton;
    procedure TrackBar1Change(Sender: TObject);
    procedure Button_ErgebnisClick(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button_ErgebnisClick(Sender: TObject);
var
Ausgangslaenge, Temperaturdiffernz, Laenge, Ausdehnung : Extended;

begin
Ausgangslaenge := StrToFloat(Edit_Ausgangslaenge.Text);
Temperaturdiffernz := StrToFloat (Edit_temperaturdifferenz.Text);
Edit_Laenge.Text := FloatToStr (Laenge);
Edit_Ausdehnung.Text := FloatToStr (Ausdehnung);

CASE RadioGroup1.itemindex of
 0: Edit_Laenge.Text := FloatToStr (Ausgangslaenge * (1 + 0.000023 * Temperaturdiffernz));
 1: Edit_Laenge.Text := FloatToStr (Ausgangslaenge * (1 + 0.000012 * Temperaturdiffernz));
 2: Edit_Laenge.Text := FloatToStr (Ausgangslaenge * (1 + 0.000008 * Temperaturdiffernz));
 3: Edit_Laenge.Text := FloatToStr (Ausgangslaenge * (1 + 0.000016 * Temperaturdiffernz));
 4: Edit_Laenge.Text := FloatToStr (Ausgangslaenge * (1 + 0.000009 * Temperaturdiffernz));
 5: Edit_Laenge.Text := FloatToStr (Ausgangslaenge * (1 + 0.000019 * Temperaturdiffernz));
 6: Edit_Laenge.Text := FloatToStr (Ausgangslaenge * (1 + 0.000027 * Temperaturdiffernz));
 END;
end;

procedure TForm1.TrackBar1Change(Sender: TObject);
begin
Edit_Ausgangslaenge.Text:= FloatToStr
(TrackBar1.Position);
end;

end.


Fright - Do 22.09.11 22:24


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:
unit Unit1;

interface

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

type
  TForm1 = class(TForm)
    Label_Materialausdehnung: TLabel;
    Edit_Ausgangslaenge: TEdit;
    TrackBar1: TTrackBar;
    RadioGroup1: TRadioGroup;
    Label_in_mm: TLabel;
    Edit_temperaturdifferenz: TEdit;
    Label_Temperaturdifferenz: TLabel;
    Label_Laenge: TLabel;
    Label_Ausdehnung: TLabel;
    Edit_Laenge: TEdit;
    Edit_Ausdehnung: TEdit;
    Label_Laenge2: TLabel;
    Label_Ausdehnung2: TLabel;
    Button_Ergebnis: TButton;
    procedure Edit_AusgangslaengeChange(Sender: TObject);
    procedure TrackBar1Change(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Edit_AusgangslaengeChange(Sender: TObject);
var
Ausgangslaenge, Temperaturdiffernz, Laenge, Ausdehnung : Extended;
begin
Ausgangslaenge := StrToFloat(Edit_Ausgangslaenge.Text);
Temperaturdiffernz := StrToFloat (Edit_temperaturdifferenz.Text);
Edit_Laenge.Text := FloatToStr (Laenge);
Edit_Ausdehnung.Text := FloatToStr (Ausdehnung);

Laenge := (Ausgangslaenge * ( 1 + Laenge * Temperaturdiffernz));

CASE RadioGroup1.itemindex of
 0: Edit_Laenge.Text := FloatToStr (Ausgangslaenge * (1 + 0.000023 * Temperaturdiffernz));
 1: Edit_Laenge.Text := FloatToStr (0.000012);
 2: Edit_Laenge.Text := FloatToStr (Ausgangslaenge * (1 + 0.000008 * Temperaturdiffernz));
 3: Edit_Laenge.Text := FloatToStr (Ausgangslaenge * (1 + 0.000016 * Temperaturdiffernz));
 4: Edit_Laenge.Text := FloatToStr (Ausgangslaenge * (1 + 0.000009 * Temperaturdiffernz));
 5: Edit_Laenge.Text := FloatToStr (Ausgangslaenge * (1 + 0.000019 * Temperaturdiffernz));
 6: Edit_Laenge.Text := FloatToStr (Ausgangslaenge * (1 + 0.000027 * Temperaturdiffernz));
END;
end;
procedure TForm1.TrackBar1Change(Sender: TObject);
begin
Edit_Ausgangslaenge.Text:= FloatToStr
(TrackBar1.Position);
end;

end.


Wie man sieht habe ich alles hin bekommen bis auf eine Sache.

Und zwar wie berechne ich nun die Ausdehnung aus?

Im Grunde "Edit_Ausdehnung = Edit_Laenge - Edit_Ausgangslänge"

Aber 2 Probleme kommen mir dabei. Wir haben 2 verschiedene Formate sprich einmal ist eins Text und das andere eine Zahl
wie ich das löse keine ahnung wie man so eine verschachtelte rechnung macht
2. denke wenn ich den code dafür habe wird er die beiden rechnungen machen und beide ergebnisse in den 2 verschiedenen felder anzeigen oder muss ich da was beachten?

kann mir einer die codezeile dafür machen und dann kurz 1-2 sätze schreiben?


Xion - Fr 23.09.11 01:18

user profile iconFright hat folgendes geschrieben Zum zitierten Posting springen:

Und zwar wie berechne ich nun die Ausdehnung aus?

Im Grunde "Edit_Ausdehnung = Edit_Laenge - Edit_Ausgangslänge"

Aber 2 Probleme kommen mir dabei. Wir haben 2 verschiedene Formate sprich einmal ist eins Text und das andere eine Zahl

Wie FloatToStr kannst du auch wieder zurück mit StrToFloat umwandeln (falls es denn eine Float ist im String). Außerdem hast du die Werte doch schon: Ausganslaenge (das ist extended) und Laenge berechnest du (das ist auch extended). Bzw so wie du es geschrieben hast, hast du Laenge nichtmehr. Schreibe in der Case-Struktur jeweils in Laenge rein. Und am Ende schreibst du das einmal ins Edit. Dann hast du beides in extended.

Etwas sauberer ginge es dann so:

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
CASE RadioGroup1.itemindex of
  0: Alpha:=0.000023;
...
END;
Laenge := Ausgangslaenge * (1 + Alpha * Temperaturdiffernz));
Edit_Laenge.Text := FloatToStr (Laenge);

Dann brauchst du nur einmal die Formel hinschreiben ;)


user profile iconFright hat folgendes geschrieben Zum zitierten Posting springen:

2. denke wenn ich den code dafür habe wird er die beiden rechnungen machen und beide ergebnisse in den 2 verschiedenen felder anzeigen oder muss ich da was beachten?

Wenn du in 2 Felder was reinschreibst, dann steht in beiden was drin :nixweiss:


Fright - Fr 23.09.11 05:48

so hatte ich das vorher auch mal, aber alpha zeigt er mir als fehler an.


Delete - Fr 23.09.11 09:14

Ach übrigens es geht auch komplett ohne Verzweigung. ;)


Xion - Fr 23.09.11 10:31

Du musst ja auch Alpha als Variable deklarieren!?


Fright - Mi 28.09.11 18:54

Danke, durch die noch nicht so guten Erfarhungen und dadurch Folgende fehlende Ruhe beim Programmieren habe ich sowas einfaches vergessen :)

danke